How to populate the correct Requested_for value on RITM using Scripted Rest API

Santhosh15
Tera Guru

Hello All,

When I am trying to post the data using json, the value for requested_for reference field is filling with opened by field value on RITM Requested_for value.

Could you please help me on this issue,

(function process( /*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {

    // implement resource here
    var reqbody = request.body.dataString;

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

        var requestedFor = parsedData.requested_for;
        var Type = parsedData.type;
        var needsJavaInstalled = parsedData.needs_java_installed;
        var Environment = parsedData.environment;
        var shortDescription = parsedData.short_description;
        var Description = parsedData.description;
        var assignment_group = parsedData.assignment_group;
        var assignedTo = parsedData.assigned_to;
        var closeImmediately = parsedData.close_immediately;
        var closingComments = parsedData.closing_comments;

        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('afb8ddb7137dab0046d252722244b009', 1); //request Oracle Sysadmin Access (Legacy PCS)
        var grUser = new GlideRecord('sys_user');
        grUser.get('user_name',requestedFor);
        //fill in the variables on the request item form
        cart.setVariable(item, 'requested_for', grUser.sys_id);
        cart.setVariable(item, "type", Type);
        cart.setVariable(item, "needs_java_installed", needsJavaInstalled);
        cart.setVariable(item, "environment", Environment);
        cart.setVariable(item, "short_description", shortDescription);
        cart.setVariable(item, "description", Description);
        cart.setVariable(item, "assignment_group", assignment_group);
        cart.setVariable(item, "assigned_to", assignedTo);
        cart.setVariable(item, "close_immediately", closeImmediately);
        cart.setVariable(item, "closing_comments", closingComments);

        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(res);

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

})(request, response);

 

@Ankur Bawiskar  @palanikumar  @Mohith Devatte  @Harish KM @Aman Kumar @Maik Skoddow 

1 ACCEPTED SOLUTION

Hello @palanikumar @Aman Kumar ,

After updating this below code, I am getting correct value in Requestor for field.

 rc.requested_for = grUser.sys_id;
 rc.update();

Thanks for your help

View solution in original post

10 REPLIES 10

@D Kumar Swamy 

If mine, palanikumar's and Aman's approach does not work I am worried that there is some script that sets the Requested for to Opened by after your Scripted Rest Api is executed (most probably Business Rule). If so you should have to analyze the BR that you have in your system, find which one is responsible for this behaviour and for example add to this BR condition that it should work for this item or in your script modify to omit BRs (but it is less secure)
Example:

rc.requested_for = requestedFor ;
rc.setWorkflow(false)
rc.update();



palanikumar
Mega Sage

Hi,

Is "Requested For" is a variable created or is it the reference field available in Request table? if it is the field available in request table then use the below script (Highlighted the changes in bold)

(function process( /*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {

    // implement resource here
    var reqbody = request.body.dataString;

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

        var requestedFor = parsedData.requested_for;
        var Type = parsedData.type;
        var needsJavaInstalled = parsedData.needs_java_installed;
        var Environment = parsedData.environment;
        var shortDescription = parsedData.short_description;
        var Description = parsedData.description;
        var assignment_group = parsedData.assignment_group;
        var assignedTo = parsedData.assigned_to;
        var closeImmediately = parsedData.close_immediately;
        var closingComments = parsedData.closing_comments;

        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('afb8ddb7137dab0046d252722244b009', 1); //request Oracle Sysadmin Access (Legacy PCS)
        var grUser = new GlideRecord('sys_user');
        grUser.get('user_name',requestedFor);
        //fill in the variables on the request item form
        cart.setVariable(item, 'requested_for', grUser.sys_id);
        cart.setVariable(item, "type", Type);
        cart.setVariable(item, "needs_java_installed", needsJavaInstalled);
        cart.setVariable(item, "environment", Environment);
        cart.setVariable(item, "short_description", shortDescription);
        cart.setVariable(item, "description", Description);
        cart.setVariable(item, "assignment_group", assignment_group);
        cart.setVariable(item, "assigned_to", assignedTo);
        cart.setVariable(item, "close_immediately", closeImmediately);
        cart.setVariable(item, "closing_comments", closingComments);

        var rc = cart.placeOrder();

        rc.requested_for = grUser;
        rc.update();

        // 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(res);

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

})(request, response);

Thank you,
Palani

@palanikumar @Aman Kumar 

After adding this two lines i am getting the Empty requested_for value.

For reference i am attaching screenshot

find_real_file.png

Hello @palanikumar @Aman Kumar ,

After updating this below code, I am getting correct value in Requestor for field.

 rc.requested_for = grUser.sys_id;
 rc.update();

Thanks for your help

Aman Kumar S
Kilo Patron

Just to be clear, when you say Requested for on RITM, the one that you see on ritm form is just a dot walked field of Request, you can test this by doing configure dictionary on the field on RITM form.

Add below lines after cart checkout

rc.requested_for = requestedFor ;
rc.update();

Best Regards
Aman Kumar