Mandate the field based on the particular keyword in the List type fiedl

Nagesh5
Tera Contributor

Hello Community,

 

we have list collector variable on the catalog item and where user can select multiple values and We are looking for the way if particular keyword identified then another variable need to make mandatory. We have below code and it's not working can anyone help where we are missing the logic?

 

Client Script :--------------------

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

    var ga = new GlideAjax("checkUser");
    ga.addParam("sysparm_name""getUsers");
    ga.addParam("sysparm_value", g_form.getValue("user_check"));
    ga.getXML(userCheck);

    function userCheck(response) {

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

        //var ouput = JSON.parse(answer);

        if(answer.includes("albert")){

            g_form.setMandatory("Requester",true);
        }

    }
}
 
Script Include ------------------
 
var checkUser = Class.create();
checkUser.prototype = Object.extendsObject(AbstractAjaxProcessor, {

    getUsers: function() {

        var checkValues = this.getParameter("sysparm_value");
        //var arr = checkValues(",");
        //for (var i = 0; i < arr.length; i++) {
            var croles = new GlideRecord('sys_user');
            croles.addQuery('sys_id', checkValues);
            croles.query();
            var arrRoles = [];
            if (croles.next()) {

                gs.info("*******Users" + croles.getDisplayValue());
                //Fill array
                //var arr =croles.split(",");
                arrRoles.push(croles.getDisplayValue().toString());

            //}
        }
        return arrRoles.toString();

    },

    type: 'checkUser'
});
 
Thanks,
Nagesh
14 REPLIES 14

Sid_Takali
Kilo Patron
Kilo Patron

Hi @Nagesh5 Try below code

Client Script 

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

    var ga = new GlideAjax('checkUser');
    ga.addParam('sysparm_name', 'getUsers');
    ga.addParam('sysparm_value', newValue); // newValue is the selected value(s)
    ga.getXMLAnswer(userCheck);

    function userCheck(answer) {
        if (answer.includes("albert")) {
            g_form.setMandatory('Requester', true);
        } else {
            g_form.setMandatory('Requester', false);
        }
    }
}

Script Include 

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

    getUsers: function() {
        var checkValues = this.getParameter('sysparm_value');
        var valuesArray = checkValues.split(',');
        var arrRoles = [];

        for (var i = 0; i < valuesArray.length; i++) {
            var croles = new GlideRecord('sys_user');
            croles.addQuery('sys_id', valuesArray[i].trim());
            croles.query();
            if (croles.next()) {
                arrRoles.push(croles.getDisplayValue().toString());
            }
        }
        
        return arrRoles.join(',');
    },

    type: 'checkUser'
});

Thanks for the response and it's not working

Community Alums
Not applicable

Hi @Nagesh5 ,

I tried your problem in my PDI please check script below 

Client Script 

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

    //Type appropriate comment here, and begin script below
	// var user = g_form.getValue("additional_assignee_list");
    var ga = new GlideAjax("checkUser");
    ga.addParam("sysparm_name", "getUsers");
    ga.addParam("sysparm_value", newValue);
	alert("HERE IN CS = " + newValue);
    ga.getXML(userCheck);

    function userCheck(response) {
        var answer = response.responseXML.documentElement.getAttribute("answer");
        //var ouput = JSON.parse(answer);
        if (answer.includes("albert")) {
            g_form.setMandatory("Requester", true);
        }
    }
}

 

Script Include

getUsers: function() {
		gs.log("Hree in script inc");
        var checkValues = this.getParameter("sysparm_value");
        var arr = checkValues.split(",");
		var arrRoles = [];
		gs.log("arrarr = " + arr);
		gs.log("CHECK USER = " + checkValues);
        for (var i = 0; i < arr.length; i++) {
			gs.log("INSIDE FOR = " + arr[i]);
            var croles = new GlideRecord('sys_user');
            croles.addQuery('sys_id',  arr[i]);
            croles.query();
            
            if (croles.next()) {
                gs.log("*******Users" + croles.getDisplayValue());
                arrRoles.push(croles.getDisplayValue().toString());
            }
        }
		gs.log("CHeck arrRoles = "+ arrRoles);
        return arrRoles.toString();
    },

 

Result 

SarthakKashyap_0-1723787317615.png

 

 

Please mark my answer correct and helpful if this works for you

Thanks and Regards 

Sarthak

Perfect!!!! ,But if i remove that value from list collector still it's showing mandatory that field and also can we add two more if conditions two check two more keywords from answer variable?