Saviynt unveils its cutting-edge Intelligence Suite products to revolutionize Identity Security!
Click HERE to see how Saviynt Intelligence is transforming the industry.
Saviynt Copilot Icon

Sample of Multicall in acctEntParams in ImportAccountEntJSON for rest connector

pinky_chauhan
New Contributor II
New Contributor II

Can someone please share the format for using multicall in acctEntParams where we can use response of call1 in call2.

Postman response:-

1.Fetching RoleAssignments
URL: https://company.sharepoint.com/sites/testsite/_api/web/lists

Response:

{
"d": {
"results": [
{
"RoleAssignments": {
"__deferred": {
"uri": "https://company.sharepoint.com/sites/testsite/_api/Web/Lists(guid'listid')/RoleAssignments"
}
}
}
]
}
}

2.Fetching Members from RoleAssignments
URL: https://company.sharepoint.com/sites/testsite/_api/Web/Lists(guid'listid')/RoleAssignments

Response:

{
"d": {
"results": [
{
"Member": {
"__deferred": {
"uri": "https://company.sharepoint.com/sites/testsite/_api/Web/Lists(guid'listid')/RoleAssignments/GetByPrin..."
}
}
}
]
}
}

3.Fetching Users from Member
URL: https://company.sharepoint.com/sites/testsite/_api/Web/SiteGroups/GetById(principleid)/Users

Response:


{
"d": {
"results": [
{
"Users": {
"__deferred": {
"uri": "https://company.sharepoint.com/sites/testsite/_api/Web/SiteGroups/GetById(principleid)/Users"
}
}
}
]
}
}

4.Fetching User Details
URL: https://company.sharepoint.com/sites/testsite/_api/Web/SiteGroups/GetById(principleid)/Users

Response:

{
"d": {
"results": [
{
"__metadata": {
"id": "https://company.sharepoint.com/sites/testsite/_api/Web/GetUserById(userid)",
"uri": "https://company.sharepoint.com/sites/testsite/_api/Web/GetUserById(userid)",
"type": "SP.User"
},
"LoginName": "",
"Title": "",
"Email": "",
"UserPrincipalName": ""
}
]
}
}

 

ImportAccountEntJSON

{
"accountParams": {
"connection": "userAuth",
"processingType": "SequentialAndIterative",
"statusAndThresholdConfig": {},
"call": {
"call1": {
"callOrder": 0,
"stageNumber": 0,
"http": {
"url": "https://graph.microsoft.com/v1.0/users?$filter=mail+ne+null+and+(endsWith(mail%2c%27%40company.com%2...",
"httpHeaders": {
"Authorization": "${access_token}"
},
"httpContentType": "application/json",
"httpMethod": "GET"
},
"listField": "value",
"keyField": "name",
"colsToPropsMap": {
"accountID": "id~#~char",
"name": "mail~#~char",
"status": "accountEnabled~#~char",
"displayName": "displayName~#~char",
"customproperty1": "givenName~#~char",
"customproperty2": "surname~#~char",
"customproperty3": "businessPhones~#~char",
"customproperty4": "city~#~char",
"customproperty5": "country~#~char",
"customproperty6": "department~#~char",
"customproperty7": "onPremisesSyncEnabled~#~char",
"customproperty8": "onPremisesLastSyncDateTime~#~char",
"customproperty9": "mobilePhone~#~char",
"customproperty10": "accountEnabled~#~char",
"customproperty11": "usageLocation~#~char",
"customproperty12": "userPrincipalName~#~char",
"customproperty13": "userType~#~char",
"customproperty14": "assignedLicenses~#~char"
},
"pagination": {
"nextUrl": {
"nextUrlPath": "${(response?.completeResponseMap?.get('@odata.nextLink')==null)? null : response?.completeResponseMap?.get('@odata.nextLink')}"
}
}
}
}
},
"entitlementParams": {
"processingType": "SequentialAndIterative",
"entTypes": {


"SharePoint Site": {
"entTypeOrder": 3,
"call": {
"call1": {
"connection": "userAuth",
"callOrder": 0,
"stageNumber": 0,
"http": {
"url": "https://graph.microsoft.com/v1.0/sites?search=%22%2ftest%20site%20test%2f%22",
"httpHeaders": {
"Authorization": "${access_token}"
},
"httpContentType": "application/json",
"httpMethod": "GET"
},
"listField": "value",
"keyField": "entitlementID",
"colsToPropsMap": {
"entitlementID": "webUrl~#~char",
"entitlement_value": "#CONST#${String site = response.'webUrl'; site = site.substring(site.indexOf('.com') + 4); return site}~#~char",
"customproperty1": "name~#~char"
},
"pagination": {
"nextUrl": {
"nextUrlPath": "${(response?.completeResponseMap?.get('@odata.nextLink')==null)? null : response?.completeResponseMap?.get('@odata.nextLink')}"
}
}
}
}
},

"SharePoint List": {
"entTypeOrder": 5,
"call": {
"call2": {
"connection": "SPAuth",
"callOrder": 1,
"stageNumber": 3,
"http": {
"url": "${entitlementID}/_api/web/lists",
"httpHeaders": {
"Authorization": "${access_token}",
"Accept": "application/json;odata=verbose"
},
"httpContentType": "application/json",
"httpMethod": "GET"
},
"inputParams": {
"entitlementname": "SharePoint Site"
},
"listField": "d.results",
"nextApiKeyField": "entitlementID",
"keyField": "entitlementID",
"colsToPropsMap": {
"entitlementID": "RoleAssignments.__deferred.uri~#~char",
"entitlement_value": "#CONST#${String site = response.'__metadata'.'uri'; result = site.substring(0, site.indexOf('/_api/Web/Lists')); return result}~#~char",
"displayName": "Title~#~char",
"description": "Description~#~char",
"customproperty1": "Id~#~char"

}
}
}
}
}
},
"acctEntParams": {
"processingType": "httpEntToAcct",
"entTypes": {
"SharePoint List": {
"call": {
"call1": {
"connection": "SPAuth",
"callOrder": 0,
"stageNumber": 0,
"http": {
"httpHeaders": {
"Authorization": "${access_token}",
"Accept": "application/json;odata=verbose"
},
"url": "${id}",
"httpContentType": "application/json",
"httpMethod": "GET"
},
"listField": "d.results",
"entKeyField": "entitlementID"

}
}
}
}
}
}

 

