【问题标题】:Quickbooks QBFC PurchaseOrderAddQuickbooks QBFC 采购订单添加
【发布时间】:2018-02-11 23:27:24
【问题描述】:

我一直在从事一个快速书项目,并且在许多方面都取得了成功,直到我在尝试添加采购订单时遇到了困难。

正如标题所述,我正在使用 QBFC - 有没有人成功地做到了这一点并且可以为我指明正确的方向?

我目前主要使用来自 Quickbooks 的 OnScreen 参考的示例代码(在自定义它之前),这是一个我已经用于我已经工作的其他方面的过程......

它运行良好,但实际上并没有向 Quickbooks 供应商添加任何内容?

提前致谢

`公共子writePO_ToQB()

    Dim sessManager As QBSessionManager
    Dim msgSetRs As IMsgSetResponse

    sessManager = New QBSessionManagerClass()
    Dim msgSetRq As IMsgSetRequest = sessManager.CreateMsgSetRequest("US", 13, 0)
    msgSetRq.Attributes.OnError = ENRqOnError.roeContinue

    MessageBox.Show("calling write command")
    writeActualQBMSG(msgSetRq)

    'step3: begin QB session and send the request
    sessManager.OpenConnection("App", "DataBridge JBOOKS")
    sessManager.BeginSession("", ENOpenMode.omDontCare)
    msgSetRs = sessManager.DoRequests(msgSetRq)



End Sub

Public Sub writeActualQBMSG(requestMsgSet As IMsgSetRequest)

    '   Dim requestMsgSet As IMsgSetRequest
    Dim PurchaseOrderAddRq As IPurchaseOrderAdd
    PurchaseOrderAddRq = requestMsgSet.AppendPurchaseOrderAddRq()

    'add all the elements of a PO to the request - need to determine what is required!!

    '  PurchaseOrderAddRq.VendorRef.FullName.SetValue("Test Vendor")
    PurchaseOrderAddRq.VendorRef.ListID.SetValue("80000094-1512152428")






    '------------------- CODE FROM QBS --------
    Dim ORInventorySiteORShipToEntityElementType162 As String
    ORInventorySiteORShipToEntityElementType162 = "InventorySiteRef"
    If (ORInventorySiteORShipToEntityElementType162 = "InventorySiteRef") Then
        'Set field value for ListID
        PurchaseOrderAddRq.ORInventorySiteORShipToEntity.InventorySiteRef.ListID.SetValue("200000-1011023419")
        'Set field value for FullName
        PurchaseOrderAddRq.ORInventorySiteORShipToEntity.InventorySiteRef.FullName.SetValue("ab")
    End If
    If (ORInventorySiteORShipToEntityElementType162 = "ShipToEntityRef") Then
        'Set field value for ListID
        PurchaseOrderAddRq.ORInventorySiteORShipToEntity.ShipToEntityRef.ListID.SetValue("200000-1011023419")
        'Set field value for FullName
        PurchaseOrderAddRq.ORInventorySiteORShipToEntity.ShipToEntityRef.FullName.SetValue("ab")
    End If
    ' ----------------- END OF CODE FROM QBS --------------------------------------------

    '------------ MOR QBS CODE ------------

    Dim ORPurchaseOrderLineAddListElement324 As IORPurchaseOrderLineAdd
    ORPurchaseOrderLineAddListElement324 = PurchaseOrderAddRq.ORPurchaseOrderLineAddList.Append()
    Dim ORPurchaseOrderLineAddListElementType325 As String
    ORPurchaseOrderLineAddListElementType325 = "PurchaseOrderLineAdd"
    If (ORPurchaseOrderLineAddListElementType325 = "PurchaseOrderLineAdd") Then
        'Set field value for ListID
        '  ORPurchaseOrderLineAddListElement324.PurchaseOrderLineAdd.ItemRef.ListID.SetValue("200000-1011023419")
        'Set field value for FullName
        ORPurchaseOrderLineAddListElement324.PurchaseOrderLineAdd.ItemRef.FullName.SetValue("granite")
        'Set field value for ManufacturerPartNumber
        ORPurchaseOrderLineAddListElement324.PurchaseOrderLineAdd.ManufacturerPartNumber.SetValue("123456789")
        'Set field value for Desc
        '   ORPurchaseOrderLineAddListElement324.PurchaseOrderLineAdd.Desc.SetValue("ab")
        'Set field value for Quantity
        ORPurchaseOrderLineAddListElement324.PurchaseOrderLineAdd.Quantity.SetValue(2)

        Dim DataExt326 As IDataExt
        DataExt326 = ORPurchaseOrderLineAddListElement324.PurchaseOrderLineAdd.DataExtList.Append()
        'Set field value for OwnerID
        ' DataExt326.OwnerID.SetValue(System.Guid.NewGuid().ToString())
        DataExt326.OwnerID.SetValue(0)
        'Set field value for DataExtName
        DataExt326.DataExtName.SetValue("ab")
        'Set field value for DataExtValue
        DataExt326.DataExtValue.SetValue("ab")
    End If
    If (ORPurchaseOrderLineAddListElementType325 = "PurchaseOrderLineGroupAdd") Then
        'Set field value for ListID
        ORPurchaseOrderLineAddListElement324.PurchaseOrderLineGroupAdd.ItemGroupRef.ListID.SetValue("200000-1011023419")
        'Set field value for FullName
        ORPurchaseOrderLineAddListElement324.PurchaseOrderLineGroupAdd.ItemGroupRef.FullName.SetValue("ab")
        'Set field value for Quantity
        ORPurchaseOrderLineAddListElement324.PurchaseOrderLineGroupAdd.Quantity.SetValue(2)
        'Set field value for UnitOfMeasure
        ORPurchaseOrderLineAddListElement324.PurchaseOrderLineGroupAdd.UnitOfMeasure.SetValue("ab")
        'Set field value for ListID
        ORPurchaseOrderLineAddListElement324.PurchaseOrderLineGroupAdd.InventorySiteLocationRef.ListID.SetValue("200000-1011023419")
        'Set field value for FullName
        ORPurchaseOrderLineAddListElement324.PurchaseOrderLineGroupAdd.InventorySiteLocationRef.FullName.SetValue("ab")
        Dim DataExt327 As IDataExt
        DataExt327 = ORPurchaseOrderLineAddListElement324.PurchaseOrderLineGroupAdd.DataExtList.Append()
        'Set field value for OwnerID
        DataExt327.OwnerID.SetValue(System.Guid.NewGuid().ToString())
        'Set field value for DataExtName
        DataExt327.DataExtName.SetValue("ab")
        'Set field value for DataExtValue
        DataExt327.DataExtValue.SetValue("ab")
    End If

    ' ----- END OF MORE QBS CODE ----------

End Sub`

