Hi Tom, thanks for responding. The placeholder is being replaced properly - here is the saved file:
<?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><SOAP-ENV:Header/><SOAP-ENV:Body><tns:ReadProject xmlns:tns="http://www.niku.com/xog/Object">
<tns:ReadProject>
<NikuDataBus xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/nikuxog_read.xsd">
<Header externalSource="NIKU" version="13.3.0.0286">
<args name="order_by_1" value="name"/>
<args name="order_by_2" value="ProjectID"/>
<args name="include_tasks" value="false"/>
<args name="include_dependencies" value="false"/>
<args name="include_subprojects" value="false"/>
<args name="include_resources" value="false"/>
<args name="include_baselines" value="false"/>
<args name="include_allocations" value="false"/>
<args name="include_estimates" value="false"/>
<args name="include_actuals" value="false"/>
<args name="include_custom" value="false"/>
</Header>
<Query>
<Filter criteria="EQUALS" name="active">true</Filter>
</Query>
</NikuDataBus>
</tns:ReadProject>
<tns:Auth>
<tns:SessionID>9102371__938F6AC6-0A39-45F4-8AF7-D0BAED1BF9C9</tns:SessionID>
</tns:Auth>
</tns:ReadProject></SOAP-ENV:Body></SOAP-ENV:Envelope>
One curious thing is that when I import the WSDL using SoapUI the 'Auth' block goes into the SOAP Header rather than into the Body. Here is how SoapUI presents the ReadProject operation, before I add the 'NikuDataBus' component between the 'obj:ReadProject' tags:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:obj="http://www.niku.com/xog/Object">
<soapenv:Header>
<obj:Auth>
<!--Optional:-->
<obj:SessionID>?</obj:SessionID>
<!--Optional:-->
<obj:TenantID>?</obj:TenantID>
<!--Optional:-->
<obj:Username>?</obj:Username>
<!--Optional:-->
<obj:Password>?</obj:Password>
</obj:Auth>
</soapenv:Header>
<soapenv:Body>
<obj:ReadProject>
<!--You may enter ANY elements at this point-->
</obj:ReadProject>
</soapenv:Body>
</soapenv:Envelope>
And here is how PAM 'wsdl wizard' presents the same wsdl:
<tns:ReadProject xmlns:tns="http://www.niku.com/xog/Object">
<tns:ReadProject>
<!--xsd:Any Type Here-->
</tns:ReadProject>
<tns:Auth>
<tns:SessionID>SessionID__</tns:SessionID>
<tns:TenantID>TenantID__</tns:TenantID>
<tns:Username>Username__</tns:Username>
<tns:Password>Password__</tns:Password>
</tns:Auth>
</tns:ReadProject>
So, my solution so far is to load the XML payload below from a file into PAM, copying the format that 'SoapUI' produces, and substitute in the Session ID. This gets the desired project data returned:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:obj="http://www.niku.com/xog/Object">
<soapenv:Header>
<obj:Auth>
<!--Optional:-->
<obj:SessionID>SessionID__</obj:SessionID>
</obj:Auth>
</soapenv:Header>
<soapenv:Body>
<obj:ReadProject xmlns:obj='http://www.niku.com/xog/Object'>
<NikuDataBus xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:noNamespaceSchemaLocation='../xsd/nikuxog_read.xsd'>
<Header version='13.3.0.0286' externalSource='NIKU'>
<args name="order_by_1" value="name"/>
<args name="order_by_2" value="ProjectID"/>
<args name="include_tasks" value="false"/>
<args name="include_dependencies" value="false"/>
<args name="include_subprojects" value="false"/>
<args name="include_resources" value="false"/>
<args name="include_baselines" value="false"/>
<args name="include_allocations" value="false"/>
<args name="include_estimates" value="false"/>
<args name="include_actuals" value="false"/>
<args name="include_custom" value="false"/>
</Header>
<Query>
<Filter name="active" criteria="EQUALS">true</Filter>
</Query>
</NikuDataBus>
</obj:ReadProject>
</soapenv:Body>
</soapenv:Envelope>
Is this the best way to go about constructing a call to PPM? Any comments you can make will be most welcome.
Regards,
James