Как добавить клиента с настраиваемыми полями в 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.