We've updated the ServiceNow Community Code of Conduct, adding guidelines around AI usage, professionalism, and content violations. Read more

REST API and script include

tsoct
Tera Guru

The script included below is returning an undefined error. How can I pass the bearer token to other function within the script include? 

Imagine i will have more function within this script include, and not limited to only one getORG

var GetCostCenterDetails = Class.create();
GetCostCenterDetails.prototype = {
    initialize: function() {},

    _getToken: function() {

        try {
            var rest = new sn_ws.RESTMessageV2('CPNYCostCenter', 'Get Token');          

            var response = rest.execute();
            var responseBody = response.getBody();
            var httpStatus = response.getStatusCode();

            if (httpStatus.toString().startsWith("2")) {
                var parsedData = JSON.parse(responseBody);
                var token = parsedData.access_token;
				return token;
            } else {
                gs.error('No token generated');
            }

        } catch (ex) {
            gs.error("\nException occured: " + ex);
        }
    },

    getORG: function() {
   	
        var result = {};

        try {
			var token = this._getToken();
            var rest1 = new sn_ws.RESTMessageV2('CPNYCostCenter', "Get ORG");
            rest1.setRequestHeader('Authorization', 'Bearer ' + token);
 
            var response1 = rest1.execute();

            var responseBody1 = response1.getBody();
            var httpStatus1 = response1.getStatusCode();

            if (httpStatus1.toString().startsWith("2")) {
                var parsedData1 = JSON.parse(responseBody1);

                if (parsedData1.value) {
                    fields = [];
                    var keys = Object.keys(parsedData1.value[0]);
                    for (var i = 0; i < keys.length; i++) {
                        var resultObject = {};
                        resultObject.name = keys[i];
                        resultObject.display_value = parsedData1.value[0][keys[i]];
                        fields.push(resultObject);
                    }

                    result.fields = [];
                    result.fields = fields;
                }
            } else {
                gs.error('Error ORG');
            }

        } catch (ex) {
            var message = ex.getMessage();
            gs.error("GetCostCenterDetailsError: " + message);
        }
        return result;
    },

    type: 'GetCostCenterDetails'
};

 

1 ACCEPTED SOLUTION

Not applicable

Try with

initialize: function() {
  
    this.token = "" ? this._getToken() : this.token;
},

and later assign the value to it like 

            if (httpStatus.toString().startsWith("2")) {
                var parsedData = JSON.parse(responseBody);
                var token = parsedData.access_token;
				return token;

and 

   try {
			//var token = this._getToken();
            var rest1 = new sn_ws.RESTMessageV2('CPNYCostCenter', "Get ORG");
            rest1.setRequestHeader('Authorization', 'Bearer ' + this.token);

View solution in original post

6 REPLIES 6

Not applicable

Try with

initialize: function() {
  
    this.token = "" ? this._getToken() : this.token;
},

and later assign the value to it like 

            if (httpStatus.toString().startsWith("2")) {
                var parsedData = JSON.parse(responseBody);
                var token = parsedData.access_token;
				return token;

and 

   try {
			//var token = this._getToken();
            var rest1 = new sn_ws.RESTMessageV2('CPNYCostCenter', "Get ORG");
            rest1.setRequestHeader('Authorization', 'Bearer ' + this.token);

Not applicable

Havent tested it but you can surely keep your token as variable accessible to the entire object on initializing it. It works for sure - haven tested the syntax here

I got it! thank you !!

Hello @Community Alums , i have another related question.

So, for another function, I need to pass two parameters to the endpoint, but it does not return any value. Could you tell what is wrong?

Thank you

 

getACTIVITY2: function() {
        try {
            var r = new sn_ws.RESTMessageV2('CPNYCostCenter', 'Get ACTIVITY');
            r.setStringParameterNoEscape('p_fund', 'AF');
            r.setStringParameterNoEscape('p_org', 'CSIPM');
			r.setRequestHeader('Authorization', 'Bearer ' + this.token);

            var response2 = r.execute();
            var responseBody2 = response2.getBody();
            var httpStatus2 = response2.getStatusCode();
			gs.info("The Activity: " + responseBody2);
        } catch (ex) {
            var message = ex.message;
        }
    },

 

tsoct_0-1715698207847.png