通过 C# 在 QuickBooks 中创建新项目

Create new items in QuickBooks via C#

我编写了一个 C# 工具来将订单从 DB 同步到 QB,每一步都非常痛苦。

我正在尝试在 QB 的数据库中创建行项目,以便我可以正确附加发票项目,但我们的系统允许销售人员输入自定义词,所以我不能只添加所有通过 QB 界面向 QB 发送可能的订单项。

我这里有这段代码

IMsgSetRequest AddItemRequestMsgSet = sessionManager.CreateMsgSetRequest("US", 8, 0);
AddItemRequestMsgSet.Attributes.OnError = ENRqOnError.roeContinue;

IItemServiceAdd itemAddRq = AddItemRequestMsgSet.AppendItemServiceAddRq();
itemAddRq.Name.SetValue(Item);
// itemAddRq.ORSalesPurchase.

IMsgSetResponse ItemAddResponseMsgSet = sessionManager.DoRequests(AddItemRequestMsgSet);
IResponse ItemAddResponse = ItemAddResponseMsgSet.ResponseList.GetAt(0);

但这是抛出一个错误:

ORSalesPurchase: required field is missing

我一点也不知道那是什么意思,而且在我的一生中,我在 Internet 的其他地方找不到任何关于 ORSalesPurchaseIItemServiceAdd 的信息,包括他们的文档。

我可以通过 Visual Studio 的自动完成功能判断 itemAddRq.ORSalesPurchase 有很多选项,但我无法从中推断出 QB 要求的内容。

将服务项目添加到 QB 的必填字段是什么?

如果有人能指出我在他们的文档中的位置,那就太棒了:)


堆栈跟踪:

System.Runtime.InteropServices.COMException (0x80040307): ItemServiceAdd ORSalesPurchase: required field is missing End of ItemServiceAdd

at QBFC12Lib.IQBSessionManager.DoRequests(IMsgSetRequest request)
at SterlingQBExport.Form1.CheckNewInvoices(Object source, ElapsedEventArgs e) in C:\Users\brian\Documents\Visual Studio 2015\Projects\SterlingQBExport\SterlingQBExport\Form1.cs:line 537

根据我在搜索 ORSalesPurchase 时发现的一篇文章...

C# .NET Application with QuickBooks Desktop Edition

This article is an introduction on how to integrate a .NET application with QuickBooks Desktop Edition using the QuickBooks Foundation Classes (QBFC) Library and C#.

... 和错误消息,您似乎缺少某些预期属于请求一部分的字段 ORSalesPurchase

使用文章中的示例,我怀疑它类似于以下内容

//Create the message set request object to hold our request
IMsgSetRequest addItemRequestMsgSet = sessionManager.CreateMsgSetRequest("US", 8, 0);
addItemRequestMsgSet.Attributes.OnError = ENRqOnError.roeContinue;

IItemServiceAdd itemServiceAddRq = addItemRequestMsgSet.AppendItemServiceAddRq();
itemServiceAddRq.Name.SetValue(Item.Name);
itemServiceAddRq.ORSalesPurchase.SalesOrPurchase.Desc.SetValue(Item.Description);
itemServiceAddRq.ORSalesPurchase.SalesOrPurchase.ORPrice.Price.SetValue(Item.Price);
itemServiceAddRq.ORSalesPurchase.SalesOrPurchase.AccountRef.FullName.SetValue("Some custom service description here");

//...

现在有更多信息似乎可以推断,字段集根据已经具有使用

设置的 quickbooks id 的项目而有所不同
itemServiceModRq.ListID.SetValue(Item.QuickBooksID);

现在,我还不能完全确定此时的必填字段是什么,但这应该是一个很好的起点,可以检查提供上述字段是否有帮助。