How to show RITM number in the response body ?

User205031
Tera Contributor

Hi All,

 

My requirement is 3rd party wants to create RITM in ServiceNow. I have provided them OOB endpoint: 

https://marriottdev.service-now.com/api/sn_sc/servicecatalog/items/{sys_id}/order_now

 

and JSON as :

{

'sysparm_id' : '4f9131449f901200d54dd4b4232e708d',

'sysparm_quantity' : '1',

'correlation_id': 'ABC-123',

 'correlation_display': 'ABC'

'variables':{

       'support_group':'DEF',

       'u_summary':'test',

       'u_detailed_description': 'test1'    

}

}

 

The response I am getting back is :

User205031_0-1761667290595.png

in the 'request_number' , I am getting the REQ number.

But my client wants the RITM number to display over there instead of REQ number.

 

How can I achieve this?

 

The response body 

1 ACCEPTED SOLUTION

@User205031

 try this and also add logs to debug where it's failing

it's telling line 44 and line 50

    (function process( /*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {
        var reqbody = request.body.dataString;

        try {
            var parser = new global.JSON();
            var parsedData = parser.decode(reqbody);

            var suppGroup = parsedData.support_group;
            var uSummary = parsedData.u_summary;
            var detailDescr = parsedData.u_detailed_description;
            var corID = parsedData.correlation_id;
            var corDisplay = parsedData.correlation_display;

            var cartId = GlideGuid.generate(null);
            var cart = new Cart(cartId);

            // give here the sys_id of the catalog item under which those variables are present

            var item = cart.addItem('249365f4478cf6109b866e31516d4356', 1);

            //fill in the variables on the request item form
            cart.setVariable(item, "support_group", suppGroup);
            cart.setVariable(item, "u_summary", uSummary);
            cart.setVariable(item, "u_detailed_description", detailDescr);
            cart.setVariable(item, "correlation_id", corID);
            cart.setVariable(item, "correlation_display", corDisplay);

            var rc = cart.placeOrder();

            // rc is the request number; you can query RITM table and get the RITM number

            var reqNumber = rc.number;

            var ritm = new GlideRecord('sc_req_item');
            ritm.get('request.number', reqNumber);
            var ritmNumber = ritm.number;

            var res = {};
            res["status"] = "Success";
            res["requestNumber"] = reqNumber.toString();
            res["requestItemNumber"] = ritmNumber.toString();
            response.setBody(JSON.stringify(res));

        } catch (ex) {
            var res1 = {};
            res1["status"] = "Error";
            res1["message"] = ex.message;
            response.setBody(JSON.stringify(res1));
        }


    })(request, response);

💡 If my response helped, please mark it as correct and close the thread 🔒— this helps future readers find the solution faster! 🙏

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

View solution in original post

7 REPLIES 7

Ankur Bawiskar
Tera Patron
Tera Patron

@User205031 

you can't alter this OOTB behavior

2 Ways

1) ask them to parse and get REQ and then ask them to consume Table API on sc_req_item with encoded query as this

request.number=REQ001

OR
2) create your own scripted REST API which gives you control over what you can send in response

I shared solution here few years ago, check that and enhance

Scripted rest api 

💡 If my response helped, please mark it as correct and close the thread 🔒— this helps future readers find the solution faster! 🙏

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

Hi @Ankur Bawiskar ,

 

I tried the script that you have shared in the link but got below error:

{

  "error": {

    "message": "Script Evaluation Exception",

    "detail": "Cannot convert {\"status\":\"Error\",\"message\":\"Cannot convert {\\\"status\\\":\\\"Success\\\",\\\"requestNumber\\\":{},\\\"requestItemNumber\\\":{}} to org.mozilla.javascript.ScriptableObject (sys_ws_operation.ec4250763b347a100057e09a04e45a4a.operation_script; line 44)\"} to org.mozilla.javascript.ScriptableObject (sys_ws_operation.ec4250763b347a100057e09a04e45a4a.operation_script; line 50)"

  },

  "status": "failure"

}

 

Below is the script:

    // Example Scripted REST API script (simplified)
    (function process( /*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {
        var reqbody = request.body.dataString;

        try {
            var parser = new global.JSON();
            var parsedData = parser.decode(reqbody);

            var suppGroup = parsedData.support_group;
            var uSummary = parsedData.u_summary;
            var detailDescr = parsedData.u_detailed_description;
            var corID = parsedData.correlation_id;
            var corDisplay = parsedData.correlation_display;

            var cartId = GlideGuid.generate(null);
            var cart = new Cart(cartId);

            // give here the sys_id of the catalog item under which those variables are present

            var item = cart.addItem('249365f4478cf6109b866e31516d4356', 1);

            //fill in the variables on the request item form
            cart.setVariable(item, "support_group", suppGroup);
            cart.setVariable(item, "u_summary", uSummary);
            cart.setVariable(item, "u_detailed_description", detailDescr);
            cart.setVariable(item, "correlation_id", corID);
            cart.setVariable(item, "correlation_display", corDisplay);

            var rc = cart.placeOrder();

            // rc is the request number; you can query RITM table and get the RITM number

            var reqNumber = rc.number;

            var ritm = new GlideRecord('sc_req_item');
            ritm.get('request.number', reqNumber);
            var ritmNumber = ritm.number;

            var res = {};
            res["status"] = "Success";
            res["requestNumber"] = reqNumber;
            res["requestItemNumber"] = ritmNumber;
            response.setBody(JSON.stringify(res));

        } catch (ex) {
            var res1 = {};
            res1["status"] = "Error";
            res1["message"] = ex.message;
            response.setBody(JSON.stringify(res1));
        }


    })(request, response);

 

Could you please help me to identify the error?

 

Thanks!

@User205031

 try this and also add logs to debug where it's failing

it's telling line 44 and line 50

    (function process( /*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {
        var reqbody = request.body.dataString;

        try {
            var parser = new global.JSON();
            var parsedData = parser.decode(reqbody);

            var suppGroup = parsedData.support_group;
            var uSummary = parsedData.u_summary;
            var detailDescr = parsedData.u_detailed_description;
            var corID = parsedData.correlation_id;
            var corDisplay = parsedData.correlation_display;

            var cartId = GlideGuid.generate(null);
            var cart = new Cart(cartId);

            // give here the sys_id of the catalog item under which those variables are present

            var item = cart.addItem('249365f4478cf6109b866e31516d4356', 1);

            //fill in the variables on the request item form
            cart.setVariable(item, "support_group", suppGroup);
            cart.setVariable(item, "u_summary", uSummary);
            cart.setVariable(item, "u_detailed_description", detailDescr);
            cart.setVariable(item, "correlation_id", corID);
            cart.setVariable(item, "correlation_display", corDisplay);

            var rc = cart.placeOrder();

            // rc is the request number; you can query RITM table and get the RITM number

            var reqNumber = rc.number;

            var ritm = new GlideRecord('sc_req_item');
            ritm.get('request.number', reqNumber);
            var ritmNumber = ritm.number;

            var res = {};
            res["status"] = "Success";
            res["requestNumber"] = reqNumber.toString();
            res["requestItemNumber"] = ritmNumber.toString();
            response.setBody(JSON.stringify(res));

        } catch (ex) {
            var res1 = {};
            res1["status"] = "Error";
            res1["message"] = ex.message;
            response.setBody(JSON.stringify(res1));
        }


    })(request, response);

💡 If my response helped, please mark it as correct and close the thread 🔒— this helps future readers find the solution faster! 🙏

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

@User205031 

Hope you are doing good.

Did my reply answer your question?

💡 If my response helped, please mark it as correct and close the thread 🔒— this helps future readers find the solution faster! 🙏

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader