首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Quickbooks WebConnect Customer ExternalId

Quickbooks WebConnect Customer ExternalId
EN

Stack Overflow用户
提问于 2017-04-25 11:58:09
回答 1查看 95关注 0票数 0

我有一个客户,他原来的QB公司文件被破坏了。他们创建了一家新公司,肯定是以某种方式从旧公司档案中导入了他们的客户。现在看来,所有客户的QB It都不同了。由于我的系统将数据同步到QB,所以我已经从我们的内部Guid映射了我的所有客户,该Guid将他们标识为我们第一次添加这些用户时得到的QB ID。但是现在这些映射都是无效的。我删除了让客户再次同步的所有映射,但这也不起作用,因为CustomerQueryRq不支持ExternalGuid的查询,有时客户在我们的端更改了名称,所以使用全名查询不会出现任何结果。然后,当我试图添加客户时,我会失败,因为QB声称ExternalGuid已经在使用中。有人能建议我能做些什么来询问QB的用户吗?

即使只是一种将所有QB客户转储到和QBID列中的方法,我也需要在自己的数据库中重新创建映射吗?

编辑

我已经成功地从Quickbook导出了用户。

文件->实用程序->导出->列表到IIF文件

然后我选择了“客户列表”并选择了OK。

这产生了一个.iif文件,它基本上是一个标签分隔的文件,顶部有一些额外的(不必要的)遍历。我用我最喜欢的文本编辑器删除了cruft,将文件重命名为.txt,并能够成功地用Excel打开它。

那里有一些客户字段--不幸的是,他们没有导出ExternalGuid,我确实需要它来完成对我的系统的映射,但是他们至少导出了QBID。

我的意思是,他们导出了两个列,它们可以一起操作以生成QBID。列是REFNUM和时间戳。如果您将REFNUM转换成一个十六进制数,并将其填充为8位数字,前面是8位,然后是0,然后是-,然后是时间戳列,那么您将得到QBID。下面是我的Excel公式:

=CONCATENATE("8", REPT("0", 7-LEN(DEC2HEX(C2))), DEC2HEX(C2),"-",D2)

其中,C列是REFNUM,D列是时间戳

例如,如果REFNUM为20591,而时间戳为1354913279,则将20591转换为十六进制,并获得506 F。用一个前导8和3个零将其放置到8位长,以得到8000506F-13549132798000506F,并在连字符上加上时间戳以获得最终的QBID结果。

我仍然没有一个很好的解决方案,因为在我的系统中有很多重复的名字,所以我无法确定地查找所有的用户而不把ExternalGuid从他们那里拿出来,所以我仍然希望有人知道怎么做。但至少这可能有助于那些需要将QBID从QB系统中提取出来的人。

EN

回答 1

Stack Overflow用户

发布于 2017-04-27 05:16:24

在我设法在QB中完成客户导出(参见上面)之后,我得到了所有QB客户的列表,通过上面描述的操作,我能够创建所有客户的QBID。我将我现有的服务的测试版本合并在一起,并让它像在sendRequestXML Web方法中一样通过XML发送。

代码语言:javascript
复制
<?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>

每次调用我的sendRequestXML Web方法时,我都会要求另外100个用户使用QBID。

我还黑了XML方法来解析返回的receiveResponseXML

代码语言:javascript
复制
<?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应该出口他们所有的领域,而不仅仅是他们认为人们想要的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43610041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档