我希望我能在这里排队,我不想浪费你的时间。 我开发了一个简单的应用程序,它从数据库中提取客户发票数据并写入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&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>
提前致谢。 编辑:我忘了提到错误是非常通用的 &#34; QuickBooks在解析提供的XML文本流时发现错误。&#34; 来源:QBXMLRP2.RequestProcessor.2
答案 0 :(得分:1)
好的,我找到了原因。记录的消息引用了无效字节“( - )”。破折号字符弹出我的发票。我之前使用破折号查看了发票,发现很多都是使用相同的方法成功加载的。我没注意到的是,除了1之外,我发现的所有成功发票中的破折号都不同。
失败的xml包含–
,或者,如果您愿意,还可以使用–
或“En dash”代替正常的ascii破折号“ - ”(-
)。
SDK验证程序不会将其标记为问题。此外,包含“En dash”的1张发票之前已成功加载;我无法解释。
我使用字符替换表来处理Xml,QbXml和数据库(Oracle)的要求(或特性)。我不会更改我的编码,而是将-
替换为–
(和—
,“Em dash”的所有匹配项)。这适用于以前失败的发票。
再次感谢WilliamLorfing的帮助。