Ошибка InvoiceAddRq по неизвестной причине

Надеюсь, я останусь здесь в очереди, я не хочу тратить ваше время. Я разработал простое приложение, которое извлекает данные счетов клиентов из базы данных и записывает XML-запросы для загрузки данных счетов в QuickBooks. Это работает хорошо. Я столкнулся и исправил дюжину или около того причуд и глюков по пути; он находится в производстве около года.
При загрузке сегодняшних счетов в QuickBooks один из них потерпел неудачу.
В данных ошибочного счета не было никаких нежелательных символов или странностей; Я сравнил его с другими счетами-фактурами и нашел очень похожие данные, которые оказались успешными; Я проверил значения ListID для каждого объекта; Я в тупике. Если кто-нибудь может помочь с этим, я буду очень признателен. Вот XML, который сегодня не удался (единственное изменение состоит в том, что я заблокировал пару имен): FAILED InvoiceAddRq:

<?xml version="1.0"?>
<?qbxml version="8.0"?>
<QBXML>
<QBXMLMsgsRq onError="stopOnError">
<InvoiceAddRq  requestID="16012816370245509">
<InvoiceAdd>
<CustomerRef><ListID>3E00001-1139583887</ListID></CustomerRef>
<ARAccountRef><ListID>380000-1137509930</ListID></ARAccountRef>
<TemplateRef><ListID>B0000-1142608867</ListID></TemplateRef>
<TxnDate>2016-01-28</TxnDate>
<RefNumber>60125008</RefNumber>
<PONumber>AI600292569</PONumber>
<TermsRef><ListID>20000-1137508984</ListID></TermsRef>
<ShipDate>2016-01-25</ShipDate>
<Other>XYXYX PLASTICS</Other>
<InvoiceLineAdd>
<ItemRef><ListID>20000-1139578831</ListID></ItemRef>
<Desc>RECOVERING 1/25DEL. 1/26 @ 11:57 AM EST – POD XYXYX</Desc>
<Quantity>1</Quantity>
<Rate>480.79</Rate>
<Other1>6</Other1>
<Other2>3466</Other2>
</InvoiceLineAdd>
</InvoiceAdd>
<IncludeRetElement>TxnID</IncludeRetElement><IncludeRetElement>TimeCreated</IncludeRetElement><IncludeRetElement>RefNumber</IncludeRetElement>
</InvoiceAddRq>
</QBXMLMsgsRq>
</QBXML>

Я не вижу здесь ничего плохого. Я сравнил это с XML для многих успешных запросов InvoiceAdd, которые произошли до и после этого. Затем я попробовал еще раз для проверки на невменяемость (результат тот же).
Ниже я выложу аналогичный счет в качестве успешного примера. УСПЕШНЫЙ InvoiceAddRq:

<?xml version="1.0"?>
<?qbxml version="8.0"?>
<QBXML>
<QBXMLMsgsRq onError="stopOnError">
<InvoiceAddRq  requestID="160128164851801">
<InvoiceAdd>
<CustomerRef><ListID>80000915-1294766937</ListID></CustomerRef>
<ARAccountRef><ListID>380000-1137509930</ListID></ARAccountRef>
<TemplateRef><ListID>B0000-1142608867</ListID></TemplateRef>
<TxnDate>2016-01-28</TxnDate>
<RefNumber>60125011</RefNumber>
<PONumber>2200166200</PONumber>
<TermsRef><ListID>20000-1137508984</ListID></TermsRef>
<ShipDate>2016-01-26</ShipDate>
<Other>X&amp;Y MEHOOPANY </Other>
<InvoiceLineAdd>
<ItemRef><ListID>20000-1139578831</ListID></ItemRef>
<Desc>UNABLE TO DELIVER DUE TO THE WEATHER 1-22DEL. 1-25, POD. AXYXYX BXYXYXY @14:30</Desc>
<Quantity>1</Quantity>
<Rate>148.60</Rate>
<Other1>1</Other1>
<Other2>3</Other2>
</InvoiceLineAdd>
</InvoiceAdd>
<IncludeRetElement>TxnID</IncludeRetElement><IncludeRetElement>TimeCreated</IncludeRetElement><IncludeRetElement>RefNumber</IncludeRetElement>
</InvoiceAddRq>
</QBXMLMsgsRq>
</QBXML>

Заранее спасибо. edit: я забыл упомянуть, что ошибка была очень общей: «QuickBooks обнаружил ошибку при анализе предоставленного текстового потока XML». Источник:QBXMLRP2.RequestProcessor.2


person Bill1260231    schedule 29.01.2016    source источник
comment
Попробуйте использовать программу проверки, включенную в SDK, чтобы определить, что не так. Я прогнал его, и он не показывает никаких ошибок. Попробуйте включить подробное ведение журнала и посмотрите, могут ли журналы дать вам указание на причину сбоя. intuitpartnerplatform.lc.intuit.com/questions/   -  person William Lorfing    schedule 29.01.2016
comment
Спасибо, Уильям. Я попробую подробное ведение журнала. Я не устанавливал это раньше, поэтому я посмотрю, как это сделать, и вернусь, если что-нибудь найду.   -  person Bill1260231    schedule 30.01.2016
comment
@WilliamLorfing, я перешел по вашей ссылке (очень полезной в частности и в целом, спасибо), изучив подробное ведение журнала для qbxml. Перед включением подробного логирования я обнаружил в логе такое сообщение: XercesSAXErrorHandler Произошло исключение! Тип: UTFDataFormatException, Сообщение: недопустимый байт 1 (–) 1-байтовой последовательности. Проблема с одним или несколькими символами при использовании текущей кодировки XML, возможно, из-за использования стандартной кодировки. Попробуйте использовать ISO-8859-1 или другую схему кодирования.   -  person Bill1260231    schedule 30.01.2016


Ответы (1)


Хорошо, я нашел причину. В зарегистрированном сообщении указан неверный байт "(-)". Символ тире отбрасывал мой счет-фактуру. Ранее я просматривал счета с помощью тире и обнаружил, что многие из них были успешно загружены с использованием того же метода. Чего я не заметил, так это того, что символы тире были разными во всех успешных счетах, которые я нашел, кроме 1. Неудачный xml включает &#150; или, если хотите, &ndash; или "En dash" вместо обычного тире ascii "-" (&#45;). Средство проверки SDK не отмечает это как проблему. Кроме того, 1 счет-фактура с пометкой "Короткое тире" ранее был успешно загружен; Я не могу это объяснить. Я использую таблицы подстановки символов, чтобы справиться с требованиями (или особенностями) Xml, QbXml и базы данных (Oracle). Вместо того, чтобы менять свою кодировку, я заменю &#45; на все вхождения &#150;&#151;, "длинное тире", если уж на то пошло). Это сработало для ранее неудачного счета. Еще раз спасибо WilliamLorfing за помощь.

person Bill1260231    schedule 30.01.2016