How to get list of ledgers from tally using XML request filtered by name that contains a specified sub-text?

326 views Asked by At

I have the following XML request that returns the list of all ledgers from Tally.

<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>
                            </COLLECTION>
                        </TDLMESSAGE>
                    </TDL>
                </DESC>
            </BODY>             
        </ENVELOPE>

Now in the above code, I added a filter as follows:

<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 = 'Site'</SYSTEM>
</TDLMESSAGE>

So, what it does is it checks if there is a ledger called 'Site' This filter works perfectly. It only gives me one ledger whose name is 'Site'. But, what I need is a list of all the ledgers that contain the word 'Site' anywhere in their name. Thus, I tried to use LIKE operator instead of =.

<SYSTEM TYPE="Formulae" NAME="Site">$Name LIKE 'Site'</SYSTEM>
2

There are 2 answers

1
Shounak Katyayan On
<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>

This did the trick.

2
sai vineeth On

Like is for pattern matching and it requires expression.

if you want to search with string use Contains

<SYSTEM TYPE="Formulae" NAME="Site">$Name Contains 'Site'</SYSTEM>

enter image description here