Client script and script include help

Alex319
Giga Guru

Hi All, 
I have tried to write a very simple client script and script include which will simply show a message when the priority value changes on an incident record. This is just for testing purposes. 
Could anyone point out what I have got wrong here as the alert always provides an answer of null and the log in the script include is not seen. 
Client script:

Alex319_0-1709292700383.png

 

 

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
    if (isLoading || newValue === '') {
        return;
    }
    
    // Check if the updated field is priority
    
        // Call the server-side function to handle priority update
        var ga = new GlideAjax('IncidentScriptInclude');
        ga.addParam('sysparm_name', 'priorityUpdated');
        ga.getXMLAnswer(priorityanswer);
}

function priorityanswer(answer) {
    alert('Message from server: ' + answer);
}

 

 

 

 

 Script include:

Alex319_1-1709292770805.png

 

 

 

 

var IncidentScriptInclude = Class.create();
IncidentScriptInclude.prototype = {
    initialize: function() {
    },

    // Function to be called when priority field is updated
    priorityUpdated: function() {
        gs.info('Priority field updated on incident record');
        return "success";
    },

    type: 'IncidentScriptInclude'
};

 

 

 

 

Alex319_2-1709292809216.png

Any help would be greatly appreciated
Alex

1 ACCEPTED SOLUTION

Ankur Bawiskar
Tera Patron
Tera Patron

@Alex319 

this will fix it

1) your script include is marked client callable but the syntax it has is for server side i.e. it has initialize function

2) update as this -> remove initialize()

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

    priorityUpdated: function() {
        gs.info('Priority field updated on incident record');
        return "success";
    },

    type: 'IncidentScriptInclude'
});

AnkurBawiskar_0-1709294353790.png

 

If my response helped please mark it correct and close the thread so that it benefits future readers.

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

View solution in original post

11 REPLIES 11

Anurag Tripathi
Mega Patron
Mega Patron

Your script include is not client callable, make it client callable

There is a check box on the script include page

AnuragTripathi_0-1709294198784.png

 

And the Script should look like this

var IncidentScriptInclude = Class.create();
IncidentScriptInclude.prototype = Object.extendsObject(AbstractAjaxProcessor, {
 priorityUpdated: function() {
        gs.info('Priority field updated on incident record');
        return "success";
    },
    type: 'IncidentScriptInclude'
});

 

-Anurag

@Alex319 Was something missing in my response?

-Anurag

Klaus W Kuhl Br
Tera Guru

 

Your client script and script include code seems mostly correct in structure, but there are a few key points and potential issues that might be causing the problem of receiving a null response and not seeing the log from the script include:

 

1. Client Script getXMLAnswer Callback

You are correctly using getXMLAnswer to asynchronously fetch the answer from your Script Include. However, make sure the callback function priorityanswer is defined correctly and is accessible in the scope where getXMLAnswer is called. Your current setup seems correct, but double-check for any typos or scope issues.

 

2. Script Include Access and Security

Ensure your Script Include is set to be accessible from client scripts. In the ServiceNow instance, the Script Include should have the "Client Callable" box checked. If this is not set, the client script cannot invoke methods from the Script Include.

 

3. Logging Visibility

The gs.info logging statement in your Script Include will log messages to the system log. Ensure you are checking the correct log (System Logs > Transactions) in your ServiceNow instance. Also, verify that your user account has the necessary permissions to view these logs.

 

4. Correct Use of GlideAjax Parameters

Your use of GlideAjax and the parameters seems correct. Make sure the name of the Script Include ('IncidentScriptInclude') and the method name ('priorityUpdated') exactly match what's defined in your code, considering case sensitivity.

 

If you've checked all the above and the issue persists, consider adding more debug logs both on the client and server sides to trace the execution flow. You can also use the browser's developer tools to inspect network requests and responses to ensure the GlideAjax call is made correctly and to see the response from the server which might give you more insights into where the issue lies.

Ankur Bawiskar
Tera Patron
Tera Patron

@Alex319 

this will fix it

1) your script include is marked client callable but the syntax it has is for server side i.e. it has initialize function

2) update as this -> remove initialize()

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

    priorityUpdated: function() {
        gs.info('Priority field updated on incident record');
        return "success";
    },

    type: 'IncidentScriptInclude'
});

AnkurBawiskar_0-1709294353790.png

 

If my response helped please mark it correct and close the thread so that it benefits future readers.

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

Thanks Ankur, 
Appreciate the spot there

Alex