【问题讨论】:

    标签: vb.net visual-studio quickbooks qbfc


    【解决方案1】:

    这里的问题是您没有包含错误和响应处理代码。您需要有与 WalkPurchaseOrderAddRs(responseMsgSet) 等效的东西。特别是在该函数中,它会检查错误情况。我有他们样本的修改版本。

    For j=0 To responseList.Count - 1
       Dim response As IResponse
       response = responseList.GetAt(i)
       'check the status code of the response
       If response.StatusCode = 0 Then
          '  response is ok, handle results as usual... 
    
       ElseIf response.StatusCode = 1 Then 
          '  Used when search results return nothing...
    
       Else '  > 1  Is an error      
          '  Is an error or warning condition...  
          '   Capture code and message from QuickBooks
    
          Dim code As String = response.StatusCode
          Dim severity As String = response.StatusSeverity '  ERROR or WARNING
          Dim message As String = response.StatusMessage
    
       End If
    Next j
    

    附带说明一下,OSR 示例代码实际上仅用于说明目的。这个和类似的代码是没有意义的。

    Dim ORInventorySiteORShipToEntityElementType162 As String
    ORInventorySiteORShipToEntityElementType162 = "InventorySiteRef"
    If (ORInventorySiteORShipToEntityElementType162 = "InventorySiteRef") Then
    

    还有一个提示。当您从 Vendor 或 ItemRef 等列表中设置值时,您可以选择 ListID 或 FullName。如果您同时使用这两个示例,则 QuickBooks 将使用 ListID。我建议您使用 FullName 并废弃 ListID。原因是 QuickBooks 会在错误消息中复制您使用的任何内容。因此,如果您的供应商不存在,您将看到诸如“缺少元素 80000094-1512152428”或“缺少元素 TheFullName”之类的内容,它们是隐秘但可读的。

    好的,再来一个... 设置自定义字段数据DataExt... 的示例代码将不起作用。您需要改用DataExtAdd 请求。

    【讨论】:

    • 谢谢 - 是的,我知道示例代码在大多数情况下几乎没有用(我已经成功地添加/修改/查询供应商、客户(在多个级别上整合客户和工作)一个不同的系统)等等......这个 PO 只是出于某种原因让我看看!唯一仍然让我挂断的事情(希望)是你提到的最后一件事...... DataEXT 件,我似乎无法弄清楚你在那里的意思,并且无法正常工作我不断收到一个错误,它无法找到 -
    • 忘记之前的评论 - 想通了 - 非常感谢!我之前得到了供应商,并且为以前的整数工作工作的多级客户,所以我知道示例代码非常无用,什么不是 - PO 只是出于某种原因让我陷入困境! - 关于价值观的很好的暗示,我之前已经想通了,但肯定在某个时候在这个问题上浪费了很多时间!我确实相信,尽管您需要实际使用 ListID 的大多数修改功能,但至少它需要我以前的一些东西。
    • 请执行错误处理。这是非常值得你的努力。 QuickBooks 会告诉你哪里出了问题。您不必浪费任何时间。既然你想通了,有什么问题吗?
    • 我确实添加了错误检查 - 包括这个问题和我的 QB 代码的其余部分,以防我有问题!感谢您的提示 - 问题只是一些必填字段没有有效数据进入 Qbs
    • @user2266878,如果对您有帮助,请不要忘记为答案投票。 ;) 大声笑
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多