vb.net - 使用 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 开发人员的网站上搜索了更多信息,但我找不到任何东西。
有人可以帮助了解这是什么,如何解决这个问题,以及如何在必要时始终删除此数据扩展?
解决方案
经过大量的反复试验,我相信我已经找到了解决方案。
特定的扩展是我在发票上显示的下拉选择器的一部分。一些有效值是“Printed”或“Shipped”。以前,当我去更改扩展名中的值时,我首先使用 删除扩展名AppendDataExtDelRq
,然后使用新值将其添加回来AppendDataExtAddRq
。
如果我没有使用删除/添加组合,而是使用AppendDataExtModRq
并简单地更改了值,我就能获得要更改的值。
我仍然认为 SDK 中存在像 @InteXX 嫌疑人那样的错误,但我也注意到如果我在下拉菜单中将扩展名设置为预定义的值,那么一切都很好。但是,如果我尝试将扩展名设置为未在 QB 中为该扩展名/下拉菜单预定义的值,那么我会得到完全相同的错误:
未在属性的属性定义中设置必要的 QuickBooks对象访问标志。QuickBooks 错误消息:未知错误
所以结果是它现在通过使用 MOD 而不是 DELETE/ADD 方法工作,但请确保将值设置为预定义值。
推荐阅读
- bootstrap-vue - 即使启用了 Bootstrap-Vue B-Form-Checkbox 也不会对点击做出反应
- android - Android上的TextView X + Y滚动
- node.js - npm firstline 包不返回第一行(字符串)而是一个 promise 对象,如何获取第一行字符串?
- python - 查找列表中的每个值都出现在 df 中的索引
- microsoft-cognitive - 为什么部署后的测试结果和 ASR 输出在 Microsoft 自定义语音中不同?
- kotlin - Kotlin 协程并行化
- python - 如何打印给定输入的前一个和下一个数字?
- java - 在 JPQL 的本机查询中使用 BETWEEN
- javascript - 如何在纯javascript中更改类的css
- python - 在 pandas 中搜索特定的子字符串