尝试添加库存物料(QBO),但忽略属性

时间:2013-12-30 20:28:01

标签: intuit-partner-platform

我使用的是IPP .NET SDK(版本2.0.1.0),VS2013和C#

我提交新项目的代码如下(我已插入静态数据进行验证)。

var item = new Item()
{ 
    Type = ItemTypeEnum.Inventory,
    TrackQtyOnHand = true,
    QtyOnHand = 12,
    InvStartDate = DateTime.Today,
    Active = true,
    Name = "TEST0004",
    Description = "Test Product",
    PurchaseDesc = "Test Product",
    Taxable = true,
    SalesTaxIncluded = false,
    IncomeAccountRef = new ReferenceType() { Value = "1" }, // SALES
    ExpenseAccountRef = new ReferenceType() { Value = "50" }, // COGS
    AssetAccountRef = new ReferenceType() { Value = "49" }, // Inventory Asset
    UnitPrice = 10M,
    PurchaseCost = 7.5M,
    sparse = true
};

ServiceContext serviceContext = getServiceContext(profile);
var data = new DataService(serviceContext).Add<Item>(item);

我的期望是添加新的库存商品并启用数量跟踪。以下是使用API​​ Explorer查询此产品时的响应。

<IntuitResponse xmlns="http://schema.intuit.com/finance/v3" time="2013-12-30T11:45:02.640-08:00">
  <QueryResponse startPosition="1" maxResults="1">
    <Item domain="QBO" sparse="false">
      <Id>21</Id>
      <SyncToken>0</SyncToken>
      <MetaData>
        <CreateTime>2013-12-30T11:40:41-08:00</CreateTime>
        <LastUpdatedTime>2013-12-30T11:40:41-08:00</LastUpdatedTime>
      </MetaData>
      <Name>TEST0004</Name>
      <Description>Test Product</Description>
      <Active>true</Active>
      <FullyQualifiedName>TEST0004</FullyQualifiedName>
      <Taxable>false</Taxable>
      <UnitPrice>0</UnitPrice>
      <Type>Service</Type>
      <IncomeAccountRef name="Sales">1</IncomeAccountRef>
      <PurchaseDesc>Test Product</PurchaseDesc>
      <PurchaseCost>0</PurchaseCost>
      <ExpenseAccountRef name="Cost of Goods Sold">50</ExpenseAccountRef>
      <TrackQtyOnHand>false</TrackQtyOnHand>
    </Item>
  </QueryResponse>
</IntuitResponse>

我遇到的最关键问题是: 1.该项目作为服务类型而非库存添加 2. TrackQtyOnHand是假的,不是真的 3.缺少AssetAccountRef, 最初的QtyOnHand是missin, 5. PurchaseCost和UnitPrice为0

发生了什么事?这个SDK坏了吗?或者我错过了什么。我已经能够获得非常类似的代码(部门),类别(类)的代码。

提前感谢您提供的任何帮助。

3 个答案:

答案 0 :(得分:0)

请检查您是否已从QBO的首选项菜单中启用“QtyOnHand”。

我是从APIExplorer尝试过的。它在那里工作正常。请看看。

创建请求

<Item xmlns="http://schema.intuit.com/finance/v3" sparse="false">
      <Name>ABCD_CLONE</Name>
      <Active>true</Active>
      <FullyQualifiedName>ABCD</FullyQualifiedName>
      <Taxable>false</Taxable>
      <UnitPrice>45</UnitPrice>
      <Type>Inventory</Type>
      <IncomeAccountRef name="Sales of Product Income">49</IncomeAccountRef>
      <PurchaseCost>0</PurchaseCost>
      <ExpenseAccountRef name="Cost of Goods Sold">50</ExpenseAccountRef>
      <AssetAccountRef name="Inventory Asset">51</AssetAccountRef>
      <TrackQtyOnHand>true</TrackQtyOnHand>
      <QtyOnHand>1000</QtyOnHand>
      <InvStartDate>2013-12-31</InvStartDate>
</Item>

<强>响应

<IntuitResponse xmlns="http://schema.intuit.com/finance/v3" time="2013-12-30T19:42:45.781-08:00">
  <Item domain="QBO" sparse="false">
    <Id>6</Id>
    <SyncToken>0</SyncToken>
    <MetaData>
      <CreateTime>2013-12-30T19:42:45-08:00</CreateTime>
      <LastUpdatedTime>2013-12-30T19:42:45-08:00</LastUpdatedTime>
    </MetaData>
    <Name>ABCD_CLONE</Name>
    <Active>true</Active>
    <FullyQualifiedName>ABCD_CLONE</FullyQualifiedName>
    <Taxable>false</Taxable>
    <UnitPrice>45</UnitPrice>
    <Type>Inventory</Type>
    <IncomeAccountRef name="Sales of Product Income">49</IncomeAccountRef>
    <PurchaseCost>0</PurchaseCost>
    <ExpenseAccountRef name="Cost of Goods Sold">50</ExpenseAccountRef>
    <AssetAccountRef name="Inventory Asset">51</AssetAccountRef>
    <TrackQtyOnHand>true</TrackQtyOnHand>
    <QtyOnHand>1000</QtyOnHand>
    <InvStartDate>2013-12-31</InvStartDate>
  </Item>
</IntuitResponse>

如果可能,请通过在调试模式下配置记录器来从代码中获取原始请求XML。

PN - 有一个与QtyOnHand更新相关的开放式错误。预计将在下一版本中修复。

由于

答案 1 :(得分:0)

你的C#代码不起作用的主要原因是因为Intuit要求你设置各种&#34;被指定&#34;属性,例如TrackQtyOnHandSpecified = true。

希望他们改进他们的属性设置,以便在我们为他们分配数据时自动将这些Specified字段设置为true。现在,您需要查看您设置的每个属性,以查看是否同时设置了关联的Specified属性。现在很尴尬。

干杯, 格雷格

答案 2 :(得分:0)

似乎他们仍然没有解决这个问题。但我在这里,我可以告诉你一个解决方法来解决这个问题。

像往常一样创建一个新项目:

            Item i = new Item();
            i.Name = "Art 1";
            i.TrackQtyOnHand = true;
            i.TypeSpecified = true;
            i.Type = ItemTypeEnum.Inventory;
            i.QtyOnHand = 0;
            i.InvStartDate = DateTime.Now;
            i.PurchaseCost = 10;
            i.UnitPrice = 111;
            i.FullyQualifiedName = "Art 1";

            i.IncomeAccountRef = new ReferenceType
            {
                Value = "63"
            };
            i.ExpenseAccountRef = new ReferenceType
            {
                Value = "64"
            };
            i.AssetAccountRef = new ReferenceType
            {
                Value = "65",
                name = "Inventory Asset"

            };
            Item newItem = dataService.Add(i) as Item;

现在要修复此问题,您必须立即更新新添加的产品,如下所示:

            newItem.UnitPrice = i.UnitPrice;
            newItem.PurchaseCost = i.PurchaseCost;
            newItem.QtyOnHand = i.QtyOnHand;
            newItem.InvStartDate = i.InvStartDate;
            newItem.Type = i.Type;
            newItem.TypeSpecified = true;
            newItem.AssetAccountRef = i.AssetAccountRef;
            i = dataService.Update(newItem) as Item;

而wala,就是这样。 希望它对某人有所帮助;)