9 REPLIES 9

NM
Honored Contributor III
Honored Contributor III

@pinky_chauhan I don't believe it is currently supported.. I tried to do it similar to what is supported in 23.6 version .. didn't work .


If this helped you move forward, click 'Kudos'. If it solved your query, select 'Accept As Solution'

pinky_chauhan
New Contributor II
New Contributor II

Hi @NM If not using MultiCall in acctEntParams, is there an alternative approach to achieve this where the entitlement API does not directly hold account details for mapping, and multiple APIs are needed to fetch user details

You can explore https://docs.saviyntcloud.com/bundle/SCF_v24x/page/Content/About-this-Guide.htm


Regards,
Rushikesh Vartak
If this helped you move forward, click 'Kudos'. If it solved your query, select 'Accept As Solution'.

NM
Honored Contributor III
Honored Contributor III

@pinky_chauhan , use multi call in entitlement param and store it in cp31 of entitlement and then map it .. 


If this helped you move forward, click 'Kudos'. If it solved your query, select 'Accept As Solution'

pinky_chauhan
New Contributor II
New Contributor II

Hi @NM I tried to use multi call in entitlement param and store it to CP31 of last call.

{
"accountParams": {
"connection": "userAuth",
"processingType": "SequentialAndIterative",
"statusAndThresholdConfig": {},
"call": {
"call1": {
"callOrder": 0,
"stageNumber": 0,
"http": {
"url": "https://graph.microsoft.com/v1.0/users?$filter=mail+ne+null+and+(endsWith(mail%2c%27%40company.com%2...",
"httpHeaders": {
"Authorization": "${access_token}"
},
"httpContentType": "application/json",
"httpMethod": "GET"
},
"listField": "value",
"keyField": "name",
"colsToPropsMap": {
"accountID": "id~#~char",
"name": "mail~#~char",
"status": "accountEnabled~#~char",
"displayName": "displayName~#~char",
"customproperty1": "givenName~#~char",
"customproperty2": "surname~#~char",
"customproperty3": "businessPhones~#~char",
"customproperty4": "city~#~char",
"customproperty5": "country~#~char",
"customproperty6": "department~#~char",
"customproperty7": "onPremisesSyncEnabled~#~char",
"customproperty8": "onPremisesLastSyncDateTime~#~char",
"customproperty9": "mobilePhone~#~char",
"customproperty10": "accountEnabled~#~char",
"customproperty11": "usageLocation~#~char",
"customproperty12": "userPrincipalName~#~char",
"customproperty13": "userType~#~char",
"customproperty14": "assignedLicenses~#~char"
},
"pagination": {
"nextUrl": {
"nextUrlPath": "${(response?.completeResponseMap?.get('@odata.nextLink')==null)? null : response?.completeResponseMap?.get('@odata.nextLink')}"
}
}
}
}
},
"entitlementParams": {
"processingType": "SequentialAndIterative",
"entTypes": {


"SharePoint Site": {
"entTypeOrder": 3,
"call": {
"call1": {
"connection": "userAuth",
"callOrder": 0,
"stageNumber": 0,
"http": {
"url": "https://graph.microsoft.com/v1.0/sites?search=%22%2ftest%20site%20test%2f%22",
"httpHeaders": {
"Authorization": "${access_token}"
},
"httpContentType": "application/json",
"httpMethod": "GET"
},
"listField": "value",
"keyField": "entitlementID",
"colsToPropsMap": {
"entitlementID": "webUrl~#~char",
"entitlement_value": "#CONST#${String site = response.'webUrl'; site = site.substring(site.indexOf('.com') + 4); return site}~#~char",
"customproperty1": "name~#~char"
},
"pagination": {
"nextUrl": {
"nextUrlPath": "${(response?.completeResponseMap?.get('@odata.nextLink')==null)? null : response?.completeResponseMap?.get('@odata.nextLink')}"
}
}
}
}
},

"SharePoint List": {
"entTypeOrder": 5,
"call": {
"call2": {
"connection": "SPAuth",
"callOrder": 1,
"stageNumber": 3,
"http": {
"url": "https://company.sharepoint.com/sites/testsite/_api/web/lists",
"httpHeaders": {
"Authorization": "${access_token}",
"Accept": "application/json;odata=verbose"
},
"httpContentType": "application/json",
"httpMethod": "GET"
},
"inputParams": {
"entitlementname": "SharePoint Site"
},
"listField": "d.results",
"nextApiKeyField": "entitlementID",
"keyField": "entitlementID",
"colsToPropsMap": {
"entitlementID": "RoleAssignments.__deferred.uri~#~char",
"entitlement_value": "#CONST#${String site = response.'__metadata'.'uri';String name = response.'Title'; result = name +' | '+ site.substring(0, site.indexOf('/_api')); return result}~#~char",
"displayName": "Title~#~char",
"description": "Description~#~char",
"customproperty1": "Id~#~char"

}
},
"call3": {
"connection": "SPAuth",
"callOrder": 2,
"stageNumber": 4,
"http": {
"url": "https://cpmpany.sharepoint.com/sites/testsite/_api/Web/Lists(guid'<id>')/RoleAssignments",
"httpHeaders": {
"Authorization": "${access_token}",
"Accept": "application/json;odata=verbose"
},
"httpContentType": "application/json",
"httpMethod": "GET"
},
"inputParams": {
"entitlementname": "SharePoint List"
},
"listField": "d.results",
"keyField": "entitlementID",
"colsToPropsMap": {
"entitlementID": "Member.__deferred.uri~#~char",
"entitlement_value": "Member.__deferred.uri~#~char",
"customproperty3": "PrincipalId~#~char"

}
},
"call4": {
"connection": "SPAuth",
"callOrder": 3,
"stageNumber": 5,
"http": {
"url": "https://company.sharepoint.com/sites/testsite/_api/Web/Lists(guid'<id>')/RoleAssignments/GetByPrincipalId(<principleid>)/Member",
"httpHeaders": {
"Authorization": "${access_token}",
"Accept": "application/json;odata=verbose"
},
"httpContentType": "application/json",
"httpMethod": "GET"
},
"inputParams": {
"entitlementname": "SharePoint List"
},
"listField": "d.results",
"keyField": "entitlementID",
"colsToPropsMap": {
"entitlementID": "Users.__deferred.uri~#~char",
"entitlement_value": "LoginName~#~char",
"displayName": "Title~#~char",
"description": "Description~#~char",
"customproperty1": "Id~#~char"

}
},
"call5": {
"connection": "SPAuth",
"callOrder": 4,
"stageNumber": 6,
"http": {
"url": "https://company.sharepoint.com/sites/testsite/_api/Web/SiteGroups/GetById(<principleid>)/Users",
"httpHeaders": {
"Authorization": "${access_token}",
"Accept": "application/json;odata=verbose"
},
"httpContentType": "application/json",
"httpMethod": "GET"
},
"inputParams": {
"entitlementname": "SharePoint List"
},
"listField": "d.results",
"keyField": "entitlementID",
"colsToPropsMap": {
"entitlementID": "Email~#~char",
"entitlement_value": "LoginName~#~char",
"displayName": "Title~#~char",
"customproperty1": "Id~#~char",
"customproperty31": "STORE#ACC#ENT#MAPPINGINFO~#~char"

}
}

},
"acctEntMappings": {
"listField": "",
"idPath": "Email",
"keyField": "name",
"importAsAccount": false
}
}
}
},
"acctEntParams": {
"SharePoint List": {
"call": {
"call1": {
"processingType": "entToAcctMapping"
}
}
}
}
}

 

