Executing Azure Cloud Rest API in ServiceNow
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-07-2023 01:05 PM - edited 09-07-2023 01:06 PM
Hi,
I am trying to make a rest API GET call to Azure Clou Management API from the ServiceNow script. The get endpoint has `$filter` criteria to filter the result. The endpoint works well in Postman but does not work in ServiceNow with a filter added to the query parameter.
it seems setQueryParameter is not able to recognise the query pattern. It worked if I remove 'setQueryParameter' from the script.
var rolename = "PowerUserAccess";
var filter = "roleName eq 'PowerUserAccess'";
var endpoint = "https://management.azure.com/subscriptions/{tenant-id}/providers/Microsoft.Authorization/roleDefinitions?api-version=2022-04-01"
var r2 = new sn_ws.RESTMessageV2();
r2.setEndpoint(endpoint);
r2.setRequestHeader("Content-Type", "application/json");
r2.setRequestHeader("Authorization", "Bearer " + authToken);
r2.setQueryParameter("$filter", filter);
r2.setHttpMethod('GET');
var response2 = r2.execute();
var statusCode = response2.getStatusCode();
if (statusCode == 200 || statusCode == 201 || statusCode == 202) {
var obj = JSON.parse(response2.getBody());
gs.info("obj: "+ JSON.stringify(obj));
}
Here is the error:
Error:
Error Code: 1
Error Message: Method failed: (/subscriptions/{tenant-id}/providers/Microsoft.Authorization/roleDefinitions) with code: 404
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-07-2023 02:04 PM
Found the solution:
var filter = "roleName eq 'PowerUserAccess'";
filter = encodeURIComponent(filter);
var endpoint = "https://management.azure.com/subscriptions/{tenant-id}/providers/Microsoft.Authorization/roleDefinitions?api-version=2022-04-01&$filter="+filter;
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-07-2023 06:05 PM
I think you can try to construct the URL with the query parameter directly in your script, rather than using setQueryParameter.
please try below script -
var rolename = "PowerUserAccess";
var filter = "roleName eq 'PowerUserAccess'";
var endpoint = "https://management.azure.com/subscriptions/{tenant-id}/providers/Microsoft.Authorization/roleDefinitions?api-version=2022-04-01&$filter=" + filter;
var r2 = new sn_ws.RESTMessageV2();
r2.setEndpoint(endpoint);
r2.setRequestHeader("Content-Type", "application/json");
r2.setRequestHeader("Authorization", "Bearer " + authToken);
r2.setHttpMethod('GET');
var response2 = r2.execute();
var statusCode = response2.getStatusCode();
if (statusCode == 200 || statusCode == 201 || statusCode == 202) {
var obj = JSON.parse(response2.getBody());
gs.info("obj: " + JSON.stringify(obj));
}
Please, don't forget to mark my answer as correct if it solves your issue or mark it as helpful if it is relevant for you!
Regards,
Tushar