.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属性中获得我需要的东西。
答案 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用户界面中,检查公司 - >销售设置是否已启用跟踪数量和价格/费率。