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

can we use response of call1 in call2 url in rest if response is other than entitlementID

pinky_chauhan
New Contributor II
New Contributor II

 

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 REPLIES 10

NM
Honored Contributor III
Honored Contributor III

@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.


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 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]

 

"O365-PermissionLevel": {
        "entTypeOrder": 6,
        "call": {
          "call1": {
  "connection": "userAuth",
            "callOrder": 0,
            "stageNumber": 0,
            "http": {
              "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": {
              "dependentCall": true
            },
            "listField": "d.results",
"nextApiKeyField": "entitlement_value",
            "keyField": "entitlementID",
            "colsToPropsMap": {
              "entitlementID": "PrincipalId~#~char",
              "entitlement_value": "PrincipalId~#~char"
            }
          }
        }
      }

 

NM
Honored Contributor III
Honored Contributor III

@pinky_chauhan instead of entitlement_value in url use entitlementID


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 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]

 

 

"O365-PermissionLevel": {
        "entTypeOrder": 6,
        "call": {
          "call1": {
  "connection": "userAuth",
            "callOrder": 0,
            "stageNumber": 0,
            "http": {
              "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": "${entitlementID}/_api/web/roleassignments",
              "httpHeaders": {
                "Authorization": "${access_token}"
              },
              "httpContentType": "application/json",
              "httpMethod": "GET"
            },
"inputParams": {
              "dependentCall": true
            },
            "listField": "d.results",
"nextApiKeyField": "entitlement_value",
            "keyField": "entitlementID",
            "colsToPropsMap": {
              "entitlementID": "PrincipalId~#~char",
              "entitlement_value": "PrincipalId~#~char"
            }
          }
        }
      }

NM
Honored Contributor III
Honored Contributor III

${entitlementID} 

@pinky_chauhan 

In inputparam don't use dependent call instead give entitlementname check the sample in developer guide.


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 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

 

"O365-PermissionLevel": {
        "entTypeOrder": 6,
        "call": {
          "call1": {
  "connection": "userAuth",
            "callOrder": 0,
            "stageNumber": 0,
            "http": {
              "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",
"nextApiKeyField": "entitlement_value",
            "keyField": "entitlementID",
            "colsToPropsMap": {
              "entitlementID": "PrincipalId~#~char",
              "entitlement_value": "PrincipalId~#~char"
            }
          }
        }
      }
 
and if i am using ${entitlementID} in url ,entitlementID is populating in the url but not entitlement_value.
 
DEBUG-Calling Webservice Url - <entitlementid from sharepoint>/_api/web/roleassignments with httpParams - null
DEBUG-Error while getting Access Import response for entType- O365-PermissionLevel, url- <entitlementid from sharepoint>/_api/web/roleassignments is: null
DEBUG-Getting response statusCode null, so failing Access Import Job
DEBUG-HTTP URL: ${entitlementID}/_api/web/roleassignments
DEBUG-Enter populateHttpParams for authType - oauth2
DEBUG-Enter doHttpHeadersBinding
 
"O365-PermissionLevel": {
        "entTypeOrder": 6,
        "call": {
          "call1": {
  "connection": "userAuth",
            "callOrder": 0,
            "stageNumber": 0,
            "http": {
              "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": "${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"
            }
          }
        }
      }

NM
Honored Contributor III
Honored Contributor III

@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.


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 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)

 

rushikeshvartak
All-Star
All-Star

Refer Support for Multiple API Call https://docs.saviyntcloud.com/bundle/Dev-Handbook-REST-v24x/page/Content/Developers-Handbook.htm


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

hi @rushikeshvartak I have checked, but couldn't find any examples that use attributes other than entitlementID