使用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)
再次感谢您的帮助。
答案 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)];