首页 > 解决方案 > 使用 QBSDK 删除 Quickbooks 发票数据时,如何发现显然需要的“对象访问标志”

问题描述

我正在使用 QuickBooks QBFC12 SDK,具体来说,我正在尝试删除 QB 发票上的“数据扩展”。

有时以下 VB.NET 代码可以工作,但很多时候不能:

Dim objRequest As IMsgSetRequest
Dim objDatExtAdder As IDataExtAdd
Dim objResponse As IMsgSetResponse
Dim objOurResponse As IResponse
Dim objInvoiceQuery As IInvoiceQuery
Dim objInvoiceRetList As IInvoiceRetList
Dim objInvoiceRet As IInvoiceRet
Dim szInvoiceTxnID As String = ""
Dim objDataExtDel As IDataExtDel

' Check to see if the invoice is already on file.
objInvoiceQuery = objRequest.AppendInvoiceQueryRq
objInvoiceQuery.ORInvoiceQuery.InvoiceFilter.MaxReturned.SetValue(1)
objInvoiceQuery.IncludeLineItems.SetValue(True)
objInvoiceQuery.IncludeLinkedTxns.SetValue(True)
objInvoiceQuery.ORInvoiceQuery.InvoiceFilter.ORRefNumberFilter.RefNumberFilter.MatchCriterion.SetValue(ENMatchCriterion.mcEndsWith)
objInvoiceQuery.ORInvoiceQuery.InvoiceFilter.ORRefNumberFilter.RefNumberFilter.RefNumber.SetValue(szQBInvoiceNumber)
objResponse = objSessionManager.DoRequests(objRequest)
objOurResponse = objResponse.ResponseList.GetAt(0)

If objOurResponse.StatusCode = 0 Then
  ' Lock onto the invoice.
  objInvoiceRetList = objOurResponse.Detail

  If objInvoiceRetList.Count > 0 Then
    ' The invoice already exists.
    objInvoiceRet = objInvoiceRetList.GetAt(0)
    szInvoiceTxnID = objInvoiceRet.TxnID.GetValue
  End If
End If

objRequest.ClearRequests()

' Remove any previous value.
objRequest = objSessionManager.CreateMsgSetRequest("US", 11, 0)
objRequest.Attributes.OnError = ENRqOnError.roeStop

objDataExtDel = objRequest.AppendDataExtDelRq()
objDataExtDel.OwnerID.SetValue("0")
objDataExtDel.ORListTxn.TxnDataExt.TxnDataExtType.SetValue(ENTxnDataExtType.tdetInvoice)
objDataExtDel.ORListTxn.TxnDataExt.TxnID.SetValue(szInvoiceTxnID)
objDataExtDel.DataExtName.SetValue(szDataExtensionName)

objResponse = objSessionManager.DoRequests(objRequest)
objOurResponse = objResponse.ResponseList.GetAt(0)

If objOurResponse.StatusCode = 0 Then
  Debug.Print("Worked")
Else
  Debug.Print("Didn't work")
End If

在它报告“没有工作”的情况下,objourresponse.StatusMessage返回:

未在属性的属性定义中设置必要的 QuickBooks对象访问标志。QuickBooks 错误消息:未知错误

我试图了解“对象访问标志”是什么以及在哪里可以找到它,并且我在 Google 和 Intuit 开发人员的网站上搜索了更多信息,但我找不到任何东西。

有人可以帮助了解这是什么,如何解决这个问题,以及如何在必要时始终删除此数据扩展?

标签: vb.netsdkquickbooks

解决方案


经过大量的反复试验,我相信我已经找到了解决方案。

特定的扩展是我在发票上显示的下拉选择器的一部分。一些有效值是“Printed”或“Shipped”。以前,当我去更改扩展名中的值时,我首先使用 删除扩展名AppendDataExtDelRq,然后使用新值将其添加回来AppendDataExtAddRq

如果我没有使用删除/添加组合,而是使用AppendDataExtModRq并简单地更改了值,我就能获得要更改的值。

我仍然认为 SDK 中存在像 @InteXX 嫌疑人那样的错误,但我也注意到如果我在下拉菜单中将扩展名设置为预定义的值,那么一切都很好。但是,如果我尝试将扩展名设置为未在 QB 中为该扩展名/下拉菜单预定义的值,那么我会得到完全相同的错误:

未在属性的属性定义中设置必要的 QuickBooks对象访问标志。QuickBooks 错误消息:未知错误

所以结果是它现在通过使用 MOD 而不是 DELETE/ADD 方法工作,但请确保将值设置为预定义值。


推荐阅读