如何在单个QBXML请求中同时添加Invoice及自定义DataExt字段
QBXML同请求添加发票及自定义字段解决方案
报错原因
- 报错有两个核心触发场景:
- QuickBooks要求所有自定义数据扩展(DataExt)必须先在后台手动创建对应字段模板,才能通过QBXML写入值。你需要先确认已经在QuickBooks中为「发票」交易类型创建了名为
kkcf的自定义字段,且字段权限对集成应用开放。 - 若确认字段已创建,报错还可能是你使用的QuickBooks版本(如入门版Simple Start)不支持自定义字段功能,或当前QBXML版本与你的QuickBooks桌面版版本不匹配。
- QuickBooks要求所有自定义数据扩展(DataExt)必须先在后台手动创建对应字段模板,才能通过QBXML写入值。你需要先确认已经在QuickBooks中为「发票」交易类型创建了名为
最优实现方式
你原本拆分两个请求用宏关联的写法逻辑通顺,但更推荐直接将自定义字段写入节点内嵌到InvoiceAdd中,不需要额外做ID关联,也不会出现事务先后问题,写法如下:
<?xml version="1.0" encoding="UTF-8"?> <?qbxml version="13.0"?> <QBXML> <QBXMLMsgsRq onError="stopOnError"> <InvoiceAddRq> <InvoiceAdd> <CustomerRef> <FullName>krunal</FullName> </CustomerRef> <RefNumber>yolo</RefNumber> <InvoiceLineAdd> <ItemRef> <FullName>ac</FullName> </ItemRef> <Quantity>1</Quantity> </InvoiceLineAdd> <!-- 直接内嵌自定义字段添加节点,无需单独请求和宏 --> <DataExtAdd> <OwnerID>0</OwnerID> <DataExtName>kkcf</DataExtName> <DataExtValue>nadiaad</DataExtValue> </DataExtAdd> </InvoiceAdd> </InvoiceAddRq> </QBXMLMsgsRq> </QBXML>
以上写法会在创建发票的同一事务中自动完成自定义字段值的写入,无需额外处理TxnID关联。
如果需要保留原有的宏关联写法,要先在集成应用权限中开启QBXML宏支持,再确认宏命名没有特殊字符避免识别失败。
内容的提问来源于stack exchange,提问作者user1887464
相关产品推荐
相关产品推荐

