Client Script and Script Include Issue

Wasdom_Kung
Tera Guru

Hello,
I am currently using a client script, which calls a script include to pull information from a RITM and populate it into a multi-line text field on a record producer but keep getting an error.

I've referenced it with one I created which pulled from a RITM and populated a text field on a catalog item but can't see where it's going wrong - can anyone point me in the right direction? 

 

Thanks in advance.

Client script:

function onChange(control, oldValue, newValue, isLoading) {
    if (isLoading || newValue == '') {
        return;
    }

    var gajax = new GlideAjax('LOTH_GetRequestedItemDetails');
    gajax.addParam('sysparm_name', 'isRITM');
    gajax.addParam('sysparm_ritm', newValue);
    gajax.getXML(ajaxResponse);

    function ajaxResponse(response) {
        var answer = JSON.parse(response.responseXML.documentElement.getAttribute("answer"));
        var disputeRequest = 'Request: ' + answer.request;
        var disputerequestedFor = 'Requested for: ' + answer.requestedFor;
		var disputecontact = 'Contact number: ' + answer.contact;
		var disputelocation = 'Location : ' + answer.location;

        g_form.setValue('u_requested_item_details', + disputeRequest + disputerequestedFor + disputecontact + disputelocation);
	}
}

 

 


Script include:

 

 

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

    isRITM: function() {
        var ritm = this.getParameter('sysparm_ritm');
        var retRes = {};
        //get user record:
        var gr = new GlideRecord('sc_req_item');
        gr.addQuery('sys_id', ritm);
        gr.query();
        if (gr.next()) {
            retRes.request = gr.request + '\n';
			retRes.requestedFor = gr.requestedFor + '\n';
			retRes.contact = gr.variables.u_phone_contact + '\n';
			retRes.location = gr.variables.u.location + '\n';
        }
        return new JSON().encode(retRes);
    },
    type: 'LOTH_GetRequestedItemDetails'
});

 

1 ACCEPTED SOLUTION

Wasdom_Kung
Tera Guru

This was fixed with the following:

Client Script:

function onChange(control, oldValue, newValue, isLoading) {
    if (isLoading || newValue == '') {
        return;
    }
    var gajax = new GlideAjax('LOTH_GetRequestedItemDetails');
    gajax.addParam('sysparm_name', 'isRITM');
    gajax.addParam('sysparm_ritm', newValue);
    gajax.getXMLAnswer(ajaxResponse);
}

function ajaxResponse(response) {
    var answer = JSON.parse(response);
    var disputeRequest = 'Request: ' + answer.request;
    var disputeItem = 'Item: ' + answer.item;
    var disputeRequestedFor = 'Requested for: ' + answer.requested_for;
    var disputeRequestedForID = 'Requested for user ID: ' + answer.requestedForID;
    var disputeContact = 'Contact number: ' + answer.contact;
    var disputeLocation = 'Location: ' + answer.location;
	//var disputeResolver = 'Resolving team: ' + answer.resolver;
	//var disputeClosingComments = "Closing comments: " + answer.comments;
    g_form.setValue('u_requested_item_details', disputeRequest + '\n' + disputeItem + '\n' + disputeRequestedFor + '\n' + disputeRequestedForID + '\n' + disputeContact + '\n' + disputeLocation); //+ '\n' + disputeResolver + '\n' + disputeClosingComments);
}


Script Include:

var LOTH_GetRequestedItemDetails = Class.create();
LOTH_GetRequestedItemDetails.prototype = Object.extendsObject(AbstractAjaxProcessor, {
    isRITM: function() {
        var ritm = this.getParameter('sysparm_ritm');
        var retRes = {};
        //get user record:
        var gr = new GlideRecord('sc_req_item');
        if (!gr.get(ritm)) {
			return;
        } else {
            retRes.request = gr.request.getDisplayValue();
            retRes.item = gr.cat_item.getDisplayValue();
            retRes.requested_for = gr.request.requested_for.getDisplayValue();
            retRes.requestedForID = gr.request.requested_for.user_name.getDisplayValue();
            retRes.contact = gr.variables.u_phone_contact.getDisplayValue();
            retRes.location = gr.variables.location.getDisplayValue();
			//retRes.resolver = gr.sc_task.assignment_group.getDisplayValue();
			//retRes.comments = gr.comments;
        }
        return JSON.stringify(retRes);
    },
});

View solution in original post

6 REPLIES 6

Bert_c1
Kilo Patron

Hi,

 

(you have mis-identified what is the script include and client script), but in the script include, try:

return JSON.stringify(retRes);

 

And in the Client script, use

gajax.getXMLAnswer(ajaxResponse);

 

This is what I see in existing client scripts and script includes.  You can add debug statements in both to see what is going on. Add 

gs.info("LOTH_GetRequestedItemDetails: retRes = " + retRes);

 just before the return in the script include. The check script log statements to see.

Ah yes, I've corrected that now, thanks!

I've made the following amendments, unsure where the logs are for that output, but I've checked the console and it returns a glide ajax error:

Client script:

function onChange(control, oldValue, newValue, isLoading) {
    if (isLoading || newValue == '') {
        return;
    }
                       
    var gajax = new GlideAjax('LOTH_GetRequestedItemDetails');
    gajax.addParam('sysparm_name', 'isRITM');
    gajax.addParam('sysparm_ritm', newValue);
    //gajax.getXML(ajaxResponse);
	gajax.getXMLAnswer(ajaxResponse);
	
    function ajaxResponse(response) {
        var answer = JSON.parse(response.responseXML.documentElement.getAttribute("answer"));
        var disputeRequest = 'Request: ' + answer.request;
        var disputeRequestedFor = 'Requested for: ' + answer.requestedFor;
		var disputeContact = 'Contact number: ' + answer.contact;
		var disputeLocation = 'Location : ' + answer.location;

        g_form.setValue('u_requested_item_details', + disputeRequest + disputeRequestedFor + disputeContact + disputeLocation);
	}
}

 

Script include:

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

    isRITM: function() {
        var ritm = this.getParameter('sysparm_ritm');
        var retRes = {};
        //get user record:
        var gr = new GlideRecord('sc_req_item');
        gr.addQuery('sys_id', ritm);
        gr.query();
        if (gr.next()) {
            retRes.request = gr.request + '\n';
			retRes.requestedFor = gr.requestedFor + '\n';
			retRes.contact = gr.variables.u_phone_contact + '\n';
			retRes.location = gr.variables.u.location + '\n';
        }
        //return new JSON().encode(retRes);
		gs.info("LOTH_GetRequestedItemDetails: retRes = " + retRes);
		return JSON.stringify(retRes);
    },
    type: 'LOTH_GetRequestedItemDetails'
});

Hi,

You can check the logs in "Script Log Statements" , also in your client script you can simply put an alert statement to see what values are being returned : alert("Answer is"+ answer + answer.request);

 

Not having any luck with the script log statements, nothing appears after changing the value on the catalog item. The alert doesn't show either, presumably because the javascript console error box appears at the same time as well

Edit: Part of the issue may be my information retrieval, some of them are actually on the request table not the item table so will review and amend these and test again.