QBO V3 API如何将名称列表实体设置为非活动状态?

时间:2014-03-21 22:23:38

标签: api quickbooks-online

我运行了这个xml请求。

<Class sparse="true" xmlns="http://schema.intuit.com/finance/v3">
    <Id>3000000000000249140</Id>
    <SyncToken>0</SyncToken>
    <Name>holy cow this is inactive</Name>
    <Active>false</Active>
    <FullyQualifiedName>holy cow this is inactive</FullyQualifiedName>
</Class>

我收到了响应代码200

<IntuitResponse xmlns="http://schema.intuit.com/finance/v3" 
time="2014-03 21T14:31:36.948-07:00">
  <Class domain="QBO" sparse="false">
    <Id>3000000000000249140</Id>
    <SyncToken>0</SyncToken>
    <MetaData>
      <CreateTime>2014-03-21T13:44:17-07:00</CreateTime>
      <LastUpdatedTime>2014-03-21T13:44:17-07:00</LastUpdatedTime>
    </MetaData>
    <Name>holy cow this is inactive</Name>
    <SubClass>false</SubClass>
    <FullyQualifiedName>holy cow this is inactive</FullyQualifiedName>
    <Active>true</Active>
  </Class>
</IntuitResponse>

我期待响应返回Active = false。

当我尝试将来自QBO的Active = false更新为Active = true时 我收到此业务错误消息。

我收到了响应代码400

<Error code="6000" element="">
  <Message>A business validation error has occurred while processing your request</Message>
  <Detail>Business Validation Error: You cannot modify a list element that has been     deleted.</Detail>
</Error>

为了进一步澄清,焦点不是在创建实体记录期间。这是我认为QBO V3 API的bug问题的一个例子。

根据文档,我应该可以在任何List Name实体记录上推送软删除,例如带有Class Entity记录的示例。这是通过将Active节点值设置为false来实现的。 QBO V3上是否存在记录,API返回的响应是响应代码200,但记录仍设置为Active = true而不是false的预期值。这告诉我QBO V3存在一个错误,它没有将List Name实体记录Active节点设置为false。

另一方面,当我尝试将记录Active = true设置为QBO V3上设置为Active = false的现有记录时,我得到引发业务规则的响应代码400.

总之,我不确定是否允许软删除?我现在必须想出一个处理我的应用程序上的软删除的工作。

1 个答案:

答案 0 :(得分:0)

&#39;主动&#39; attribute主要用于软实体删除Class实体。

根据IPP的文档,它是 - &#34; *通过在实体更新请求中将属性设置为false来实现删除;因此,使其无效。在此类删除中,记录不会被永久删除,但会被隐藏用于显示目的。对非活动对象的引用保持不变。&#34;

参考 - https://developer.intuit.com/docs/0025_quickbooksapi/0050_data_services/030_entity_services_reference/class

您能解释为什么在创建此对象时尝试将此标志设置为false。我同意,如果在创建对象时不允许使用此属性的错误值,则服务应返回有意义的错误消息。只是想了解这个用例。

第2期 - 从QBO更新Active = false的记录到Active = true

是。这绝对是一个服务问题。

Read by Id
---------------
    <IntuitResponse xmlns="http://schema.intuit.com/finance/v3" time="2014-03-22T08:38:41.182-07:00">
      <Class domain="QBO" sparse="false">
        <Id>100000000000359798</Id>
        <SyncToken>1</SyncToken>
        <MetaData>
          <CreateTime>2013-12-02T00:39:48-08:00</CreateTime>
          <LastUpdatedTime>2014-03-22T08:38:23-07:00</LastUpdatedTime>
        </MetaData>
        <Name>product_class1 (deleted)</Name>
        <SubClass>false</SubClass>
        <FullyQualifiedName>product_class1 (deleted)</FullyQualifiedName>
        <Active>false</Active>
      </Class>
    </IntuitResponse>

Update operation on a deleted/inactive class
--------------------------------------------

    <Class domain="QBO" sparse="false" xmlns="http://schema.intuit.com/finance/v3">
        <Id>100000000000359798</Id>
        <SyncToken>0</SyncToken>
        <Name>product_class1 (deleted)</Name>
        <SubClass>false</SubClass>
        <FullyQualifiedName>product_class1 (deleted)</FullyQualifiedName>
        <Active>true</Active>
    </Class>

Response of the update operation 
--------------------------------
    <IntuitResponse xmlns="http://schema.intuit.com/finance/v3" time="2014-03-22T08:40:06.725-07:00">
      <Fault type="ValidationFault">
        <Error code="6000" element="">
          <Message>A business validation error has occurred while processing your request</Message>
          <Detail>Business Validation Error: You cannot modify a list element that has been deleted.</Detail>
        </Error>
      </Fault>
    </IntuitResponse>

我们会针对此提出错误并相应地更新帖子(使用修复/发布信息)。

由于