如何通过XML请求从Tally获取名称含指定文本的账簿列表?
Tally XML请求实现账簿名称模糊匹配的正确方法
问题场景
原本的XML请求可返回Tally中所有账簿列表,添加精准匹配过滤器后能正确获取名称为'Site'的账簿,但需要获取**名称任意位置包含'Site'**的所有账簿,直接替换=为LIKE无法实现需求。
正确实现方式
在Tally的TDL公式中,LIKE运算符需要配合通配符%使用,%代表任意长度的字符序列(包括空字符)。要匹配任意位置包含'Site'的账簿,需将匹配规则改为$Name LIKE '%Site%'。
修改后的过滤器代码
<TDLMESSAGE> <COLLECTION ISMODIFY="No" ISFIXED="No" ISINITIALIZE="No" ISOPTION="No" ISINTERNAL="No" NAME="Ledgers"> <TYPE>Ledger</TYPE> <BELONGSTO>Yes</BELONGSTO> <NATIVEMETHOD>Name</NATIVEMETHOD> <FILTERS>Site</FILTERS> </COLLECTION> <SYSTEM TYPE="Formulae" NAME="Site">$Name LIKE '%Site%'</SYSTEM> </TDLMESSAGE>
完整的XML请求示例
<ENVELOPE> <HEADER> <VERSION>1</VERSION> <TALLYREQUEST>Export</TALLYREQUEST> <TYPE>Collection</TYPE> <ID>Ledgers</ID> </HEADER> <BODY> <DESC> <STATICVARIABLES> <SVEXPORTFORMAT>SysName:XML</SVEXPORTFORMAT> </STATICVARIABLES> <TDL> <TDLMESSAGE> <COLLECTION ISMODIFY="No" ISFIXED="No" ISINITIALIZE="No" ISOPTION="No" ISINTERNAL="No" NAME="Ledgers"> <TYPE>Ledger</TYPE> <BELONGSTO>Yes</BELONGSTO> <NATIVEMETHOD>Name</NATIVEMETHOD> <FILTERS>Site</FILTERS> </COLLECTION> <SYSTEM TYPE="Formulae" NAME="Site">$Name LIKE '%Site%'</SYSTEM> </TDLMESSAGE> </TDL> </DESC> </BODY> </ENVELOPE>
通配符说明
%Site:匹配以'Site'结尾的账簿名称Site%:匹配以'Site'开头的账簿名称%Site%:匹配任意位置包含'Site'的账簿名称
内容的提问来源于stack exchange,提问作者Shounak Katyayan
相关产品推荐
相关产品推荐

