0

使用 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:值不能为空。” 在第 2 行。我认为 customerInvoicesWithinDateRange[0].Line[0].ItemsElementName 为空。在我的 foreach 循环中它也是空的。

编辑编辑:

nm,我实际上在查询中有一张发票,我猜它没有任何行。将其包装在以下内容中解决了最后一个障碍:

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

再次感谢您的帮助。

4

1 回答 1

4

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

因此,无需任何错误检查,可以从以下行获得数量:

var quantity = invoices[0].Line[0].Items[Array.IndexOf(invoices[0].Line[0].ItemsElementName, Intuit.Ipp.Data.Qbo.ItemsChoiceType2.Qty)];
于 2013-01-07T22:31:49.993 回答