使用c#devkit,如何访问发票上的ItemID行

时间:2013-01-07 21:59:01

标签: intuit-partner-platform quickbooks-online

使用c#devkit,如何访问发票上的ItemID行?

我的回复xml有一个如下所示的部分:

<Line>
    <Desc>TestItem</Desc>
    <Amount>66.00</Amount>
    <Taxable>false</Taxable>
    <ItemId idDomain="QBO">3</ItemId>
    <UnitPrice>33</UnitPrice>
    <Qty>2</Qty>
    <ServiceDate>2013-01-07-08:00</ServiceDate>
</Line>

可以使用devkit从这里获取数据:

List<Intuit.Ipp.Data.Qbo.Invoice> customerInvoicesWithinDateRange = invoice.ExecuteQuery<Intuit.Ipp.Data.Qbo.Invoice>(context).ToList<Intuit.Ipp.Data.Qbo.Invoice>();
foreach (var invoiceFound in customerInvoicesWithinDateRange)
{
    foreach (var line in invoiceFound.Line)
    {
       things += line.Desc + " <br> ";
       things += line.Taxable.ToString() + " <br> ";
       things += line.ServiceDate.ToShortDateString() + " <br> ";
       things += line.Amount.ToString() + "<br>";
    }
}

但是对象中没有line.ItemId,line.Qty和line.UnitPrice。

我知道当我设置line.Items对象时它是一个ItemsChoiceType2对象,但是当我尝试访问line.Items对象时,我得到“NullReferenceException:对象引用没有设置为对象的实例。”

我错过了哪些步骤来获得难以捉摸的“3”?

由于

编辑: @Peter 当我这样做时:

List<Intuit.Ipp.Data.Qbo.Invoice> customerInvoicesWithinDateRange = invoice.ExecuteQuery<Intuit.Ipp.Data.Qbo.Invoice>(context).ToList<Intuit.Ipp.Data.Qbo.Invoice>();
var quantity = customerInvoicesWithinDateRange[0].Line[0].Items[Array.IndexOf(customerInvoicesWithinDateRange[0].Line[0].ItemsElementName, Intuit.Ipp.Data.Qbo.ItemsChoiceType2.Qty)];

我得到“System.ArgumentNullException:Value不能为null。”在第二行。我认为customerInvoicesWithinDateRange [0] .Line [0] .ItemsElementName为null。在我的foreach循环中它也是null。

修改编辑:

nm,我实际上在查询中有一张发票,我猜不会有任何行。将它包装在下面解决了最后的障碍:

if (customerInvoicesWithinDateRange[0].Line[0].Items != null)

再次感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

Items中的对象在ItemsChoiceType2的ItemsElementName数组中定义。

因此,在没有任何错误检查的情况下,可以从以下行获得数量:

var quantity = invoices[0].Line[0].Items[Array.IndexOf(invoices[0].Line[0].ItemsElementName, Intuit.Ipp.Data.Qbo.ItemsChoiceType2.Qty)];