Announcing the Saviynt Knowledge Exchange unifying the Saviynt forums, documentation, training,
and more in a single search tool across platforms. Read the announcement here.

SOAP connector how to execute grant access tasks based on entitlement type

abhiupadhyay
New Contributor III
New Contributor III

Hello

In my use case, I have two entitlement type as "roles" and "groups". In the enterprise role that provides these entitlements we are going to have 1 role and multiple groups. 

The roles have one authority profile links with them. so roleA will have authprofile A .. and so on.so auth profile field should get updated based on role selected.  

We have mapped the authprofile in customproperty1 in the entitlement. I am using the json below to achieve this. this works when I assign only roles, but if I select groups and roles together, most of the time the fields remain empty. For some reason it mixes up the things. Could you please help me here to understand how the grouping of tasks work here. 

Note: I have removed header from the json.. also in CP2 of entitlements I have put group and roles to utilize as conditional value here

[
{
"RUNFOREACHENT" : "true",
"CONNECTION": "billingcenterwebservice",
"REQUESTXML": "${task.entitlement_valueKey.customproperty2.equalsIgnoreCase('group') ? '<soapenv:Envelope <soapenv:Body><user:updateUser><user:request><sch:Groups>' + allEntitlementMap.get('Groups').collect{'<sch:Entry>' + it +'</sch:Entry>'}.join('') + '</sch:Groups><sch:Roles></sch:Roles><sch:Status>true</sch:Status><sch:UserName>' + task.accountName.toLowerCase() + '</sch:UserName></user:request></user:updateUser></soapenv:Body></soapenv:Envelope>' : ''}",
"RESPONSEMAPPING": {
"TASK.PROVISIONINGCOMMENTS": "Body.updateUserResponse.return.Description",
"RESPONSECODE": "Body.updateUserResponse.return.StatusCode"
},
"SOAPACTION": "",
"SUCCESSCRITERIA": "RESPONSECODE=1"
},
{
"CONNECTION": "billingcenterwebservice",
"REQUESTXML": "${task.entitlement_valueKey.customproperty2.equalsIgnoreCase('roles') ? '<soapenv:Envelope <soapenv:Body><user:updateUser><user:request><sch:AuthorityProfile>' + task.entitlement_valueKey.customproperty1 + '</sch:AuthorityProfile><sch:Groups></sch:Groups><sch:Roles>' + allEntitlementMap.get('Roles').collect{'<sch:Entry>' + it +'</sch:Entry>'}.join('') + '</sch:Roles><sch:Status>true</sch:Status><sch:UserName>' + task.accountName.toLowerCase() + '</sch:UserName></user:request></user:updateUser></soapenv:Body></soapenv:Envelope>' : ''}",
"RESPONSEMAPPING": {
"TASK.PROVISIONINGCOMMENTS": "Body.updateUserResponse.return.Description",
"RESPONSECODE": "Body.updateUserResponse.return.StatusCode"
},
"SOAPACTION": "",
"SUCCESSCRITERIA": "RESPONSECODE=1"
}
]

 

 

4 REPLIES 4

SB
Saviynt Employee
Saviynt Employee

Below is an example of sending two calls by type
{ "CONNECTION": "Conn2",
"REQUESTXML": "${newEntitlementMap.get('ENTTYPE1')?.size() > 0 ? '<soapenv:Envelope><soapenv:Header></soapenv:Header><soapenv:Body><roles>' + newEntitlementMap.get('ENTTYPE1').each{'<rolename>'+it+'</rolename>'}.join('') + '</roles>${PHONENUMBER}</soapenv:Body></soapenv:Envelope>' : ''}",
"SOAPACTION": "soap.action.string",
"RESPONSEMAPPING": {
"TABLETYPE2.COLUMNNAME1": "XML.Response.Path.To.Attribute2"
}},
{ "CONNECTION": "Conn2",
"REQUESTXML": "${newEntitlementMap.get('ENTTYPE2')?.size() > 0 ? '<soapenv:Envelope><soapenv:Header></soapenv:Header><soapenv:Body><roles>' + newEntitlementMap.get('ENTTYPE1').each{'<rolename>'+it+'</rolename>'}.join('') + '</roles>${PHONENUMBER}</soapenv:Body></soapenv:Envelope>' : ''}",
"SOAPACTION": "soap.action.string",
"RESPONSEMAPPING": {
"TABLETYPE2.COLUMNNAME1": "XML.Response.Path.To.Attribute2"
}}}
where ENTTYPE1 and ENTTYPE2 are entitlement types. the first call will run for ENTTYPE1. second call is for ENTTYPE2.


Regards,
Sahil

abhiupadhyay
New Contributor III
New Contributor III

That is what I have used to prepare my json. If you see my json above, it has one more field getting populated for one of the entitlement type. and that field is getting value from entitlement's customproperty. 

Is there any documentation on how the task grouping works? 

SB
Saviynt Employee
Saviynt Employee

Below is the link to SOAP Connector documentation (Entitlements Using Entitlement Type) you can refer to. Can you use the format I shared and then try.

Also we need to ensure the EntitlementType value is Group/roles etc. It will not be calculated based on CP of the entitlement.

https://docs.saviyntcloud.com/bundle/SOAP-v23x/page/Content/Scenarios-for-Implementing-the-Connector...


Regards,
Sahil

abhiupadhyay
New Contributor III
New Contributor III

The below solution worked for me. I have used the custom value to be updated with every role as another entitlement type only. 

{
"CONNECTION": "billingcenterwebservice",
"REQUESTXML": "${newEntitlementMap.get('Roles')?.size() > 0 ? '<soapenv:Envelope <user:request><sch:AuthorityProfile>' + allEntitlementMap.get('authLimit')[0] + '</sch:AuthorityProfile><sch:Groups></sch:Groups><sch:Roles>' + allEntitlementMap.get('Roles').collect{'<sch:Entry>' + it +'</sch:Entry>'}.join('') + '</sch:Roles><sch:Status>true</sch:Status><sch:UserName>' + task.accountName.toLowerCase() + '</sch:UserName></user:request></user:updateUser></soapenv:Body></soapenv:Envelope>' : ''}",
"RESPONSEMAPPING": {
"TASK.PROVISIONINGCOMMENTS": "Body.updateUserResponse.return.Description",
"RESPONSECODE": "Body.updateUserResponse.return.StatusCode"
},
"SOAPACTION": "",
"SUCCESSCRITERIA": "RESPONSECODE=1"
}