我正致力于通过QBFC在Quickbooks中创建发票。我在自定义字段信息添加到InvoiceAdd请求时遇到问题。我使用以下代码:
Dim CountryExt As IDataExtAdd = msgReq.AppendDataExtAddRq
CountryExt.DataExtName.SetValue("Country")
CountryExt.DataExtValue.SetValue("Spain")
CountryExt.OwnerID.SetValue(0)
CountryExt.ORListTxnWithMacro.TxnDataExtWithMacro.TxnDataExtType.SetValue(ENTxnDataExtType.tdetInvoice)
CountryExt.ORListTxnWithMacro.TxnDataExtWithMacro.TxnID.SetValueUseMacro("TxnID:" & i)
添加请求适用于没有客户设置的默认值的自定义字段,但在尝试覆盖客户设置的值时会导致索引超出范围错误。
例如,如果Quickbooks客户拥有自定义字段' Country'设置为葡萄牙'代码会产生超出范围错误的发票。但是,如果客户没有默认的“国家/地区”。代码将设置“国家/地区”。发票上的字段。
我是否需要在创建发票后通过第二个dataextmodrq添加自定义数据,或者我是否缺少某些UnSet选项?
答案 0 :(得分:0)
您没有发布足够的代码来真正理解您正在做的事情,但我认为您正在做的是更新现有发票。
如果您尝试更新现有发票(及其上的自定义字段),则需要:
InvoiceModRq
DataExtModRq
请求以更新任何自定义字段值您无法直接在InvoiceModRq
内更新自定义字段。
您可以参考OSR,其中说明了用于更新发票的受支持字段。
答案 1 :(得分:0)
想出来。创建发票后,您必须使用DataExtModRq,并使用Quickbooks执行第二轮通信。看起来Quickbooks不允许您在invoiceaddrq中设置自定义字段。以下代码使用对InoviceAddRequests的响应将所有已创建发票的国家/地区字段更新为西班牙。
For i = 0 To invoiceAddResp.ResponseList.Count - 1
If invoiceAddResp.ResponseList.GetAt(i).StatusCode <> 0 Then
Check for failed entry here.
Else
Dim ExtInvoice As IInvoiceRet = invoiceAddResp.ResponseList.GetAt(i).Detail
sessMgr.BeginSession("", ENOpenMode.omDontCare)
Dim ExtReq = sessMgr.CreateMsgSetRequest("US", 12, 0)
ExtReq.Attributes.OnError = ENRqOnError.roeContinue
Dim DataExt As IDataExtMod = ExtReq.AppendDataExtModRq()
DataExt.DataExtName.SetValue("Country")
DataExt.DataExtValue.SetValue("Spain")
DataExt.OwnerID.SetValue(0)
DataExt.ORListTxn.TxnDataExt.TxnDataExtType.SetValue(ENTxnDataExtType.tdetInvoice)
DataExt.ORListTxn.TxnDataExt.TxnID.SetValue(ExtInvoice.TxnID.GetValue)
sessMgr.DoRequests(ExtReq)
sessMgr.EndSession()
End If
Next