Click HERE to see how Saviynt Intelligence is transforming the industry. |
10/19/2024 01:33 AM
We need to fetch SharePoint site permissions using the API-https://<tenant>.sharepoint.com/sites/{sitename}/_api/web/roleassignments.
We are retrieving the https://<tenant>.sharepoint.com/sites/{sitename} in entitlement_value from the Call1 https://graph.microsoft.com/v1.0/sites?search="%2fsites%2f" so we tried "url": "${entitlement_value}/_api/web/roleassignments" in call2 but its giving below error
Got Webservice API Response: [error:Error Illegal character in path at index 1: ${entitlement_value}/_api/web/roleassignments]
Defined the entitlement type in ImportAccountEntJSON
"O365-PermissionLevel": {
"entTypeOrder": 6,
"call": {
"call1": {
"connection": "userAuth",
"callOrder": 0,
"stageNumber": 0,
"http": {
"url": "https://graph.microsoft.com/v1.0/sites?search=%22%2fsites%2f%22",
"httpHeaders": {
"Authorization": "${access_token}"
},
"httpContentType": "application/json",
"httpMethod": "GET"
},
"listField": "value",
"keyField": "entitlementID",
"colsToPropsMap": {
"entitlementID": "id~#~char",
"entitlement_value": "webUrl~#~char"
}
},
"call2": {
"connection": "SPAuth",
"callOrder": 1,
"stageNumber": 3,
"http": {
"url": "${entitlement_value}/_api/web/roleassignments",
"httpHeaders": {
"Authorization": "${access_token}"
},
"httpContentType": "application/json",
"httpMethod": "GET"
},
"inputParams": {
"entitlementname": "O365-PermissionLevel"
},
"listField": "d.results",
"keyField": "entitlementID",
"colsToPropsMap": {
"entitlementID": "PrincipalId~#~char",
"entitlement_value": "PrincipalId~#~char"
}
}
}
}
10/19/2024 05:33 AM
@pinky_chauhan try this
"nextApiKeyField": "entitlement_value"
Add this below the listfield of call2 and keep the same url which you are using currently no change on dynamic variable.
10/19/2024 12:00 PM
Hi @NM i tried with "nextApiKeyField": "entitlement_value" but still getting same error.
Got Webservice API Response: [error:Error Illegal character in path at index 1: ${entitlement_value}/_api/web/roleassignments]
10/19/2024 12:44 PM
@pinky_chauhan instead of entitlement_value in url use entitlementID
10/19/2024 10:42 PM
hi @NM I tried but same error:-
DEBUG-Error in getDynamicBindString: No such property: entitlementID for class: SimpleTemplateScript717
DEBUG-Exit doHttpParamsBinding
DEBUG-Exit populateHttpParams
DEBUG-Time Taken to populateEntitlementMapByConfig : 0.0
DEBUG-Calling getDynamicBindString for entitlement
DEBUG-Got showLogs = true
DEBUG-Error in getDynamicBindString: No such property: entitlementID for class: SimpleTemplateScript717
DEBUG-Inside pullObjectsByRest
DEBUG-Got showLogs = true
DEBUG-Calling Webservice Url - ${entitlementID}/_api/web/roleassignments with httpParams - null
DEBUG-calling executeRequestWithTimeoutConfig for api...
DEBUG-calling api...
DEBUG-before calling executeRequestWithHeaders for api...
DEBUG-isFipsEnabled = false
DEBUG-getHttpClient - proxyParams : null
DEBUG-getHttpClient - sslSocketFactory : null
setting connection timeout to 10 seconds and request timeout to 60 seconds
DEBUG-getHttpClient - HttpClientBuilder.create().build() called.
DEBUG-called executeGetRequestWithHeaders for api...
DEBUG-after calling executeRequestWithHeaders for api...
DEBUG-called api...
DEBUG-timeout validated for api...
DEBUG-got response for api...
DEBUG-Got showLogs = true
DEBUG-Got Webservice API Response: [error:Error Illegal character in path at index 1: ${entitlementID}/_api/web/roleassignments]
DEBUG-Got showLogs = true
DEBUG-Got null response statusCode with erroMsg - [error:Error Illegal character in path at index 1: ${entitlementID}/_api/web/roleassignments]
10/19/2024 11:24 PM
${entitlementID}
In inputparam don't use dependent call instead give entitlementname check the sample in developer guide.
10/20/2024 12:15 AM
hi @NM if i am using ${entitlement_value} in url i am getting "No such property: entitlement_value"
DEBUG-Getting response statusCode null, so failing Access Import Job
DEBUG-HTTP URL: ${entitlement_value}/_api/web/roleassignments
DEBUG-Enter populateHttpParams for authType - oauth2
DEBUG-Enter doHttpHeadersBinding
DEBUG-Exit doHttpHeadersBinding
DEBUG-Got showLogs = true
DEBUG-Error in getDynamicBindString: No such property: entitlement_value for class: SimpleTemplateScript710
DEBUG-Enter doHttpParamsBinding
DEBUG-Got showLogs = true
DEBUG-Error in getDynamicBindString: No such property: entitlement_value for class: SimpleTemplateScript710
DEBUG-Exit doHttpParamsBinding
DEBUG-Exit populateHttpParams
10/20/2024 12:48 AM - edited 10/20/2024 12:49 AM
@pinky_chauhan try this s
"call2": {
"connection": "SPAuth",
"callOrder": 1,
"stageNumber": 3,
"http": {
"url": "${entitlementID}/_api/web/roleassignments",
"httpHeaders": {
"Authorization": "${access_token}"
},
"httpContentType": "application/json",
"httpMethod": "GET"
},
"inputParams": {
"entitlementname": "O365-PermissionLevel"
},
"listField": "d.results",
"nextApiKeyField": "entitlement_value",
"keyField": "entitlementID",
"colsToPropsMap": {
"entitlementID": "PrincipalId~#~char",
"entitlement_value": "PrincipalId~#~char"
}
}
}
}
What result are you receiving with this .. share logs.
10/20/2024 08:57 AM - edited 10/20/2024 08:59 AM
hi @NM we are receiving entitlementid instead of entitlement_value in the url using call2 you have provided.
Got showLogs = true |
Error while getting Access Import response for entType- O365-PermissionLevel, url- <entitlementid>/_api/web/roleassignments is: null |
Getting response statusCode null, so failing Access Import Job |
HTTP URL: ${entitlementID}/_api/web/roleassignments |
Enter populateHttpParams for authType - oauth2 |
Enter doHttpHeadersBinding |
Exit doHttpHeadersBinding |
Enter doHttpParamsBinding |
Exit doHttpParamsBinding |
Exit populateHttpParams |
Time Taken to populateEntitlementMapByConfig : 0.0 |
Calling getDynamicBindString for entitlement |
Inside pullObjectsByRest |
Got showLogs = true |
Calling Webservice Url - <entitlementid>/_api/web/roleassignments with httpParams - null |
calling executeRequestWithTimeoutConfig for api... |
calling api... |
before calling executeRequestWithHeaders for api... |
isFipsEnabled = false |
getHttpClient - proxyParams : null |
getHttpClient - sslSocketFactory : null |
setting connection timeout to 10 seconds and request timeout to 60 seconds |
getHttpClient - HttpClientBuilder.create().build() called. |
called executeGetRequestWithHeaders for api... |
after calling executeRequestWithHeaders for api... |
called api... |
timeout validated for api... |
got response for api... |
Got showLogs = true |
Got Webservice API Response: [error:Error null] |
pullObjectsByRest - responseStatusCode ::null |
Got showLogs = true |
Got null response statusCode with erroMsg - [error:Error null] |
Exception in getting response in pullObjectsByRest : |
java.lang.Exception: NullResponseFromTarget at com.saviynt.provisoning.rest.RestUtilService.checkForErrorMsg(RestUtilService.groovy:1463) at com.saviynt.provisoning.rest.RestProvisioningService.pullObjectsByRest(RestProvisioningService.groovy:4574) at com.saviynt.provisoning.rest.RestProvisioningService.processEntitlementByPagination(RestProvisioningService.groovy:958) at com.saviynt.provisoning.rest.RestProvisioningService$_processEntitlementByEntFilterAndNoFilter_closure8.doCall(RestProvisioningService.groovy:831) at com.saviynt.provisoning.rest.RestProvisioningService.processEntitlementByEntFilterAndNoFilter(RestProvisioningService.groovy:799) at com.saviynt.provisoning.rest.RestProvisioningService.processEntitlementsFinal(RestProvisioningService.groovy:700) at com.saviynt.provisoning.rest.RestProvisioningService.processAccessFullBySequentialAndIterative(RestProvisioningService.groovy:658) at com.saviynt.provisoning.rest.RestProvisioningService.importAccessFullBySequentialAndIterativeWithoutEntFilter(RestProvisioningService.groovy:535) at com.saviynt.provisoning.rest.RestProvisioningService.importAccessFullBySequentialAndIterative(RestProvisioningService.groovy:287) at com.saviynt.provisoning.rest.RestProvisioningService.importAccessFull(RestProvisioningService.groovy:173) at com.saviynt.provisoning.rest.RestProvisioningService.doImport(RestProvisioningService.groovy:145) at com.saviynt.ecm.integration.ExternalConnectionCallService.invokeExternalMethod(ExternalConnectionCallService.groovy:233) at ApplicationDataImportJob.execute(ApplicationDataImportJob.groovy:211) at org.quartz.core.JobRunShell.run(JobRunShell.java:199) at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:546) |
Got showLogs = true |
Got showLogs = true |
Error while getting Access Import response for entType- O365-PermissionLevel, url- <entitlementid>/_api/web/roleassignments is: null |
Getting response statusCode null, so failing Access Import Job |
HTTP URL: ${entitlementID}/_api/web/roleassignments |
Enter populateHttpParams for authType - oauth2 |
Enter doHttpHeadersBinding |
Exit doHttpHeadersBinding |
Enter doHttpParamsBinding |
Exit doHttpParamsBinding |
Exit populateHttpParams |
Time Taken to populateEntitlementMapByConfig : 0.0 |
Calling getDynamicBindString for entitlement |
Inside pullObjectsByRest |
Got showLogs = true |
Calling Webservice Url - <entitlementid>/_api/web/roleassignments with httpParams - null |
calling executeRequestWithTimeoutConfig for api... |
calling api... |
before calling executeRequestWithHeaders for api... |
isFipsEnabled = false |
getHttpClient - proxyParams : null |
getHttpClient - sslSocketFactory : null |
setting connection timeout to 10 seconds and request timeout to 60 seconds |
getHttpClient - HttpClientBuilder.create().build() called. |
called executeGetRequestWithHeaders for api... |
after calling executeRequestWithHeaders for api... |
called api... |
timeout validated for api... |
got response for api... |
Got showLogs = true |
Got Webservice API Response: [error:Error null] |
pullObjectsByRest - responseStatusCode ::null |
Got showLogs = true |
Got null response statusCode with erroMsg - [error:Error null] |
Exception in getting response in pullObjectsByRest : |
java.lang.Exception: NullResponseFromTarget at com.saviynt.provisoning.rest.RestUtilService.checkForErrorMsg(RestUtilService.groovy:1463) at com.saviynt.provisoning.rest.RestProvisioningService.pullObjectsByRest(RestProvisioningService.groovy:4574) at com.saviynt.provisoning.rest.RestProvisioningService.processEntitlementByPagination(RestProvisioningService.groovy:958) at com.saviynt.provisoning.rest.RestProvisioningService$_processEntitlementByEntFilterAndNoFilter_closure8.doCall(RestProvisioningService.groovy:831) at com.saviynt.provisoning.rest.RestProvisioningService.processEntitlementByEntFilterAndNoFilter(RestProvisioningService.groovy:799) at com.saviynt.provisoning.rest.RestProvisioningService.processEntitlementsFinal(RestProvisioningService.groovy:700) at com.saviynt.provisoning.rest.RestProvisioningService.processAccessFullBySequentialAndIterative(RestProvisioningService.groovy:658) at com.saviynt.provisoning.rest.RestProvisioningService.importAccessFullBySequentialAndIterativeWithoutEntFilter(RestProvisioningService.groovy:535) at com.saviynt.provisoning.rest.RestProvisioningService.importAccessFullBySequentialAndIterative(RestProvisioningService.groovy:287) at com.saviynt.provisoning.rest.RestProvisioningService.importAccessFull(RestProvisioningService.groovy:173) at com.saviynt.provisoning.rest.RestProvisioningService.doImport(RestProvisioningService.groovy:145) at com.saviynt.ecm.integration.ExternalConnectionCallService.invokeExternalMethod(ExternalConnectionCallService.groovy:233) at ApplicationDataImportJob.execute(ApplicationDataImportJob.groovy:211) at org.quartz.core.JobRunShell.run(JobRunShell.java:199) at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:546) |
10/19/2024 08:01 AM
Refer Support for Multiple API Call https://docs.saviyntcloud.com/bundle/Dev-Handbook-REST-v24x/page/Content/Developers-Handbook.htm
10/19/2024 10:44 PM
hi @rushikeshvartak I have checked, but couldn't find any examples that use attributes other than entitlementID