如何从QBO API v3 .NET中的发票行读取UnitPrice

时间:2014-08-18 00:48:54

标签: intuit-partner-platform quickbooks-online

.NET SDK中奇怪的属性让我感到困惑。如何从发票行中读取UnitPrice?

如果我这样做:

sild = (SalesItemLineDetail)line.AnyIntuitObject;
ln = new QBInvoiceLine(); // My internal line item class
ln.Description = line.Description;
ln.ItemRef = new QBRef() { Id = sild.ItemRef.Value, Name = sild.ItemRef.name };
if (sild.QtySpecified)
    ln.Quantity = sild.Qty;
else
    ln.Quantity = 0;
if (sild.ItemElementName == ItemChoiceType.UnitPrice)
    ln.Rate = (decimal)sild.AnyIntuitObject;    // Exception thrown here

最后一行抛出一个无效的强制转换异常,即使调试器显示该值为20.我已尝试过其他类型,但无论我做什么都会得到相同的异常。所以我终于受到了打击,并且正在计算这样的费率:

ln.Rate = line.Amount / ln.Quantity;

(通过适当的舍入和检查除以零)

虽然我们正在谈论这个主题......我注意到在许多情况下,ItemElementName == ItemChoiceType.PriceLevelRef。那是怎么回事?据我所知,QBO不支持价格水平,我当然没有使用此发票或客户的价格水平。在这种情况下,我也能从Amount属性中获得我需要的东西。

1 个答案:

答案 0 :(得分:0)

试试这个 -

SalesItemLineDetail a1 = (SalesItemLineDetail)invoice11.Line[0].AnyIntuitObject;
object unitprice = a1.AnyIntuitObject;
decimal quantity = a1.Qty;

不支持PriceLevelRef作为'实体'。这意味着此实体不支持CRUD操作。 但是,该服务有时可能会在事务中返回只读值,但由于文档中未提及,因此请将其视为不受支持。

检查请求/响应是否为json或xml格式 - 您可以使用以下代码来设置 -

ServiceContext context = new ServiceContext(appToken, realmId, intuitServiceType, reqvalidator);
context.IppConfiguration.Message.Request.SerializationFormat = Intuit.Ipp.Core.Configuration.SerializationFormat.Json;         
context.IppConfiguration.Message.Response.SerializationFormat = Intuit.Ipp.Core.Configuration.SerializationFormat.Json;

此外,在QBO用户界面中,检查公司 - >销售设置是否已启用跟踪数量和价格/费率。