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')
		})