C# 如何使用QuickBooks API列出所有销售收据

C# 如何使用QuickBooks API列出所有销售收据,c#,quickbooks,qbfc,C#,Quickbooks,Qbfc,上下文 我正在使用C#桌面应用程序和QuickBooks QBFC API将销售数据导入QuickBooks 我需要为公司文件中的所有销售收据建立一个备忘录值列表。这是因为备忘录包含一个销售参考,在导入新的销售收据之前,必须检查该销售参考是否重复 问题 我目前使用的代码是: IMsgSetRequest requestMsgSet = qbSessionManager.CreateMsgSetRequest("UK", 13, 0); ISalesReceiptQuery salesRecei

上下文

我正在使用C#桌面应用程序和QuickBooks QBFC API将销售数据导入QuickBooks

我需要为公司文件中的所有销售收据建立一个备忘录值列表。这是因为备忘录包含一个销售参考,在导入新的销售收据之前,必须检查该销售参考是否重复

问题

我目前使用的代码是:

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);
    }
}
IMsgSetRequest-requestMsgSet=qbSessionManager.CreateMsgSetRequest(“英国”,13,0);
IsalReceiptQuery salesReceiptQuery=requestMsgSet.AppendSalesReceiptQueryRq();
salesReceiptQuery.metaData.SetValue(ENmetaData.mdNoMetaData);
salesReceiptQuery.includeTelementList.Add(“备忘录”);
IMsgSetResponse responsemssgset=qbSessionManager.DoRequests(requestMsgSet);
IResponseList responseList=responseMsgSet.responseList;
for(int i=0;i
这只返回一个IResponseList项,response.detail.toString()将生成“System.\uu ComObject”。这家公司的档案里实际上有几百张销售收据

问题


我做错了什么?

好了,终于破解了。我的误解是你在IResponseList上迭代。实际上,单个IResponseList包含ISalesReceiptRet对象列表中的所有备忘录。因此,需要在IsalReceiptRetList上进行迭代。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);
        } 
    }
}
IMsgSetRequest-requestMsgSet=qbSessionManager.CreateMsgSetRequest(“英国”,13,0);
IsalReceiptQuery salesReceiptQuery=requestMsgSet.AppendSalesReceiptQueryRq();
salesReceiptQuery.metaData.SetValue(ENmetaData.mdNoMetaData);
salesReceiptQuery.includeTelementList.Add(“备忘录”);
IMsgSetResponse responsemssgset=qbSessionManager.DoRequests(requestMsgSet);
IResponse response=responsemsgsset.ResponseList.GetAt(0);
isalReceiptRetList salesReceiptRetList=(isalReceiptRetList)response.Detail;
for(int i=0;i
那么调试代码时会发生什么情况呢。。例如,for循环
IResponse response=responseList.GetAt(i)中的这一行调试器响应列表中调用..时,是否有任何项添加到`ExistingOrderId.Add()`方法中。计数始终为1。response.StatusCode然后生成零,一个项目被添加到现有OrderID中,其值为“System.\uuu ComObject”。更多信息-进一步研究OSR,我想我可能有一个错误级别的for循环。我注意到IResponse包含“IsalReceiptRet对象列表”。但是我无法将其转换为可读的形式。
ExistingOrderIds=saleReceiptRetList.Where(x=>false==string.IsNullOrWhiteSpace(x.Memo)).Select(x=>x.Memo.GetValue()).ToList()
您可能应该将ExistingOrderIds重命名为OrderMemos或更合理的东西,这看起来很整洁。不幸的是,“'IsalReceiptRetList'不包含对'Where'的定义”。在重命名问题上,在此部分上下文中,备注字段始终包含OrderId。从中导入订单的系统的OrderID太长,QuickBooks Sale No无法容纳(令人烦恼!)您需要添加对system.linq“using system.linq;”的引用以及system.linq.Expressions。我想知道Linq处理是否因为IsalReceiptRetList背后的东西而没有实现,也就是说,一个COM接口到一个完全不同的代码结构……我无法在我的原始循环中使用foreach,所以我猜IEnumerable没有为IsalReceiptRetList实现。我还检查了该系统。顺便说一句,Linq在范围内。