Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

How to return result from script include?

Meera_P
Tera Expert

Hello,

I'm learning script include on how to return a result to the caller. Please provide guidance.  Thank you

I would like to display an alert after a record has been created.

UI Action Script:

function requestApproval() {
    var approverSysId = g_form.getValue('assigned_to');
    var recordSysId = g_form.getUniqueValue();

    var ga = new GlideAjax('NewApprovalRecord');
    ga.addParam('sysparm_name', 'createApprover');
    ga.addParam('sysparm_approver', approverSysId); 
    ga.addParam('sysparm_sys_id', recordSysId); 
    ga.getXMLAnswer(callBackFunction);
}

function callBackFunction(result) {
    if (result == 'Yes') {
alert(result);
    }
}

Script Include:

var NewApprovalRecord = Class.create();
NewApprovalRecord.prototype = Object.extendsObject(AbstractAjaxProcessor, {

    createApprover: function() {

        var approverID = this.getParameter('sysparm_approver');
        var recordID = this.getParameter('sysparm_sys_id');

        var newApproval = new GlideRecord('sysapproval_approver');
        newApproval.initialize();
        newApproval.setValue('state', 'requested');
        newApproval.setValue('approver', approverID);
        newApproval.setValue('sysapproval', recordID);
        newApproval.insert();
    },
	

    type: 'NewApprovalRecord'
});

 

2 ACCEPTED SOLUTIONS

Kieran Anson
Kilo Patron

Hey!

Welcome to SN.

To return a response from a client-callable script include you can do the following (which is applicable when using getXMLAnswer)

createApprover: function() {

        var approverID = this.getParameter('sysparm_approver');
        var recordID = this.getParameter('sysparm_sys_id');

        var newApproval = new GlideRecord('sysapproval_approver');
        newApproval.initialize();
        newApproval.setValue('state', 'requested');
        newApproval.setValue('approver', approverID);
        newApproval.setValue('sysapproval', recordID);
        newApproval.insert();

		return newApproval.getUniqueValue();
    }

The javasciprt return operator defines what the function i returning, and the newApproval.getUniqueValue() returns a string value of the sys_id. You want to make sure you're returning a string(able) value, not an object.

 

So the following wouldn't work, as newApproval isa GlideObject

createApprover: function() {

        var approverID = this.getParameter('sysparm_approver');
        var recordID = this.getParameter('sysparm_sys_id');

        var newApproval = new GlideRecord('sysapproval_approver');
        newApproval.initialize();
        newApproval.setValue('state', 'requested');
        newApproval.setValue('approver', approverID);
        newApproval.setValue('sysapproval', recordID);
        newApproval.insert();

		return newApproval
    }

 

But this would

createApprover: function() {

        var approverID = this.getParameter('sysparm_approver');
        var recordID = this.getParameter('sysparm_sys_id');

        var newApproval = new GlideRecord('sysapproval_approver');
        newApproval.initialize();
        newApproval.setValue('state', 'requested');
        newApproval.setValue('approver', approverID);
        newApproval.setValue('sysapproval', recordID);
        newApproval.insert();

		return true
    }

View solution in original post

Hemanth M1
Giga Sage
Giga Sage

Hi @Meera_P ,

 

try this

var NewApprovalRecord = Class.create();
NewApprovalRecord.prototype = Object.extendsObject(AbstractAjaxProcessor, {

    createApprover: function() {

        var approverID = this.getParameter('sysparm_approver');
        var recordID = this.getParameter('sysparm_sys_id');

        var newApproval = new GlideRecord('sysapproval_approver');
        newApproval.initialize();
        newApproval.setValue('state', 'requested');
        newApproval.setValue('approver', approverID);
        newApproval.setValue('sysapproval', recordID);
        return  newApproval.insert(); //this would return sys_id of the approval record
    },
	

    type: 'NewApprovalRecord'
});
Accept and hit Helpful if it helps.

