Quickbooks WebConnect Customer ExternalId

时间:2017-04-25 11:58:10

标签: synchronization quickbooks

我的客户原始QB公司文件已损坏。他们创建了一家新公司,并且必须以某种方式从旧公司文件中导入他们的客户。似乎所有客户的QB ID现在都不同了。由于我的系统将数据同步到QB,我已经从我们的内部Guid映射了我的所有客户,并将它们标识为我们在第一次添加这些用户时获得的QB ID。但现在映射都是无效的。我已经删除了所有映射以让客户再次同步,但这不起作用,因为CustomerQueryRq不支持ExternalGuid查询,有时客户已更改了我们的名字,因此查询全名并不是t打开任何结果。然后,当我尝试添加客户时,我得到了失败,因为QB声称ExternalGuid已经在使用中。任何人都可以建议我能为QB的用户提出任何问题吗?

即使只是一种以我可以获得他们的ExternalGuid和QBID列的方式转储所有QB客户的方法,我真的需要在我自己的数据库中重新创建映射吗?

修改
我已成功从Quickbooks中导出用户 File-> Utilities-> Export->列出到IIF文件
然后我选择了“客户列表”并选择了确定

这生成了一个.iif文件,它基本上是一个制表符分隔文件,顶部有一些额外的(不必要的)残缺。我用我最喜欢的文本编辑器删除了文件,将文件重命名为.txt,并且能够成功地用Excel打开它。
那里有一些客户字段 - 遗憾的是他们没有导出我真正需要完成映射到我的系统的ExternalGuid,但他们至少导出了QBID的导出。
通过“排序”我的意思是他们导出了两列可以一起操作以产生QBID的列。列是 REFNUM TIMESTAMP 。如果您将 REFNUM 转换为十六进制数字并将其填充为8位数,前导8然后是0后跟一个超级( - ),然后是 TIMESTAMP 列您将获得QBID。这是我的Excel公式:
=CONCATENATE("8", REPT("0", 7-LEN(DEC2HEX(C2))), DEC2HEX(C2),"-",D2)
其中C列是 REFNUM ,D列是 TIMESTAMP
例如,如果 REFNUM 20591 TIMESTAMP 1354913279 ,那么您将转换 20591 到十六进制并获得 506F 。填充8位数字,前导8和3为零,以获得 8000506F 并使用连字符和最终QBID结果的时间戳 8000506F-1354913279

我仍然没有一个很好的解决方案,因为我的系统中有大量重复的名称,因此我无法明确地查找所有用户而没有从中获取ExternalGuid所以我仍然希望有人知道如何要做到这一点。但至少这可能有助于需要将QBID从QB系统中取出的人。

1 个答案:

答案 0 :(得分:0)

在我设法在QB中进行客户导出(见上文)之后,我获得了所有QB客户的列表,并且通过上述操作,我能够创建所有客户的QBID。我将现有Quickbooks Web Connect Web服务的测试版本整合在一起,并通过XML发送,就像在 sendRequestXML Web方法中一样。

<?xml version="1.0"?>
<?qbxml version="13.0"?>
<QBXML>
  <QBXMLMsgsRq onError="stopOnError">
    <CustomerQueryRq>
      <ListID>80000034-1194125010</ListID>
    </CustomerQueryRq>
    <CustomerQueryRq>
      <ListID>80000067-1205524684</ListID>
    </CustomerQueryRq>
    ...
    ...
    ...
  </QBXMLMsgsRq>
</QBXML>

每当QB Web Connect调用我的 sendRequestXML 网络方法时,我都会通过其QBID请求另外100个用户。
我还破解了 receiveResponseXML Web方法来解析返回的XML。

<?xml version="1.0"?>
<QBXML>
  <QBXMLMsgsRs>
    <CustomerQueryRs statusCode="0" statusSeverity="Info" statusMessage="Status OK">
      <CustomerRet>
        <ListID>80000034-1194125010</ListID>
        <TimeCreated>2015-11-10T06:31:17-05:00</TimeCreated>
        <TimeModified>2015-11-10T06:31:17-05:00</TimeModified>
        <EditSequence>1447155077</EditSequence>
        *****************************************
        ***Intentionally Omitted Customer Data***
        *****************************************
        <ExternalGUID>{0c75ac09-61a1-400e-a8e7-4d8c50e9f267}</ExternalGUID>
      </CustomerRet>
    </CustomerQueryRs>
    <CustomerQueryRs statusCode="0" statusSeverity="Info" statusMessage="Status OK">
      <CustomerRet>
        <ListID>80000067-1205524684</ListID>
      ...
      ...  
      </CustomerRet>
    </CustomerQueryRs>
  </QBXMLMsgsRs>
</QBXML>

并非所有返回的客户都有一个ExternalGuid,因为有些客户是手动而不是通过我们的QBWC界面添加。如果返回的客户确实有ExternalGuid,我将其记录到数据库。最后花了几个小时才能通过60K +客户,但我能够从QB中的每个项目获得ExternalGuid。

我希望这有助于其他可能遇到同样问题的人。此外,QB应该导出他们所有的领域,而不仅仅是他们认为人们想要的领域。