Click HERE to see how Saviynt Intelligence is transforming the industry. |
09/24/2024 12:57 AM
Could someone please explain the "EnttoAcct" and "acctToEnt" mappings in detail.
In the below link I see that
"EnttoAcct" mapping is done for the "Group" entitlement type.
"acctToEnt" mapping is done for the "Role" entitlement type.
In the "Group" membership, the attribute "${id}" is used to iterate over each Entitlement value.
But where from this "${id}" value will be taken?
I see the URL in the "Sample Response" and the url in the "acctEntParams" is different in the below "Developer Handbook" link. (ImportAccountEntJSON --> ProcessingTypes section - section 2)
https://docs.saviyntcloud.com/bundle/Dev-Handbook-REST-v24x/page/Content/Developers-Handbook.htm#imp...
My sample response for "GET USERS FROM GROUP" API call is as below :
How should I mention the "URL" in the "acctEntParams" section of the "ImportAccountEntJSON" ?
Thanks & Regards,
SaviyntSavvy
09/24/2024 01:06 AM
Hi @Saviynt_Savvy if to get the mapping between account and entitlement and for that you have to call api for each and every group use httpenttoact otherwise httpAccttoEnt
ID is account id or entitlement id in account param or entitlement param.
In your case use httpenttoact as you are calling api for each and every group to get the mapping details of account.
In acctentparam listfield = values.
09/24/2024 02:48 AM
Hello @NM , @Amit_Malik
Thank you for the explanation.
But, could you please give how the URL should be in my "acctEntParams" section for the "EnttoAcct" mapping.
I have provided the screenshot of my API call and its POSTMAN response.
Thanks & Regards,
SaviyntSavvy
09/24/2024 02:52 AM
@Saviynt_Savvy where you have to pass group Id just add ${id} everything else in url remains the same
groupid=${id}
09/24/2024 04:07 AM
groupId=${id}
09/24/2024 01:16 AM
EnttoAcct processing type is used when you need to iterate through entitlement ID and get account associations. When application / target has a API which gives association using a new url and the new url needs entitlement ID to be passed.
acctToEnt is similar to EnttoAcct, difference is that now target has a API which will give account to entitlement association via passing account ID in new url.
The usage of acctToEnt or EnttoAcct depends on target APIs, if they have a API where entitlement ID to be passed to get associations then EnttoAcct and other way around for acctToEnt .
09/24/2024 04:53 AM
Hello @Amit_Malik , @NM
I use the below ImportAccountEntJSON , but not able to download the EnttoAcct mapping.
Could you please suggest if any changes required make in acctEntParams ?
ImportAccountEntJSON:
{
"accountParams":{
"connection":"acctAuth",
"processingType":"SequentialAndIterative",
"statusAndThresholdConfig":{
"statusColumn":"customproperty4",
"activeStatus":[
"true"
],
"deleteLinks":false,
"accountThresholdValue":50,
"correlateInactiveAccounts":false,
"inactivateAccountsNotInFile":false,
"deleteAccEntForActiveAccounts":true
},
"call":{
"call1":{
"callOrder":0,
"stageNumber":0,
"http":{
"url":"https://abc.xyz.net/rest/api/2/users",
"httpHeaders":{
"Authorization":"${access_token}",
"Accept":"application/json"
},
"httpContentType":"application/json",
"httpMethod":"GET"
},
"listField":"",
"keyField":"accountID",
"colsToPropsMap":{
"accountID":"accountId~#~char",
"name":"displayName~#~char",
"status":"active~#~char",
"accounttype":"accountType~#~char",
"customproperty1":"timeZone~#~char",
"customproperty2":"locale~#~char",
"customproperty3":"self~#~char",
"customproperty4":"active~#~char",
"customproperty5":"emailAddress~#~char"
},
"pagination":{
"offset":{
"offsetParam":"startAt",
"batchParam":"maxResults",
"batchSize":100,
"totalCountPath":10000
}
}
}
}
},
"entitlementParams":{
"connection":"acctAuth",
"processingType":"SequentialAndIterative",
"entTypes":{
"Groups":{
"entTypeOrder":0,
"call":{
"call1":{
"callOrder":0,
"stageNumber":0,
"http":{
"url":"https://abc.xyz.net/rest/api/2/groups/picker",
"httpHeaders":{
"Authorization":"${access_token}",
"Accept":"application/json"
},
"httpContentType":"application/json",
"httpMethod":"GET"
},
"listField":"groups",
"keyField":"entitlementID",
"colsToPropsMap":{
"entitlementID":"groupId~#~char",
"entitlement_value":"name~#~char",
"customproperty1":"groupId~#~char"
},
"pagination":{
"offset":{
"offsetParam":"startAt",
"batchParam":"maxResults",
"batchSize":1000,
"totalCountPath":10000
}
}
}
}
},
"Projects":{
"entTypeOrder":1,
"call":{
"call1":{
"callOrder":0,
"stageNumber":0,
"http":{
"url":"https://abc.xyz.net/rest/api/2/project/search",
"httpHeaders":{
"Authorization":"${access_token}",
"Accept":"application/json"
},
"httpContentType":"application/json",
"httpMethod":"GET"
},
"listField":"values",
"keyField":"entitlementID",
"colsToPropsMap":{
"entitlementID":"id~#~char",
"entitlement_value":"name~#~char",
"customproperty1":"key~#~char",
"customproperty2":"self~#~char",
"customproperty3":"projectTypeKey~#~char"
},
"pagination":{
"offset":{
"offsetParam":"startAt",
"batchParam":"maxResults",
"batchSize":1,
"totalCountPath":"completeResponseMap.total"
}
}
}
}
},
"Roless":{
"entTypeOrder":2,
"call":{
"call1":{
"callOrder":0,
"stageNumber":0,
"http":{
"url":"https://abc.xyz.net/rest/api/2/role",
"httpHeaders":{
"Authorization":"${access_token}",
"Accept":"application/json"
},
"httpContentType":"application/json",
"httpMethod":"GET"
},
"listField":"",
"keyField":"entitlementID",
"colsToPropsMap":{
"entitlementID":"id~#~char",
"entitlement_value":"name~#~char",
"description":"description~#~char",
"customproperty1":"self~#~char"
}
}
}
}
}
},
"acctEntParams":{
"connection":"acctAuth",
"entTypes":{
"Group":{
"call":{
"call1":{
"callOrder":0,
"stageNumber":0,
"processingType":"httpEntToAcct",
"http":{
"httpHeaders":{
"Authorization":"${access_token}",
"Accept":"application/json"
},
"url":"https://abc.xyz.net/rest/api/2/group/member?groupId=${id}",
"httpContentType":"application/json",
"httpMethod":"GET"
},
"listField":"values",
"entKeyField":"entitlementID",
"acctIdPath":"accountId",
"acctKeyField":"accountID",
"pagination":{
"nextUrl":{
"nextUrlPath":"${response?.completeResponseMap?.nextPage==null?null:response.completeResponseMap.nextPage}"
}
}
}
}
}
}
}
}
Thanks & Regards,
SaviyntSavvy
09/24/2024 05:18 AM
@Saviynt_Savvy can you share postman response for the above api call .. which shows the user details too.
09/24/2024 05:20 AM
Hello @NM ,
It is attached in the question itself.
Let me know if you require any more details.
Thanks & Regards,
SaviyntSavvy
09/24/2024 05:29 AM
@Saviynt_Savvy try this
"listField":"values",
"entKeyField":"entitlementID",
"acctIdPath":"accountId",
"acctKeyField":"accountID"
Should work ..try once without pagination and share logs after running the job in txt format.
09/24/2024 06:09 AM
Hello @NM ,
I have tried removing the PAGINATION, still not able to import the accounts.
Find the logs in the attachment and I have changed the 'baseurl' and 'requesthosturl' values in the text file.
Basically, I am integrating JIRA application, though we have the REST Connection available in Freshdesk, I am mapping the entitlementID with groupID instead of name as given in the Freshdesk connection.
Thanks & Regards,
SaviyntSavvy
09/24/2024 06:15 AM
09/24/2024 06:21 AM
Hello @rushikeshvartak ,
Yes, all the Accounts and Entitlements were imported, except the Account to Entitlement mapping.
Thanks & Regards,
SaviyntSavvy