Executing Azure Cloud Rest API in ServiceNow

Kiran Patil2
Tera Contributor

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

 

 

2 REPLIES 2

Kiran Patil2
Tera Contributor

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;

 

Tushar
Kilo Sage
Kilo Sage

Hi @Kiran Patil2 

 

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