1

我们正在尝试在我们的应用程序中添加回写功能。我们正在使用 Java SDK。我们尝试两种方法来更新现有客户

方法一

  1. 使用 customerQuery 检索客户对象
  2. 使用相同的客户对象进行更新
  3. 成功更新。

方法二

  1. 创建新的客户对象
  2. 使用 SetId() 方法为新创建的对象设置 ID
  3. 更新客户
  4. 得到以下异常

-2001 错误详细信息 :: cvc-complex-type.2.4.a:发现以元素“MiddleName”开头的无效内容。'{" http://www.intuit.com/sb/cdm/v2 ":SyncToken、" http://www.intuit.com/sb/cdm/v2 ":MetaData、" http://www之一.intuit.com/sb/cdm/v2 ":ExternalKey, " http://www.intuit.com/sb/cdm/v2 ":同步, " http://www.intuit.com/sb/cdm/v2 ":AlternateId, " http://www.intuit.com/sb/cdm/v2 ":CustomField, " http://www.intuit.com/sb/cdm/v2 ":Draft, " http://www .intuit.com/sb/cdm/v2 ":ObjectState, " http://www.intuit.com/sb/cdm/v2 ":PartyReferenceId, "“:TypeOf}”是预期的。com.intuit.ds.qb.IDSException:错误(-2001):cvc-complex-type.2.4.a:发现以元素“MiddleName”开头的无效内容。“{”之一http://www.intuit.com/sb/cdm/v2 ":SyncToken, " http://www.intuit.com/sb/cdm/v2 ":MetaData, " http://www.intuit.com/ sb/cdm/v2 ":ExternalKey, " http://www.intuit.com/sb/cdm/v2 ":Synchronized, " http://www.intuit.com/sb/cdm/v2 ":AlternateId, " http://www.intuit.com/sb/cdm/v2 ":CustomField, " http://www.intuit.com/sb/cdm/v2 ":草稿, " http://www.intuit.com/ sb/cdm/v2 ":ObjectState, " http://www.intuit.com/sb/cdm/v2 ":PartyReferenceId, "http://www.intuit.com/sb/cdm/v2 ":TypeOf}' 是预期的。

方法 1 运行良好。但是我是否对方法2感到怀疑。第一种方法是否正确?第二种方法有什么问题?

4

1 回答 1

3

方法二

使用 SetId() 方法为新创建的对象更新客户创建新的客户对象集 ID 获取以下异常

这 ^^^ 将不起作用,因为那时您没有提供 SyncToken 值。

查看文档并查看QuickBooks 客户示例的更新,特别注意始终显示的 SyncToken 标签。

每当您使用 QuickBooks 进行更新/修改操作时,必须始终提供最新的SyncToken 标签。这意味着要更新客户,您必须始终先进行查询以获取最新的 SyncToken 值,在您的 mod/update 请求中设置 SyncToken,然后发送请求。

有关 SyncTokens 的更多信息,请访问我们的QuickBooks 集成 wiki

于 2013-02-19T13:06:52.187 回答