如何将TDL代码及TCP文件内容嵌入Tally XML请求?无需依赖用户安装TCP
好的,我来帮你解决这两个关于Tally XML和TDL/TCP的问题:
1. 如何将TDL代码添加到Tally XML请求中?
Tally的XML接口支持直接在请求中临时嵌入TDL代码,不需要提前在用户端安装配置。具体做法是用<TDL>标签包裹你的TDL代码,放到XML请求的<BODY>区块内,和<DATA>标签同级即可。
举个完整的示例,这个XML请求会临时加载自定义TDL,导出账本名称和期末余额:
<ENVELOPE> <HEADER> <VERSION>1</VERSION> <TALLYREQUEST>EXPORT</TALLYREQUEST> <TYPE>DATA</TYPE> <ID>CustomLedgerExport</ID> </HEADER> <BODY> <DATA> <DESC> <STATICVARIABLES> <!-- 可在这里添加筛选条件,比如指定账本组 --> </STATICVARIABLES> </DESC> </DATA> <TDL> <TDLMESSAGE> <!-- 这里嵌入你的TDL代码 --> <REPORT NAME="CustomLedgerExport" ISMODIFY="No"> <FORM>CustomLedgerForm</FORM> </REPORT> <FORM NAME="CustomLedgerForm" ISMODIFY="No"> <PARTS>CustomLedgerPart</PARTS> </FORM> <PART NAME="CustomLedgerPart" ISMODIFY="No"> <LINE>CustomLedgerLine</LINE> <REPEAT>CustomLedgerLine : Ledger</REPEAT> </PART> <LINE NAME="CustomLedgerLine" ISMODIFY="No"> <FIELDS>LedgerName, LedgerClosingBal</FIELDS> </LINE> <FIELD NAME="LedgerName" ISMODIFY="No"> <SET>$Name</SET> </FIELD> <FIELD NAME="LedgerClosingBal" ISMODIFY="No"> <SET>$ClosingBalance</SET> </FIELD> </TDLMESSAGE> </TDL> </BODY> </ENVELOPE>
发送这个请求后,Tally会临时加载这段TDL,执行导出并返回数据,会话结束后这段TDL会自动清理,不会影响用户的Tally配置。
2. 能否在XML请求中嵌入TCP文件的代码,无需用户安装TCP?
答案是可以,但有前提条件:
TCP是TDL代码编译后的二进制文件,你无法直接将TCP文件嵌入XML请求,但如果你能获取到这个TCP对应的原始TDL源码(比如是你自己开发的,或者有权限获取源码),就可以把这些源码直接放到上面提到的<TDL>标签里,实现和安装TCP一样的效果,且完全不需要用户端安装该TCP文件。
需要注意几个关键点:
- 临时加载的TDL仅在当前XML请求会话中生效,不会修改用户的Tally本地配置
- 如果TCP是第三方开发的,你需要确保拥有使用其源码的合法授权,避免版权纠纷
- 没有源码的情况下,虽然有工具可以反编译TCP,但反编译可能违反Tally的许可协议,不建议这么做
只要你把TCP对应的TDL源码嵌入XML的<TDLMESSAGE>区块,就能在响应中获取到你需要的数据,完全不依赖用户是否安装了该TCP。
内容的提问来源于stack exchange,提问作者Sachin
相关产品推荐
相关产品推荐