last call entitlement CP31 is updated with the values:-

pinky_chauhan_0-1730209355311.png

but accounts not mapped with the entitlements and vice-versa. Also, How can we map the accounts with the Call 1 entitlements to achieve the desired outcome?

 

Please share the logs & confiiguration in text file for easier debugging. Additionally, provide the task ID, error details, or specific line numbers where the issues occur to help us review the relevant sections efficiently.



⚠️ Important: Do not upload attachments containing sensitive information, such as IP addresses, URLs, company/employee names, or email addresses. For more information, refer to the Saviynt PII Policy.


Regards,
Rushikesh Vartak
If this helped you move forward, click 'Kudos'. If it solved your query, select 'Accept As Solution'.

Hi @rushikeshvartak We are trying to map SharePoint List entitlements to the account, but the Entitlement API doesn’t directly hold account details for mapping, requiring multiple API calls to fetch user details. Based on @NM's suggestion, we’re attempting to use multicall in entitlementParams and store the mapping info in entitlement CP31. We've followed this approach. Could you please verify the ImportAccountEntJSON? Logs are attached.

{
"accountParams": {
"connection": "userAuth",
"processingType": "SequentialAndIterative",
"statusAndThresholdConfig": {},
"call": {
"call1": {
"callOrder": 0,
"stageNumber": 0,
"http": {
"url": "https://graph.microsoft.com/v1.0/users?$filter=mail+ne+null+and+(endsWith(mail%2c%27%40company.com%2...",
"httpHeaders": {
"Authorization": "${access_token}"
},
"httpContentType": "application/json",
"httpMethod": "GET"
},
"listField": "value",
"keyField": "name",
"colsToPropsMap": {
"accountID": "id~#~char",
"name": "mail~#~char",
"status": "accountEnabled~#~char",
"displayName": "displayName~#~char",
"customproperty1": "givenName~#~char",
"customproperty2": "surname~#~char",
"customproperty3": "businessPhones~#~char",
"customproperty4": "city~#~char",
"customproperty5": "country~#~char",
"customproperty6": "department~#~char",
"customproperty7": "onPremisesSyncEnabled~#~char",
"customproperty8": "onPremisesLastSyncDateTime~#~char",
"customproperty9": "mobilePhone~#~char",
"customproperty10": "accountEnabled~#~char",
"customproperty11": "usageLocation~#~char",
"customproperty12": "userPrincipalName~#~char",
"customproperty13": "userType~#~char",
"customproperty14": "assignedLicenses~#~char"
},
"pagination": {
"nextUrl": {
"nextUrlPath": "${(response?.completeResponseMap?.get('@odata.nextLink')==null)? null : response?.completeResponseMap?.get('@odata.nextLink')}"
}
}
}
}
},
"entitlementParams": {
"processingType": "SequentialAndIterative",
"entTypes": {


"SharePoint Site": {
"entTypeOrder": 3,
"call": {
"call1": {
"connection": "userAuth",
"callOrder": 0,
"stageNumber": 0,
"http": {
"url": "https://graph.microsoft.com/v1.0/sites?search=%22%2ftest%20site%20test%2f%22",
"httpHeaders": {
"Authorization": "${access_token}"
},
"httpContentType": "application/json",
"httpMethod": "GET"
},
"listField": "value",
"keyField": "entitlementID",
"colsToPropsMap": {
"entitlementID": "webUrl~#~char",
"entitlement_value": "#CONST#${String site = response.'webUrl'; site = site.substring(site.indexOf('.com') + 4); return site}~#~char",
"customproperty1": "name~#~char"
},
"pagination": {
"nextUrl": {
"nextUrlPath": "${(response?.completeResponseMap?.get('@odata.nextLink')==null)? null : response?.completeResponseMap?.get('@odata.nextLink')}"
}
}
}
}
},

"SharePoint List": {
"entTypeOrder": 5,
"call": {
"call2": {
"connection": "SPAuth",
"callOrder": 1,
"stageNumber": 3,
"http": {
"url": "https://company.sharepoint.com/sites/testsite/_api/web/lists",
"httpHeaders": {
"Authorization": "${access_token}",
"Accept": "application/json;odata=verbose"
},
"httpContentType": "application/json",
"httpMethod": "GET"
},
"inputParams": {
"entitlementname": "SharePoint Site"
},
"listField": "d.results",
"nextApiKeyField": "entitlementID",
"keyField": "entitlementID",
"colsToPropsMap": {
"entitlementID": "RoleAssignments.__deferred.uri~#~char",
"entitlement_value": "#CONST#${String site = response.'__metadata'.'uri';String name = response.'Title'; result = name +' | '+ site.substring(0, site.indexOf('/_api')); return result}~#~char",
"displayName": "Title~#~char",
"description": "Description~#~char",
"customproperty1": "Id~#~char"

}
},
"call3": {
"connection": "SPAuth",
"callOrder": 2,
"stageNumber": 4,
"http": {
"url": "https://cpmpany.sharepoint.com/sites/testsite/_api/Web/Lists(guid'<id>')/RoleAssignments",
"httpHeaders": {
"Authorization": "${access_token}",
"Accept": "application/json;odata=verbose"
},
"httpContentType": "application/json",
"httpMethod": "GET"
},
"inputParams": {
"entitlementname": "SharePoint List"
},
"listField": "d.results",
"keyField": "entitlementID",
"colsToPropsMap": {
"entitlementID": "Member.__deferred.uri~#~char",
"entitlement_value": "Member.__deferred.uri~#~char",
"customproperty3": "PrincipalId~#~char"

}
},
"call4": {
"connection": "SPAuth",
"callOrder": 3,
"stageNumber": 5,
"http": {
"url": "https://company.sharepoint.com/sites/testsite/_api/Web/Lists(guid'<id>')/RoleAssignments/GetByPrincipalId(<principleid>)/Member",
"httpHeaders": {
"Authorization": "${access_token}",
"Accept": "application/json;odata=verbose"
},
"httpContentType": "application/json",
"httpMethod": "GET"
},
"inputParams": {
"entitlementname": "SharePoint List"
},
"listField": "d.results",
"keyField": "entitlementID",
"colsToPropsMap": {
"entitlementID": "Users.__deferred.uri~#~char",
"entitlement_value": "LoginName~#~char",
"displayName": "Title~#~char",
"description": "Description~#~char",
"customproperty1": "Id~#~char"

}
},
"call5": {
"connection": "SPAuth",
"callOrder": 4,
"stageNumber": 6,
"http": {
"url": "https://company.sharepoint.com/sites/testsite/_api/Web/SiteGroups/GetById(<principleid>)/Users",
"httpHeaders": {
"Authorization": "${access_token}",
"Accept": "application/json;odata=verbose"
},
"httpContentType": "application/json",
"httpMethod": "GET"
},
"inputParams": {
"entitlementname": "SharePoint List"
},
"listField": "d.results",
"keyField": "entitlementID",
"colsToPropsMap": {
"entitlementID": "Email~#~char",
"entitlement_value": "LoginName~#~char",
"displayName": "Title~#~char",
"customproperty1": "Id~#~char",
"customproperty31": "STORE#ACC#ENT#MAPPINGINFO~#~char"

}
}

},
"acctEntMappings": {
"listField": "",
"idPath": "Email",
"keyField": "name",
"importAsAccount": false
}
}
}
},
"acctEntParams": {
"SharePoint List": {
"call": {
"call1": {
"processingType": "entToAcctMapping"
}
}
}
}
}

 

 

NM
Honored Contributor III
Honored Contributor III

@pinky_chauhan is acctkeyfield value same as the one which you greyed out?


If this helped you move forward, click 'Kudos'. If it solved your query, select 'Accept As Solution'

pinky_chauhan
New Contributor II
New Contributor II

hi @NM yes but entitlements are not mapped with the accounts.