
- Post History
- Subscribe to RSS Feed
- Mark as New
- Mark as Read
- Bookmark
- Subscribe
- Printer Friendly Page
- Report Inappropriate Content
06-29-2025 09:06 AM - edited 06-29-2025 09:09 AM
Take a look at this OOTB code:
var AgileAjaxProcessor = Class.create();
AgileAjaxProcessor.prototype = Object.extendsObject(AbstractAjaxProcessor, {
updateStoryDefect: function() {
var result = this.newItem("result");
var storySysId = this.getParameter('sysparm_story_sys_id');
var defectSysId = this.getParameter('sysparm_defect_sys_id');
var gr;
try {
if (!storySysId)
throw new Error('sysparm_story_sys_id is missing');
if (!defectSysId)
throw new Error('sysparm_defect_sys_id is missing');
gr = new GlideRecordSecure('rm_story');
if (gr.get(storySysId)) {
gr.defect = defectSysId;
if (gr.update()) {
result.setAttribute('status', 'success');
result.setAttribute('message', 'story.defect has been updated successfully');
} else {
throw new Error('unable to update story ' + storySysId);
}
} else
throw new Error('story record ' + storySysId + ' does not exist');
} catch (err) {
result.setAttribute('status', 'failed');
result.setAttribute('message', err.message);
}
},
type: 'AgileAjaxProcessor'
});
A simple script include that accepts a valid Story sys_id, fetches the record and assigns a valid defect record in the Defect reference field.
But where is the return statement?
The script include doesn't return a value!
THE KEY lies in this line of code:
var result = this.newItem("result");
When the client does:
var ga = new GlideAjax('AgileAjaxProcessor');
ga.addParam('sysparm_name', 'updateStoryDefect');
...
ga.getXML(function(response) {
var result = response.responseXML.documentElement;
var status = result.getAttribute("status");
var msg = result.getAttribute("message");
});
The responseXML is automatically populated from the items you created on the server using:
this.newItem("result").setAttribute("...");
This is the designed behavior of AbstractAjaxProcessor, and you don’t need to manually return anything unless you’re using getAnswer()/getXMLAnswer().
When You Do Need a Return Statement
-
If you're using getXMLAnswer(), you must explicitly return inside the server method, which becomes the "answer".
// return <string>
return "Success!";
To summarize:
If you're building a full XML tree using this.NewItem(), No 'return' is needed — the framework handles it. Think of this.NewItem(), as writing into a reply envelope that ServiceNow automatically seals and sends to the client for you.
Regards,
Anish Reghu
Hit Like if this helps you!