Click HERE to see how Saviynt Intelligence is transforming the industry. |
10/28/2024 06:25 AM
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"
}
}
}
}
}
}
10/28/2024 06:35 AM
@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 .
10/28/2024 08:54 PM
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
10/28/2024 09:46 PM
You can explore https://docs.saviyntcloud.com/bundle/SCF_v24x/page/Content/About-this-Guide.htm
10/28/2024 09:58 PM
@pinky_chauhan , use multi call in entitlement param and store it in cp31 of entitlement and then map it ..
10/29/2024 06:50 AM
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:-
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?
10/29/2024 06:53 AM
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.
10/29/2024 07:51 AM - edited 10/29/2024 07:52 AM
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"
}
}
}
}
}
10/29/2024 08:14 AM
@pinky_chauhan is acctkeyfield value same as the one which you greyed out?
10/29/2024 08:34 AM
hi @NM yes but entitlements are not mapped with the accounts.