Show info message on the catalog form based on the value on the field

sriramsaishasha
Tera Contributor

Hi All,

We have requirement to show an info message on the catalog form when user selects the value.

On catalog form we have a text field named as incidentnumber. When user enters the incident number it should search the incident table and check if the number is vaild or not. If the number is valid and available in incident table we need to throw a message like number is valid and if number is not in the table we need to throw a message like number is invalid.
I have tried by creating the catalog client script and script include but when I tried to test with the valid incident number it is throwing invalid number message.

Can anyone please help in the script where I am doing wrong
Please find the script below

Catalog client script:
function onChange(control, oldValue, newValue, isLoading) {
    if (isLoading || newValue == '') {
        return;
    }
    var incidentNumber = g_form.getValue('incident_number');
    var ga = new GlideAjax('ValidateIncident');
    ga.addParam('sysparm_incident_number', incidentNumber);
    ga.addParam('sysparm_name', 'validationIn');

    ga.getXMLAnswer(HelloWorldParse);
   function HelloWorldParse(answer) {
        var result = JSON.parse(answer);
         answer = response.responseXML.documentElement.getAttribute("answer");

        if (answer == result) {
            g_form.addInfoMessage("Incident Number is valid.");
        } else {
            g_form.addErrorMessage("Invalid Incident Number.");
        }
    }
}
Script Include:

var ValidateIncident = Class.create();
ValidateIncident.prototype = {
    validationIn: function() {
 var incidentNumber = this.getParameter('sysparm_incident_number');
        var gr = new GlideRecord('incident');
        gr.addQuery('active', true);
        gr.addQuery('number', incidentNumber);
        gr.query();

        while(gr.next()) {
            var results = {
                "number": gr.getValue('number'),
                "date": gr.getValue('sys_created_on')
            };

            return JSON.stringify(results);
         }
    },
    type: 'ValidateIncident'
};
 

 



6 REPLIES 6

_Gaurav
Kilo Sage

Hi @sriramsaishasha 
You can try the below-mentioned code:
Client script (onChange of Incident Number field)

function onChange(control, oldValue, newValue, isLoading, isTemplate) {

if (isLoading || newValue === '') {

    return;

}

var ga = new GlideAjax('global.ScriptInclude'); //replace the SI name with your SI name

    ga.addParam('sysparm_name', 'validationIn');

    ga.addParam('sysparm_incident_number', newValue);

    ga.getXML(echoCallBack); //use getXML instead of getXMLAnswer

    function echoCallBack(response) {

        var answer = response.responseXML.documentElement.getAttribute('answer');

        alert(answer);

    }

}
 
Script Include:
validationIn: function() {

var incidentNumber = this.getParameter('sysparm_incident_number');

    var gr = new GlideRecord('incident');

    gr.addQuery('active', true);

    gr.addQuery('number', incidentNumber);

    gr.query();

    if(gr.next()){

        return 'valid'; //This will retunr the VALID if the incident number is already there

    }else

    return 'invalid';

},

Please make the changes accordingly..

Please mark this as a solution and helpful if this resolves your query.
Thanks!

 

 

Hi @sriramsaishasha Please mark the reply as solution and helpful if this resolves your query.
Thanks!

Rohit  Singh
Mega Sage

Hi @sriramsaishasha 

 

You code is not correct. You don't need to use JSON object in script include just return true. Since you don't want any multiple attributes of an incident record. And in client script you don't Have to use "response.responseXML.documentElement.getAttribute" since you are use getXMLAnswer.

 

Catalog client script:
function onChange(control, oldValue, newValue, isLoading) {
    if (isLoading || newValue == '') {
        return;
    }
    var incidentNumber = g_form.getValue('incident_number');
    var ga = new GlideAjax('ValidateIncident');
    ga.addParam('sysparm_incident_number', incidentNumber);
    ga.addParam('sysparm_name', 'validationIn');

    ga.getXMLAnswer(HelloWorldParse);
   function HelloWorldParse(answer) {
        var result = answer;     //
        g_form.addInfoMessage("Response from Script Include" + answer);    // To debug later you can comment
        if (answer == true) {
            g_form.addInfoMessage("Incident Number is valid.");
        } else {
            g_form.addErrorMessage("Invalid Incident Number.");
        }
    }
}
Script Include:

var ValidateIncident = Class.create();
ValidateIncident.prototype = {
    validationIn: function() {
 var incidentNumber = this.getParameter('sysparm_incident_number');
        var gr = new GlideRecord('incident');
        gr.addQuery('active', true);
        gr.addQuery('number', incidentNumber);
        gr.query();

        while(gr.next()) {
            return true;
            };
         }
    },
    type: 'ValidateIncident'
};

 

 

If my response helped, please mark it helpful and accept the solution so that it benefits future readers.

 

Regards,
Rohit

 

Hi @sriramsaishasha ,

 

Did you tried my code mentioned above. 

 

If my response helped, please mark it helpful and accept the solution so that it benefits future readers.

 

Regards,
Rohit