Hi Robin,
thank you for your question!
Basically you need to combine two techniques: "nesting" of calls (first the login, then the actual call), this can be done as is described in this KB article:
https://legacysupport.timextender.com/hc/en-us/articles/360052383191-Creating-and-using-RSD-files-for-CData-providers#new-method
And secondly you need to send data in the body, just like you described. Please see this example, that sending a SOAP request in the body:
<api:script xmlns:api="http://apiscript.com/ns?v1" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <!-- See Column Definitions to specify column behavior and use XPaths to extract column values from XML. --> <api:info title="2" desc="Generated schema file." xmlns:other="http://apiscript.com/ns?v1"> <!-- You can modify the name, type, and column size here. --> <attr name="Field1" xs:type="string" readonly="false" other:xPath="/item/Field1" /> <attr name="Field2" xs:type="string" readonly="false" other:xPath="/item/Field2" /> <attr name="Field3" xs:type="string" readonly="false" other:xPath="/item/Field3" /> </api:info> <api:set attr="DataModel" value="DOCUMENT" /> <api:set attr="PushAttributes" value="true" /> <api:set attr="EnablePaging" value="true" /> <api:set attr="Header:Name#" value="SOAPAction"/> <api:set attr="URI" value="https://your.soap.endpoint.com/?wsdl" /> <api:set attr="XPath" value="/item" /> <api:set attr="method" value="POST"/> <api:set attr="Header:Name" value="Content-Type" /> <api:set attr="Header:Value" value="text/xml" /> <api:set attr="data"> <?xml version="1.0" encoding="utf-8"?> <soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:uen="uen:esws"> <soapenv:Header/> <soapenv:Body> <uen:Esws.getUsers soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <p_companyID xsi:type="xsd:string">[_connection.Password]</p_companyID> <p_page xsi:type="xsd:string"></p_page> <p_locationID xsi:type="xsd:string">3</p_locationID> <p_user_id xsi:type="xsd:string"></p_user_id> </uen:Esws.getUsers> </soapenv:Body> </soapenv:Envelope> </api:set> <api:set attr="XPath" value="/Envelope/Body/" /> <!-- The GET method corresponds to SELECT. Here you can override the default processing of the SELECT statement. The results of processing are pushed to the schema's output. See SELECT Execution for more information. --> <api:script method="GET"> <api:set attr="method" value="GET"/> <api:call op="xmlproviderGet"> <api:push/> </api:call> </api:script>
CData is having helpful additional documentation to get a better understanding of how the RSD files work:
It's not the easiest topic, but I hope this helps you to dig deeper.
Please let us know how it goes!