如何使用 QuickBooks 列出所有销售收据 API
How to list all Sales Receipts using the QuickBooks API
上下文
我正在使用 C# 桌面应用程序和 QuickBooks QBFC 将销售数据导入 QuickBooks API。
我需要为公司文件中的所有销售收据建立一个备忘录值列表。这是因为备忘录包含销售参考,必须在导入新销售收据之前检查重复项。
问题
我目前使用的代码是:
IMsgSetRequest requestMsgSet = qbSessionManager.CreateMsgSetRequest("UK", 13, 0);
ISalesReceiptQuery salesReceiptQuery = requestMsgSet.AppendSalesReceiptQueryRq();
salesReceiptQuery.metaData.SetValue(ENmetaData.mdNoMetaData);
salesReceiptQuery.IncludeRetElementList.Add("Memo");
IMsgSetResponse responseMsgSet = qbSessionManager.DoRequests(requestMsgSet);
IResponseList responseList = responseMsgSet.ResponseList;
for (int i = 0; i < responseList.Count; i++)
{
IResponse response = responseList.GetAt(i);
if (response.StatusCode == 0)
{
ExistingOrderIds.Add(response.Detail.ToString());
}
else
{
Log.Error("While building OrderId list. Error returned when listing memos from QuickBooks Sales Receipts");
Log.Error(response.StatusCode + " " + response.StatusMessage + " " + response.Detail);
}
}
这 returns 只是一个 IResponseList 项目,response.detail.toString() 产生 "System.__ComObject"。这个公司档案里其实有几百张销售收据。
问题
我做错了什么?
好的,终于破解了这个。我的误解是您在 IResponseList 上进行迭代。实际上,单个 IResponseList 包含我在 ISalesReceiptRet 对象列表中的所有备忘录。因此需要对 ISalesReceiptRetList 进行迭代。 QuickBooks OSR 示例对此并不十分清楚!所以工作代码如下:
IMsgSetRequest requestMsgSet = qbSessionManager.CreateMsgSetRequest("UK", 13, 0);
ISalesReceiptQuery salesReceiptQuery = requestMsgSet.AppendSalesReceiptQueryRq();
salesReceiptQuery.metaData.SetValue(ENmetaData.mdNoMetaData);
salesReceiptQuery.IncludeRetElementList.Add("Memo");
IMsgSetResponse responseMsgSet = qbSessionManager.DoRequests(requestMsgSet);
IResponse response = responseMsgSet.ResponseList.GetAt(0);
ISalesReceiptRetList salesReceiptRetList = (ISalesReceiptRetList)response.Detail;
for (int i = 0; i < salesReceiptRetList.Count; i++)
{
if (salesReceiptRetList.GetAt(i).Memo != null)
{
string memo = salesReceiptRetList.GetAt(i).Memo.GetValue();
if (memo != string.Empty)
{
ExistingOrderIds.Add(memo);
}
}
}
上下文
我正在使用 C# 桌面应用程序和 QuickBooks QBFC 将销售数据导入 QuickBooks API。
我需要为公司文件中的所有销售收据建立一个备忘录值列表。这是因为备忘录包含销售参考,必须在导入新销售收据之前检查重复项。
问题
我目前使用的代码是:
IMsgSetRequest requestMsgSet = qbSessionManager.CreateMsgSetRequest("UK", 13, 0);
ISalesReceiptQuery salesReceiptQuery = requestMsgSet.AppendSalesReceiptQueryRq();
salesReceiptQuery.metaData.SetValue(ENmetaData.mdNoMetaData);
salesReceiptQuery.IncludeRetElementList.Add("Memo");
IMsgSetResponse responseMsgSet = qbSessionManager.DoRequests(requestMsgSet);
IResponseList responseList = responseMsgSet.ResponseList;
for (int i = 0; i < responseList.Count; i++)
{
IResponse response = responseList.GetAt(i);
if (response.StatusCode == 0)
{
ExistingOrderIds.Add(response.Detail.ToString());
}
else
{
Log.Error("While building OrderId list. Error returned when listing memos from QuickBooks Sales Receipts");
Log.Error(response.StatusCode + " " + response.StatusMessage + " " + response.Detail);
}
}
这 returns 只是一个 IResponseList 项目,response.detail.toString() 产生 "System.__ComObject"。这个公司档案里其实有几百张销售收据。
问题
我做错了什么?
好的,终于破解了这个。我的误解是您在 IResponseList 上进行迭代。实际上,单个 IResponseList 包含我在 ISalesReceiptRet 对象列表中的所有备忘录。因此需要对 ISalesReceiptRetList 进行迭代。 QuickBooks OSR 示例对此并不十分清楚!所以工作代码如下:
IMsgSetRequest requestMsgSet = qbSessionManager.CreateMsgSetRequest("UK", 13, 0);
ISalesReceiptQuery salesReceiptQuery = requestMsgSet.AppendSalesReceiptQueryRq();
salesReceiptQuery.metaData.SetValue(ENmetaData.mdNoMetaData);
salesReceiptQuery.IncludeRetElementList.Add("Memo");
IMsgSetResponse responseMsgSet = qbSessionManager.DoRequests(requestMsgSet);
IResponse response = responseMsgSet.ResponseList.GetAt(0);
ISalesReceiptRetList salesReceiptRetList = (ISalesReceiptRetList)response.Detail;
for (int i = 0; i < salesReceiptRetList.Count; i++)
{
if (salesReceiptRetList.GetAt(i).Memo != null)
{
string memo = salesReceiptRetList.GetAt(i).Memo.GetValue();
if (memo != string.Empty)
{
ExistingOrderIds.Add(memo);
}
}
}