You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:从Tally系统获取客户联系及地址信息失败,请求排查XML请求代码问题

求助:从Tally系统获取客户联系及地址信息失败,请求排查XML请求代码问题

问题描述

我正在开发一个从Tally系统拉取数据的应用,目前能成功获取客户的姓名、别名、父分类这些基础信息,但联系电话、邮编、国家/州、详细地址这些联系及地址类数据始终无法获取到。

我已经在XML请求的TDL部分指定了相关字段,但返回的结果里完全没有这部分内容。以下是我当前使用的TypeScript代码(包含生成XML请求的逻辑):

export const GET_SUNDRY_DEBTORS_XML = (companyName: string): string => ` 
<ENVELOPE> 
<HEADER> 
<VERSION>1</VERSION> 
<TALLYREQUEST>Export</TALLYREQUEST> 
<TYPE>Collection</TYPE> 
<ID>Ledger</ID> 
</HEADER> 
<BODY> 
<DESC> 
<STATICVARIABLES> 
<SVCURRENTCOMPANY>${companyName}</SVCURRENTCOMPANY> 
</STATICVARIABLES> 
<TDL> 
<TDLMESSAGE> 
<COLLECTION NAME="SundryDebtors" ISMODIFY="No"> 
<TYPE>Ledger</TYPE> 
<FETCH> NAME, PARENT, LEDMAILINGDETAILS.LIST, LEDMAILINGDETAILS.MAILINGNAME, LEDMAILINGDETAILS.PINCODE, LEDMAILINGDETAILS.ADDRESS, LEDMAILINGDETAILS.STATE, LEDMAILINGDETAILS.COUNTRY, CONTACTDETAILS.LIST, CONTACTDETAILS.PHONENUMBER, LANGUAGEALIAS, OPENINGBALANCE </FETCH> 
<FILTERS> 
<FILTER>OnlySundryDebtors</FILTER> 
</FILTERS> 
</COLLECTION> 
<SYSTEM TYPE="String" NAME="OnlySundryDebtors"> $$IsGroupEqual:$PARENT:"Sundry Debtors" </SYSTEM> 
</TDLMESSAGE> 
</TDL> 
</DESC> 
</BODY> 
</ENVELOPE> `;

问题排查与解决方案

我结合Tally的TDL(Tally Definition Language)规范,梳理出几个可能导致数据拉取失败的原因,以及对应的修正方案:

1. 核心字段名拼写错误

Tally中邮寄地址的标准父字段名是**LEDGERMAILINGDETAILS**(你当前写的是LEDMAILINGDETAILS,少了末尾的ER),这是很多开发者容易踩的拼写坑,直接导致Tally无法识别你要拉取的地址节点。

2. 重复子项的展开逻辑缺失

LEDGERMAILINGDETAILS和CONTACTDETAILS都属于重复子项(Repeating Sub-Items),仅通过.LIST引用无法完整拉取嵌套的子字段,需要用<EXPLODE>标签强制展开这些集合,让Tally返回所有关联的子数据。

3. 联系电话字段名版本差异

部分Tally版本中,联系电话的字段名是PHONE而非PHONENUMBER,如果你的Tally版本较旧,这个字段名不匹配也会导致数据为空。


修正后的完整TDL代码片段

<TDLMESSAGE>
<COLLECTION NAME="SundryDebtors" ISMODIFY="No">
  <TYPE>Ledger</TYPE>
  <!-- 修正字段名拼写,简化重复子项的引用 -->
  <FETCH> 
    NAME, PARENT, 
    LEDGERMAILINGDETAILS.MAILINGNAME, LEDGERMAILINGDETAILS.PINCODE, LEDGERMAILINGDETAILS.ADDRESS, LEDGERMAILINGDETAILS.STATE, LEDGERMAILINGDETAILS.COUNTRY,
    CONTACTDETAILS.PHONE,
    LANGUAGEALIAS, OPENINGBALANCE 
  </FETCH>
  <!-- 强制展开嵌套的重复子项 -->
  <EXPLODE>LEDGERMAILINGDETAILS, CONTACTDETAILS</EXPLODE>
  <FILTERS>
    <FILTER>OnlySundryDebtors</FILTER>
  </FILTERS>
</COLLECTION>
<SYSTEM TYPE="String" NAME="OnlySundryDebtors"> $$IsGroupEqual:$PARENT:"Sundry Debtors" </SYSTEM>
</TDLMESSAGE>

额外测试建议

  • 如果修正后仍无数据,可以尝试在<FETCH>中仅保留LEDGERMAILINGDETAILS和CONTACTDETAILS(不带子字段),让Tally返回该节点的所有默认字段,以此确认字段名的正确性。
  • 核对Tally版本兼容性:不同版本的Tally在TDL字段名上可能存在细微差异,建议参考对应版本的官方文档确认字段规范。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 03:10:31