如何使用 QBPOSXML 将具有自定义字段的客户添加到 Quickbooks POS

How to add a customer with custom fields to Quickbooks POS using QBPOSXML

所以我的问题很简单:我正在尝试使用 ASP.NET 和 QBWebConnector 将客户添加到 Quickbooks,幸好我成功了。当我尝试向客户添加自定义字段时出现问题。

这是我要发送的qbposxml

<?xml version="1.0" encoding="UTF-8"?>
<?qbposxml version="3.0"?>
<QBPOSXML>
   <QBPOSXMLMsgsRq onError="stopOnError">
      <CustomerAddRq requestID="1">
         <CustomerAdd>
            <Salutation>Mr.</Salutation>
            <FirstName>Ammar</FirstName>
            <LastName>Ahmed</LastName>
            <BillAddress>
               <Street>asascc, asdas</Street>
            </BillAddress>
            <Phone>03321221221</Phone>
         </CustomerAdd>
      </CustomerAddRq>
      <DataExtModRq>
         <DataExtMod>
            <OwnerID>0</OwnerID>
            <DataExtName>IDNumber</DataExtName>
            <ListDataExtType>Customer</ListDataExtType>
            <ListObjRef>
               <FullName>Ammar Ahmed</FullName>
            </ListObjRef>
            <DataExtValue>12331</DataExtValue>
         </DataExtMod>
      </DataExtModRq>
      <DataExtModRq>
         <DataExtMod>
            <OwnerID>0</OwnerID>
            <DataExtName>GebDatum</DataExtName>
            <ListDataExtType>Customer</ListDataExtType>
            <ListObjRef>
               <FullName>Ammar Ahmed</FullName>
            </ListObjRef>
            <DataExtValue>21/22/12</DataExtValue>
         </DataExtMod>
      </DataExtModRq>
   </QBPOSXMLMsgsRq>
</QBPOSXML>

现在我得到的回复是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<QBPOSXML>
   <QBPOSXMLMsgsRs>
      <CustomerAddRs requestID="1" statusCode="0" statusMessage="Status OK" statusSeverity="Info">
         <CustomerRet>
            <ListID>755269278256496897</ListID>
            <TimeModified>2017-03-08T14:00:42+05:00</TimeModified>
            <AccountBalance>0.00</AccountBalance>
            <AccountLimit>0.00</AccountLimit>
            <CustomerDiscPercent>0.00</CustomerDiscPercent>
            <CustomerDiscType>None</CustomerDiscType>
            <FirstName>Ammar</FirstName>
            <FullName>Mr. Ammar Ahmed</FullName>
            <IsAcceptingChecks>True</IsAcceptingChecks>
            <IsUsingWithQB>False</IsUsingWithQB>
            <LastName>Ahmed</LastName>
            <Phone>03321221221</Phone>
            <PriceLevelNumber>1</PriceLevelNumber>
            <Salutation>Mr.</Salutation>
            <StoreExchangeStatus>Modified</StoreExchangeStatus>
            <BillAddress>
               <Street>asascc, asdas</Street>
            </BillAddress>
         </CustomerRet>
      </CustomerAddRs>
      <DataExtModRs statusCode="20036" statusMessage="Extension error (ListID is missing)" statusSeverity="Error">
         <DataExtRet />
      </DataExtModRs>
   </QBPOSXMLMsgsRs>
</QBPOSXML>

我不知道如何获取我要添加的客户的 ListID,因为它是在添加客户之后创建的。

注意事项:已添加客户但没有自定义字段。从 this and this 我了解到我不需要 ListID。

非常感谢任何帮助。

更新: 所以在 William Lorfing 之后,我查看了 QBPOS Programmer's Guide 的第 6 章并发现了 macros。以下是我最终使用它们的方式,并取得了出色的效果:

我的客户添加请求变为:

<?xml version="1.0" encoding="UTF-8"?>
<?qbposxml version="3.0"?>
<QBPOSXML>
   <QBPOSXMLMsgsRq onError="stopOnError">
      <CustomerAddRq requestID="1">
         <CustomerAdd defMacro="ListID:Cust1"> NOTICE THE INITIALIZATION OF MACRO!
            <Salutation>Mr.</Salutation>
            <FirstName>Ammar</FirstName>
            <LastName>Ahmed</LastName>
            <BillAddress>
               <Street>asascc, asdas</Street>
            </BillAddress>
            <Phone>03321221221</Phone>
         </CustomerAdd>
      </CustomerAddRq>
      <DataExtModRq>
         <DataExtMod>
            <OwnerID>0</OwnerID>
            <DataExtName>IDNumber</DataExtName>
            <ListDataExtType>Customer</ListDataExtType>
            <ListObjRef>
               <ListID useMacro="ListID:Cust1" /> NOTICE THE USE OF MACRO!
            </ListObjRef>
            <DataExtValue>12331</DataExtValue>
         </DataExtMod>
      </DataExtModRq>
      <DataExtModRq>
         <DataExtMod>
            <OwnerID>0</OwnerID>
            <DataExtName>GebDatum</DataExtName>
            <ListDataExtType>Customer</ListDataExtType>
            <ListObjRef>
               <ListID useMacro="ListID:Cust1" /> NOTICE THE USE OF MACRO!
            </ListObjRef>
            <DataExtValue>21/22/12</DataExtValue>
         </DataExtMod>
      </DataExtModRq>
   </QBPOSXMLMsgsRq>
</QBPOSXML>

我们先初始化宏,然后再使用它,这样就避免了额外的请求,不知道有多少行无用的代码只是为了添加自定义字段。

感谢 William Lorfing 在正确方向上的提示。

对于 QBPOS SDK,ListObjRef 需要 ListID 而不是全名。

您要么必须执行 customeradd,然后在下一个请求中使用 ListID 执行 DataExtAdd,要么您可以尝试使用宏。请参阅 POS SDK 程序员指南的第 6 章。 该指南包含在 POS SDK 中。