Suppose query:
<do-set-local-variable name="local.sub.ctp.QueryContacts" scope="policy">
<arg-node-set>
<token-query class-name="User" scope="entry">
<arg-match-attr name="UPN">
<arg-value type="string">
<token-src-attr class-name="User" name="UPN"/>
</arg-value>
</arg-match-attr>
<arg-match-attr name="contacts">
<arg-value type="string">
<token-text xml:space="preserve">get-contacts</token-text>
</arg-value>
</arg-match-attr>
<arg-match-attr name="userid">
<arg-value type="string">
<token-association/>
</arg-value>
</arg-match-attr>
</token-query>
</arg-node-set>
</do-set-local-variable>
Output:
<nds dtdversion="3.0">
<source>
<product build="20180222_0635" version="1.0.0.2">Identity Manager REST Driver</product>
<contact>NetIQ Corporation.</contact>
</source>
<output>
<status event-id="0" level="success" type="driver-general">
<operation-data prop.pub.itp.matached="true" prop.pub.itp.matached.target.DN=""/>
</status>
<instance class-name="users" event-id="0" src-dn="X_XX__">
<association state="associated">X_XX__</association>
<attr attr-name="Object Class">
<value value="string">User</value>
</attr>
<attr attr-name="contacts">
<value type="structured">
<component name="id">X_XX___iPhoneX_Maqsood’s_mobile</component>
<component name="method">mobile</component>
<component name="to">Maqsood’siPhone-iPhoneX13.3.1-v3.3.3</component>
<component name="status">{"enabled":true}</component>
<component name="applyOrder">0</component>
</value>
<value type="structured">
<component name="id">d17bd71b-88f0-4817-b2aa-59a833080d71</component>
<component name="method">sms</component>
<component name="to">47-************</component>
<component name="status">{"enabled":true}</component>
<component name="applyOrder">0</component>
</value>
<value type="structured">
<component name="id">ee73e784-1bde-4b31-9648-4e6f315b441a</component>
<component name="method">sms</component>
<component name="to">47-000000000</component>
<component name="status">{"enabled":true}</component>
<component name="applyOrder">1</component>
</value>
<value type="structured">
<component name="id">2c70a20f-12aa-4b12-b805-fa7743d8d54c</component>
<component name="method">email</component>
<component name="to">*****************</component>
<component name="status">{"enabled":true}</component>
<component name="applyOrder">0</component>
</value>
</attr>
</instance>
</output>
</nds>
Reading query result:
<do-for-each>
<arg-node-set>
<token-xpath expression="$local.sub.ctp.QueryContacts/attr[@attr-name='contacts']/value"/>
</arg-node-set>
<arg-actions>
<do-trace-message>
<arg-string>
<token-local-variable name="current-node"/>
</arg-string>
</do-trace-message>
<do-trace-message>
<arg-string>
<token-text xml:space="preserve">Contact ID => </token-text>
<token-xpath expression="$current-node/component[@name='id']"/>
</arg-string>
</do-trace-message>
<do-trace-message>
<arg-string>
<token-text xml:space="preserve">Contact Method => </token-text>
<token-xpath expression="$current-node/component[@name='method']"/>
</arg-string>
</do-trace-message>
<do-trace-message>
<arg-string>
<token-text xml:space="preserve">Contact to => </token-text>
<token-xpath expression="$current-node/component[@name='to']"/>
</arg-string>
</do-trace-message>
<do-set-local-variable name="local.sub.etp.ContactNumber" scope="policy">
<arg-string>
<token-xpath expression="$current-node/component[@name='to']"/>
</arg-string>
</do-set-local-variable>
<do-set-local-variable name="local.sub.etp.ContactMethod" scope="policy">
<arg-string>
<token-xpath expression="$current-node/component[@name='method']"/>
</arg-string>
</do-set-local-variable>
<do-if>
<arg-conditions>
<and>
<if-local-variable mode="nocase" name="local.sub.etp.ContactMethod" op="equal">sms</if-local-variable>
<if-local-variable mode="nocase" name="local.sub.etp.ContactNumber" op="equal">$local.sub.etp.user.Mobile$</if-local-variable>
</and>
</arg-conditions>
<arg-actions>
<do-set-local-variable name="local.sub.etp.SkipContactUpdate" scope="policy">
<arg-string>
<token-text xml:space="preserve">true</token-text>
</arg-string>
</do-set-local-variable>
</arg-actions>
<arg-actions/>
</do-if>
</arg-actions>
</do-for-each>
Comments