首页 文章

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

提问于
浏览
0

我运行了这个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

    'Active'属性主要用于软实体的删除 .

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

    参考 - 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>
    

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

    谢谢

相关问题