Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

How to add array elements into a selectbox as options?

simran3
Tera Contributor

I have an onChange client script that collects an array of values (groups) that the user selected is in. How can I add these values in a select box as options? 

find_real_file.png

I want those values in the "Existing HLA Access in Group(s):" field to be options in remove from group. For example: "Domain RTR Admins", "Domain CyberArk Users", and "Domain SMS Users-WAN" as options in the "Remove from Group" Select Box. The text in that field will change whenever the requested for is changed, so I need to create a functionality that will populate the selectbox options with that.

Here is the client script to populate the first text field:

function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
var ga = new GlideAjax('getHLAGroups');
ga.addParam('sysparm_name', 'groupHLA');
ga.addParam('sysparm_userSelect', g_form.getValue('u_user_hla'));
ga.getXML(updateGroup);

}
function updateGroup(response) {
var answer = response.responseXML.documentElement.getAttribute("answer");
// alert('Answer is: '+answer);
answer = answer.slice(0, -1);
var inAnswer = answer.split(';');
var outData = '';
for (var i=0; i < inAnswer.length; i++) {
outData = outData+'\n'+inAnswer[i].toString();
}
g_form.setValue('u_group_hla', outData);
}

 

I tried this: 

myArray = answer.split(",");
var a = myArray[0];
alert(a);
g_form.addOption('remove_from_group', 'myArray[0]','myArray');

 

but it keeps adding "MyArray" as the only option in the select box.

1 ACCEPTED SOLUTION

Mike Patel
Tera Sage

try below

function onChange(control, oldValue, newValue, isLoading) {
    if (isLoading || newValue == '') {
        return;
    }
    var ga = new GlideAjax('getHLAGroups');
    ga.addParam('sysparm_name', 'groupHLA');
    ga.addParam('sysparm_userSelect', g_form.getValue('u_user_hla'));
    ga.getXML(updateGroup);

}

function updateGroup(response) {
    var answer = response.responseXML.documentElement.getAttribute("answer");
    // alert('Answer is: '+answer);
    answer = answer.slice(0, -1);
    var inAnswer = answer.split(';');
    var outData = '';
    for (var i = 0; i < inAnswer.length; i++) {
        outData = outData + '\n' + inAnswer[i].toString();
        g_form.addOption('u_group_hla', inAnswer[i].toString(), inAnswer[i].toString());
    }
}

View solution in original post

12 REPLIES 12

Mike Patel
Tera Sage

try below

function onChange(control, oldValue, newValue, isLoading) {
    if (isLoading || newValue == '') {
        return;
    }
    var ga = new GlideAjax('getHLAGroups');
    ga.addParam('sysparm_name', 'groupHLA');
    ga.addParam('sysparm_userSelect', g_form.getValue('u_user_hla'));
    ga.getXML(updateGroup);

}

function updateGroup(response) {
    var answer = response.responseXML.documentElement.getAttribute("answer");
    // alert('Answer is: '+answer);
    answer = answer.slice(0, -1);
    var inAnswer = answer.split(';');
    var outData = '';
    for (var i = 0; i < inAnswer.length; i++) {
        outData = outData + '\n' + inAnswer[i].toString();
        g_form.addOption('u_group_hla', inAnswer[i].toString(), inAnswer[i].toString());
    }
}

That works! Thanks, but how can I make it so that it changes as the other fields change? It still has the same options even when the value in the text field changes.

find_real_file.png

try below

function onChange(control, oldValue, newValue, isLoading) {
    if (isLoading || newValue == '') {
        return;
    }
    var ga = new GlideAjax('getHLAGroups');
    ga.addParam('sysparm_name', 'groupHLA');
    ga.addParam('sysparm_userSelect', g_form.getValue('u_user_hla'));
    ga.getXML(updateGroup);

}

function updateGroup(response) {
    var answer = response.responseXML.documentElement.getAttribute("answer");
    // alert('Answer is: '+answer);
    answer = answer.slice(0, -1);
    var inAnswer = answer.split(';');
    var outData = '';
    g_form.clearOptions('u_group_hla');
    for (var i = 0; i < inAnswer.length; i++) {
        outData = outData + '\n' + inAnswer[i].toString();
        g_form.addOption('u_group_hla', inAnswer[i].toString(), inAnswer[i].toString());
    }
}

Community Alums
Not applicable

Hi @Mike Patel ,

 

I need your help, I have similar king of request.

Two fields on the form:

1) Business Unit - Lookup Select Box

2) Country - Lookup Select Box

 

Script Include - 

country: function() {
var bu = this.getParameter('sysparm_bu');
gs.log("I am Business" + bu);
//var arr = [];
var gr = new GlideAggregate('u_oracle_financial_approvals');
gr.addQuery('u_business_unit', bu);
gr.groupBy('u_country');
gr.query();
gs.log("Tejas" + gr);
var arr = [];
while (gr.next()) {
var obj = gr.getValue('u_country').toString() + "";
arr.push(obj);
gs.log("Result", +arr);
}
var data = JSON.stringify(arr);
gs.log('Final Result', data);
return data;
},

 

OnChange Catalog Client Script - 

var rf = g_form.getDisplayValue('u_business_unit');
alert('Hi, I am ' + rf);
var ga = new GlideAjax('Oracle_Business_Units');
ga.addParam('sysparm_name', 'country');
alert('Hi, I am ' + rf);
ga.addParam('sysparm_bu', rf);
ga.getXMLAnswer(setAnswer);

function setAnswer(response) {
var arr = JSON.parse(response);
//var res = arr.split('#');
g_form.setValue('country', arr);
}

 

With above scripts we are getting below output where we don't need highlighted country names which are coming from reference table, we need those highlighted in blue which is correct output getting added at the end with comma separated values

Tejas12_0-1678106473455.png

 

With the above script I am getting expected output in logs

Tejas12_1-1678106504869.png

but in the variable on the form, I am getting all country values with my expected values with printed in one line as comma separated values, which need to be selectable choices

 

Thanks,

Tejas