Thank you,
Hemanth
Certified Technical Architect (CTA), ServiceNow MVP 2024, 2025

View solution in original post

7 REPLIES 7

Kieran Anson
Kilo Patron

Hey!

Welcome to SN.

To return a response from a client-callable script include you can do the following (which is applicable when using getXMLAnswer)

createApprover: function() {

        var approverID = this.getParameter('sysparm_approver');
        var recordID = this.getParameter('sysparm_sys_id');

        var newApproval = new GlideRecord('sysapproval_approver');
        newApproval.initialize();
        newApproval.setValue('state', 'requested');
        newApproval.setValue('approver', approverID);
        newApproval.setValue('sysapproval', recordID);
        newApproval.insert();

		return newApproval.getUniqueValue();
    }

The javasciprt return operator defines what the function i returning, and the newApproval.getUniqueValue() returns a string value of the sys_id. You want to make sure you're returning a string(able) value, not an object.

 

So the following wouldn't work, as newApproval isa GlideObject

createApprover: function() {

        var approverID = this.getParameter('sysparm_approver');
        var recordID = this.getParameter('sysparm_sys_id');

        var newApproval = new GlideRecord('sysapproval_approver');
        newApproval.initialize();
        newApproval.setValue('state', 'requested');
        newApproval.setValue('approver', approverID);
        newApproval.setValue('sysapproval', recordID);
        newApproval.insert();

		return newApproval
    }

 

But this would

createApprover: function() {

        var approverID = this.getParameter('sysparm_approver');
        var recordID = this.getParameter('sysparm_sys_id');

        var newApproval = new GlideRecord('sysapproval_approver');
        newApproval.initialize();
        newApproval.setValue('state', 'requested');
        newApproval.setValue('approver', approverID);
        newApproval.setValue('sysapproval', recordID);
        newApproval.insert();

		return true
    }

Hi @Kieran Anson 

Your explanation was extremely helpful.  Thank you.

I also would like includes "Item number" and "Opened By in the return message.

 

    var approverID = this.getParameter('sysparm_approver');
        var recordID = this.getParameter('sysparm_sys_id');

        var newApproval = new GlideRecord('sysapproval_approver');
        newApproval.initialize();
        newApproval.setValue('state', 'requested');
        newApproval.setValue('approver', approverID);
        newApproval.setValue('sysapproval', recordID);
        newApproval.insert();

		//var values = newApproval.getUniqueValue();
		var approverName = newApproval.approver.name;
		var number = newApproval.approvalfor.number; /// Don't work
		var openedBy = ??????
		var values = "Requested Number: "+number+ ' Approver Name '+ approverName + ' Opened By: 'openedBy;

		return values;

I was able to obtains the request number and opened by using the following code:

var number = newApproval.sysapproval.number;
var openedBy = newApproval.sysapproval.getBaseTableName('opened_by');
Thank you all.

Rather than trying to return it in a string like that, especially when you have multiple values, you can use JSON notation

   var approverID = this.getParameter('sysparm_approver');
        var recordID = this.getParameter('sysparm_sys_id');

        var newApproval = new GlideRecord('sysapproval_approver');
        newApproval.initialize();
        newApproval.setValue('state', 'requested');
        newApproval.setValue('approver', approverID);
        newApproval.setValue('sysapproval', recordID);
        newApproval.insert();

		//var values = newApproval.getUniqueValue();
		var approverName = newApproval.approver.name;
		var number = newApproval.approvalfor.number; /// Don't work
		var openedBy = ??????
		var values = "Requested Number: "+number+ ' Approver Name '+ approverName + ' Opened By: 'openedBy;

		return JSON.stringify({
			'approverName' : newApproval.getDisplayValue('approver'),
			'approverSysId' : newApproval.getValue('approver'),
			'approvingRecordDisplayValue' : newApproval.getDisplayValue('document_id')
		})