ATF - passing output of server side script to subsequent steps

anur
Kilo Contributor

Hi,

 

I have created an server-side script in ATF to find approvers from approver table

(function(outputs, steps, stepResult, assertEqual) {
    // add test script here
 var newOrderId = "";
 var Record_Number="";
 var sysIdforStep6 = 'f64cc4ebdb212300b148bd5139961927';
 gs.print('Sys id for request generated in previous step: '+ steps(sysIdforStep6).request_id);
 describe("A Run Server Side Script test", function() {  
  it("has access to previous step's outputs via steps()", function() {
   var request_Id = steps(sysIdforStep6).request_id;
   
   //get other deatils from table using new record sys id
   var gr = new GlideRecord("sc_request");
   gr.addQuery("sys_id",request_Id);
   gr.query();
   while(gr.next()){
    gs.print("New Request number created:: "+ gr.number);
    if(gr.number){
      Record_Number = gr.number;
    }
   }
   var grApprover = new GlideRecord("sysapproval_approver");
   grApprover.addQuery('sysapproval.number',Record_Number);
   grApprover.query();
   while(grApprover.next()){
    gs.print("sysapproval number: "+ grApprover.document_id.number);
    gs.print("approver name: "+ grApprover.approver.name);
    //gs.print(grApprover.approver.name);
    outputs.record_id = grApprover.approver.name;
    outputs.table = 'sysapproval_approver';
    //outputs.value = grApprover.approver.name;
    gs.print("value set to output table: "+outputs.table);
    gs.print("value set to outpur variable: "+outputs.record_id);
    //gs.print("outputs.value: "+outputs.value);
   }
  });

 }); 
})(outputs, steps, stepResult, assertEqual);
// uncomment the next line to execute this script as a jasmine test
jasmine.getEnv().execute();

The next step in ATF i have is an 'impersonation' step, where i nee dto impersonate as the user (who is output of server script). However even if after giving "Run Server Side Script.Record", it is not able to fetch the output of server script eventhough the script output shows correct values in logs. please suggest

1 ACCEPTED SOLUTION

Ankush Agrawal
ServiceNow Employee
ServiceNow Employee

Hi

You need to set the output variable as the sysId of the user to be impersonated, i.e.

 outputs.record_id = grApprover.approver.sys_id;

 

--
Best regards
Ankush

P.S. Please mark helpful/correct as appropriate to help fellow Community user in identifying useful answers.

View solution in original post

7 REPLIES 7

Ankush Agrawal
ServiceNow Employee
ServiceNow Employee

Hi

You need to set the output variable as the sysId of the user to be impersonated, i.e.

 outputs.record_id = grApprover.approver.sys_id;

 

--
Best regards
Ankush

P.S. Please mark helpful/correct as appropriate to help fellow Community user in identifying useful answers.

I am also stuck in the same scenario... but I am looking for approval in requested item. Could you please tell me what needs to be added in the script if doing for requested item.

 

Also, please note that requested item(sc_req_item) is fetched from sc_request. So, I have added a record query that finds requested item with requested field as the ordered catalog. Now when I am adding the step sys_id for record query in server script it is giving me huge data of error.

 

please let me know the exact code.

 

{
var newOrderId = "";
var Record_Number="";
var reqitem = 'cad9bc4c2fc3201068a1a85df699b61a';
gs.print('Sys id for request generated in previous step: '+ steps(reqitem).request_id);
describe("A Run Server Side Script test", function() {
it("has access to previous step's outputs via steps()", function() {
var request_Id = steps(reqitem).request_id;

//get other deatils from table using new record sys id
var gr = new GlideRecord("sc_req_item");
gr.addQuery("sys_id",request_Id);
gr.query();
while(gr.next()){
gs.print("New Request number created:: "+ gr.number);
if(gr.number){
Record_Number = gr.number;
}
}
var grApprover = new GlideRecord("sysapproval_approver");
grApprover.addQuery('sysapproval.number',Record_Number);
grApprover.query();
while(grApprover.next()){
gs.print("sysapproval number: "+ grApprover.document_id.number);
gs.print("approver name: "+ grApprover.approver.name);
//gs.print(grApprover.approver.name);
outputs.record_id = grApprover.approver.sys_id;
outputs.table = 'sysapproval_approver';
//outputs.value = grApprover.approver.name;
gs.print("value set to output table: "+outputs.table);
gs.print("value set to outpur variable: "+outputs.record_id);
//gs.print("outputs.value: "+outputs.value);
}
});

});

Hi, I have the similar query... Could you please look into that. Its really urgent and not able to get the solution.  Please find the link below

 

https://community.servicenow.com/community?id=community_question&sys_id=9526718c1b836450ed6c9979b04b...

@Ankush Agrawal 
Hi Ankush 
Hope your doing well 🙂

Requirement : We need to show the Related list record values in Run Server side script for that i have written below code.

Actually, i want to display a message in output for that i have written a code in Run Server-side script as below. but here i am not getting the message same logic checked in background script with record sys_id its working 

Code:

function(outputs, steps, params, stepResult, assertEqual) {
    // add test script here
var mmRecordSysID = steps('3a66daa9c3e21a50773116977a01314b').record_id; // Submit form step sys_id taken here 
var mmgr = new GlideRecord('x_fu_mast_main_request');
mmgr.addQuery('sys_id',mmRecordSysID);
mmgr.addQuery('status','completed');
mmgr.query();
if(mmgr.next()) {
 
var grLog = new GlideRecord('x_fu_np_lv_import_log');
grLog.addQuery('request_number',mmRecordSysID);
grLog.addQuery('level','info');
grLog.query();
if(grLog.next()){
 
outputs.table = 'x_fu_np_lv_import_log';
outputs.record_id = grLog.message;
stepResult.setOutputMessage("The import Log Message is" +grLog.message);
stepResult.setOutputMessage("Successfully Log generated");
 
        stepResult.setSuccess();
 
return true;
 
}
 
else{
 
stepResult.setOutputMessage("Failed to find message");
 
stepResult.setFailed();
 
return false;
 
}
 
}

Could you please check the code.