10/17/2022 03:57 PM
I have a rest app where entitlement is actually a combination of 2 attributes in the response (name || resource). I'm able to combine the attribute values and assign it to entitlementID and entitlement_value but the mapping between the account and entitlement is not happening. I have put the id path same as the logic in entitlementID but CP31 of accounts table is not getting populated due to which the relationship between account and entitlement is not established. Appreciate the assistance to resolve the mapping issue.
serviceRole1 || microservicename1
serviceRole1 || microservicename2
serviceRole2 || microservicename1
serviceRole2 || microservicename2
API Response
{
"results":[
{
"user": {
"userId": "b9ecf1f17a6f",
"idpId": "mydomain.com",
"email": "myuser@mydomain.com",
"username": "myuser@domain.com"
},
"serviceRoles": [
{
"serviceRoles": [
{
"name": "serviceRole1",
"membershipType": "DIRECT",
"resource": "microservicename1"
},
{
"name": "serviceRole1",
"membershipType": "DIRECT",
"resource": "microservicename2"
},
{
"name": "serviceRole2",
"membershipType": "DIRECT",
"resource": "microservicename1"
},
{
"name": "serviceRole2",
"membershipType": "DIRECT",
"resource": "microservicename2"
}
]
}
],
"customRoles": []
}
]
}
ImportAccountEntJson
{
"accountParams": {
"connection": "acctAuth",
"processingType": "SequentialAndIterative",
"statusAndThresholdConfig": {
"accountsNotInImportAction": "Suspend",
"accountThresholdValue": 1000
},
"call": {
"call1": {
"callOrder": 0,
"stageNumber": 0,
"http": {
"url": "https://myapp.mydomain.com/api/users?pageStart=0&pageLimit=200",
"httpContentType": "application/json",
"httpMethod": "GET",
"httpHeaders": {
"Accept": "application/json",
"token": "${access_token}"
}
},
"listField": "results",
"keyField": "accountID",
"colsToPropsMap": {
"accountID": "user.userId~#~char",
"name": "user.email~#~char",
"customproperty1": "user.idpId~#~char",
"description": "user.username~#~char",
"customproperty31": "STORE#ACC#ENT#MAPPINGINFO~#~char"
},
"pagination": {
"nextUrl": {
"nextUrlPath": "${response?.completeResponseMap?.nextLink==null?null:('https://myapp.mydomain.com'+response.completeResponseMap.nextLink)}"
}
}
}
},
"acctEntMappings": {
"Service Roles": {
"importAsEntitlement": true,
"listPath": "serviceRoles[0].serviceRoles",
"idPath": "#CONST#${String d1 = response.name; String d2 = response.resource; ret = d1 + \" || \" + d2; if(d2.equals(null)){return d1} else{return ret}}",
"keyField": "entitlementID",
"colsToPropsMap": {
"entitlementID": "#CONST#${String d1 = response.name; String d2 = response.resource; ret = d1 + \" || \" + d2; if(d2.equals(null)){return d1} else{return ret}}~#~char",
"entitlement_value": "#CONST#${String d1 = response.name; String d2 = response.resource; ret = d1 + \" || \" + d2; if(d2.equals(null)){return d1} else{return ret}}~#~char",
"customproperty1": "name~#~char",
"customproperty2": "resource~#~char"
}
}
}
},
"entitlementParams": {
"connection": "acctAuth",
"processingType": "SequentialAndIterative",
"entTypes": {
"Service Roles": {}
}
},
"acctEntParams": {
"processingType": "acctToEntMapping"
}
}
-Siva
Solved! Go to Solution.
11/02/2022 12:48 AM
Update: Heard from one of the saviynt engineers that the string operation in idpath is not supported.
Logged an enhancement request in ideas portal: https://ideas.saviynt.com/ideas/EIC-I-3803
Anyone with similar requirement, vote for the idea to get some traction from saviynt team.
-Siva
03/05/2023 03:15 AM
Hello,
It is possible to put compute the value of CP31 instead of
"customproperty31": "STORE#ACC#ENT#MAPPINGINFO~#~char"
like this for example :
"customproperty31":"#CONST#${'{\"groups\":{\"entIds\":' + response.roles.userRole.collect{\"\\\"\"+it.role.shortname+' | '+it.scope.name+\"\\\"\"}.toString() + ',\"keyField\":\"entitlementID\"}}'}~#~char"
Hope this helps.
Regards,
SANSOUCY Martin
03/15/2023 12:58 PM
Hi , Any one tried this ?