The CreatorCon Call for Content is officially open! Get started here.

How to add Choice values

Sironi
Kilo Sage

Hi All,

Please suggest me how to add choice values from array.

find_real_file.png

Array CHOICEVALUES[value,label]

[chat,Chat,voice_call,Voice Call,walk-in,Walk In,email_fire,Email Fire]

 

Issue : Now How to add choices from Workspace client script using with for-loop

function onClick(g_form) {

    var fields = [{
        type: 'choice',
        name: 'invoice_type',
        label: getMessage('invoice type'),
        value: getMessage(' -- Select -- '),
        choices: [{
            displayValue: '',
            value: ''
        }],
        mandatory: true
    }, {
        type: 'string',
        label: getMessage('Invoicer'),
        value: g_form.getDisplayValue('consumer'),
        readonly: true,
    }];

    g_modal.showFields({
        title: "Product for Invoice",
        fields: fields,
        size: 'lg'
    }).then(function(fieldValues) {
        g_form.setValue('short_description', fieldValues.updatedFields[1].value);
        //<--------------------------------------------------------------------------------------->//	
        var ga = new GlideAjax('CDAInvoiceProcessor');
        ga.addParam('sysparm_name', 'getInvoiceTypes');
        ga.getXML(populateChoiceeField);

        function populateChoiceeField(response) {
            var msg = response.responseXML.documentElement.getAttribute('answer').toString();
            if (msg != '') {
                msg = msg.split(',');
                if (msg.length > 0) {
                    g_form.clearOptions(fieldValues.updatedFields[0].name);
                    g_form.addOption(fieldValues.updatedFields[0].name, '', '-- None --');
                    for (var i = 0; i < msg.length; i = i + 2) {
						fieldValues.updatedFields[0].value= msg[i];
						fieldValues.updatedFields[0].displayValue= msg[i+1];
                       
                    }
                }
            }
        }

        //<---------------------------------------------------------------------------------------->//	


       
    });
}

 

1 ACCEPTED SOLUTION

Hi,

if you wish to add None then do this

Script Include:

var arr = [];

// to add None
arr.push({
	"value":"",
	"displayValue":"-- None --"
});

var DWN = new GlideRecord("u_customer");
DWN.addQuery("u_active", true);
DWN.addQuery("u_name", "Customer Specific Type");
DWN.addQuery('u_customer',' b70c0f830f37330013a831ef68767e33');
DWN.query();
if (DWN.next()) {
	PARMS = DWN.u_parms.split(',');
	gs.info("PARMS " + PARMS.length + "--" + PARMS);
	for (var i = 0; i < PARMS.length; i++) {
		var obj = {};
		var choice = new GlideRecord('sys_choice');
		choice.addQuery('name', 'incident');
		choice.addQuery('language', 'en');
		choice.addQuery('element', 'contact_type');
		choice.addQuery('inactive', false);
		choice.addQuery('value', PARMS[i]);
		choice.query();
		if (choice.next()) {
			obj["value"] = choice.value.toString();
			obj["displayValue"] = choice.label.toString();
			arr.push(obj);
		}
	}
}

var result = {};
result["choices"] = arr;

return JSON.stringify(result);
},

Workspace client script:

function onClick(g_form) {

	var fields = [];
	fields.push({
		type: 'string',
		label: getMessage('Invoicer'),
		value: g_form.getDisplayValue('consumer'),
		readonly: true,
	});

	var ga = new GlideAjax('CDAInvoiceProcessor');
	ga.addParam('sysparm_name', 'getInvoiceTypes');
	ga.getXML(populateChoiceeField);
	ga.getXMLAnswer(populateChoiceeField);

	function populateChoiceeField(response) {
		var msg = response;
		var answer = JSON.parse(msg);
		fields.push({
			type: 'choice',
			name: 'invoice_type',
			label: getMessage('invoice type'),
			choices: answer.choices,
			mandatory: true
		});

		g_modal.showFields({
			title: "Product for Invoice",
			fields: fields,
			size: 'lg'
		}).then(function(fieldValues) {
			g_form.setValue('short_description', fieldValues.updatedFields[1].value);
			//<--------------------------------------------------------------------------------------->//	


			//<---------------------------------------------------------------------------------------->//	

		});
	}
}

Regards
Ankur

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

View solution in original post

20 REPLIES 20

i have applied your script in Onchange client script first to check what values it returning , It is Returning "Null"  , but not sure what was the error.

find_real_file.png

declared obj{}, result{} in in global , updated script-include like this. 

if (choice.next()) {
obj.value = choice.name.toString();
obj.displayValue = choice.label.toString();
arr.push(obj);
}
}
gs.info("choice values in array" + arr);

result["choices"] = arr;
return JSON.stringify(result);

 

but same value repairing in choice field {"choices":[{"value":"u_crd","displayValue":"CRD"},{"value":"u_crd","displayValue":"CRD"}]}

 

find_real_file.png

 

it might be issue?

fields.push({
type: 'choice',
name: 'invoice_type',
label: getMessage('invoice type'),
value: (answer.choices && answer.choices.length > 0) ? answer.choices[0].value : '',
choices: answer.choices,
mandatory: true
});

Okay populating the choice dynamically is working

now thing to check why it's repeating.

declare the obj within the for loop

var arr = [];
var DWN = new GlideRecord("u_customer");
DWN.addQuery("u_active", true);
DWN.addQuery("u_name", "Customer Specific Type");
DWN.addQuery('u_customer',' b70c0f830f37330013a831ef68767e33');
DWN.query();
if (DWN.next()) {
    PARMS = DWN.u_parms.split(',');
    gs.info("PARMS " + PARMS.length + "--" + PARMS);
    for (var i = 0; i < PARMS.length; i++) {
        var obj = {};
        var choice = new GlideRecord('sys_choice');
        choice.addQuery('name', 'incident');
        choice.addQuery('language', 'en');
        choice.addQuery('element', 'contact_type');
        choice.addQuery('inactive', false);
        choice.addQuery('value', PARMS[i]);
        choice.query();
        if (choice.next()) {
            obj["value"] = choice.value.toString();
            obj["displayValue"] = choice.label.toString();
            arr.push(obj);
        }
    }
}

var result = {};
result["choices"] = arr;

return JSON.stringify(result);
},

Regards
Ankur

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

Hi,

try to remove that json key

just keep this and check

fields.push({
type: 'choice',
name: 'invoice_type',
label: getMessage('invoice type'),
choices: answer.choices,
mandatory: true
});

Regards
Ankur

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

after adding obj{} inside For-look now two values getting populated 

fields.push({
type: 'choice',
name: 'invoice_type',
label: getMessage('invoice type'),
choices: answer.choices,
mandatory: true
});

I request you kindly update your client script and script-include with your latest changes in thread , i will mark it. 

 

Can't we show "-- None --" ? and user must select value

find_real_file.png