【问题标题】:Create new items in QuickBooks via C#通过 C# 在 QuickBooks 中创建新项目
【发布时间】:2018-08-28 15:48:23
【问题描述】:

我编写了一个 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:缺少必填字段

我完全不知道这意味着什么,而且我一生都在 Internet 上的其他地方找不到任何关于 ORSalesPurchaseIItemServiceAdd 的信息,包括他们的文档。

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

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

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


堆栈跟踪:

System.Runtime.InteropServices.COMException (0x80040307): ItemServiceAdd ORSalesPurchase:缺少必填字段 项目服务添加

在 QBFC12Lib.IQBSessionManager.DoRequests(IMsgSetRequest 请求)
在 SterlingQBExport.Form1.CheckNewInvoices(对象源, C:\Users\brian\Documents\Visual Studio 中的 ElapsedEventArgs e) 2015\Projects\SterlingQBExport\SterlingQBExport\Form1.cs:537 行

【问题讨论】:

  • 你有堆栈跟踪吗?或者你有没有设置它们并测试它是否有效?
  • @RajmondBurgaj 刚刚添加了它
  • @RajmondBurgaj 我不确定在此处为该选项“设置”什么,据我所知,ORSalesPurchase 或其子项上没有 SetValue 方法
  • “……每一步都是巨大的痛苦。”每隔一段时间,你就会遇到一个简单的例子……天堂之门打开,天使们欢欣鼓舞!
  • @ChrisCatignani 每天都在处理 QuickBooks 是一件令人悲伤的事

标签: c# quickbooks qbfc


【解决方案1】:

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

C# .NET Application with QuickBooks Desktop Edition

本文介绍了如何使用 QuickBooks 基础类 (QBFC) 库和 C# 将 .NET 应用程序与 QuickBooks Desktop Edition 集成。

...以及错误消息,您似乎缺少某些应成为请求的一部分的字段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");

//...

现在有更多的信息似乎可以推断出设置的字段会根据已经具有使用设置的快速书 ID 的项目而有所不同

itemServiceModRq.ListID.SetValue(Item.QuickBooksID);

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

【讨论】:

  • 你绝对是最棒的,sn-p 和那篇文章正是我要找的东西
  • 我会在 SO 允许我 19 小时时奖励那笔赏金 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-18
  • 1970-01-01
  • 2013-10-13
  • 2020-05-12
相关资源
最近更新 更多