xmlrpc icon indicating copy to clipboard operation
xmlrpc copied to clipboard

How can I use "system.multicall" to call more than one methods ?

Open luxin88 opened this issue 9 years ago • 2 comments

I am a golang new user.

but I don't know how can I call more than one methods at the same time, by using "system.multicall".

thanks alot.

luxin88 avatar May 12 '16 11:05 luxin88

the xml request looks like this

<?xml version="1.0"?>
<methodCall>
    <methodName>system.multicall</methodName>
    <params>
        <param>
            <value>
                <array>
                    <data>
                        <value>
                            <struct>
                                <member>
                                    <name>methodName</name>
                                    <value>main.get_trx_state</value>
                                </member>
                                <member>
                                    <name>params</name>
                                    <value>
                                        <array>
                                            <data>
                                                <value><nil/></value>
                                            </data>
                                        </array>
                                    </value>
                                </member>
                            </struct>
                        </value>
                        <value>
                            <struct>
                                <member>
                                    <name>methodName</name>
                                    <value>main.get_frequency</value>
                                </member>
                                <member>
                                    <name>params</name>
                                    <value>
                                        <array>
                                            <data>
                                                <value><nil/></value>
                                            </data>
                                        </array>
                                    </value>
                                </member>
                            </struct>
                        </value>
                        <value>
                            <struct>
                                <member>
                                    <name>methodName</name>
                                    <value>rig.get_mode</value>
                                </member>
                                <member>
                                    <name>params</name>
                                    <value>
                                        <array>
                                            <data>
                                                <value><nil/></value>
                                            </data>
                                        </array>
                                    </value>
                                </member>
                            </struct>
                        </value>
                        <value>
                            <struct>
                                <member>
                                    <name>methodName</name>
                                    <value>rig.get_bandwidth</value>
                                </member>
                                <member>
                                    <name>params</name>
                                    <value>
                                        <array>
                                            <data>
                                                <value><nil/></value>
                                            </data>
                                        </array>
                                    </value>
                                </member>
                            </struct>
                        </value>
                    </data>
                </array>
            </value>
        </param>
    </params>
</methodCall>

luxin88 avatar May 12 '16 12:05 luxin88

Fundamentally there's nothing special to system.multicall, while it can have dedicated support in the library (as in python) it's not necessary.

It does need to be implemented in the server, but aside from that it's just a regular function which takes an array of {methodName, params} structs, and returns the corresponding responses array, where each response is either the result of calling the method, or a {faultCode, faultString} struct.

So yes, if the server you're accessing supports system.multicall you can call it by crafting the multicall by hand.

xmo-odoo avatar Jul 10 '23 09:07 xmo-odoo