Как добавить клиента с настраиваемыми полями в Quickbooks POS с помощью QBPOSXML

Поэтому моя проблема довольно проста: я пытаюсь добавить клиента в Quickbooks, используя ASP.NET и QBWebConnector, и, к счастью, у меня это получается. Проблема возникает, когда я пытаюсь добавить пользовательские поля для клиента.

Вот 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 клиента, которого я добавляю, поскольку он создается после добавления клиента.

Важно отметить: клиент добавлен, но без пользовательских полей. Из этого и из этого я понял, что мне не нужен ListID.

Любая помощь будет высоко оценен.

Обновление: поэтому после ответа Уильяма Лорфинга я проверил главу 6 Руководства программиста QBPOS и обнаружил макросы. Вот как я в итоге использовал их с выдающимися результатами:

Мой запрос CustomerAdd стал:

<?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>

Сначала мы инициализируем макрос, а затем используем его, что позволяет избежать дополнительного запроса и не знать, сколько строк бесполезного кода просто для добавления настраиваемых полей.

Спасибо Уильяму Лорфингу за подсказку в правильном направлении.

1 ответ

Решение

Для QBPOS SDK ListObjRef требуется ListID, а не полное имя.

Вам нужно будет либо выполнить customeradd, а затем в следующем запросе выполнить DataExtAdd с ListID, или вы можете попробовать использовать макросы. См. Главу 6 Руководства для программистов POS SDK. Руководство включено в POS SDK.

Другие вопросы по тегам