List collector value not removed from script

Ruchi Kumari1
Tera Expert

Hi,

I am trying to remove values from list collector through onsubmit client script.
I have a script include which returns what values are to be removed from the list collector on submit. I tried below script but no luck. I am getting the expected alerts. What am i missing ?

var mrvsValues = g_form.getValue('list_the_existing_machine_name');
    var mrvsSelectedUsers = [];
    var rows = JSON.parse(mrvsValues);
    for (var i = 0; i < rows.length; i++) {
        var val = rows[i].req_for;
        mrvsSelectedUsers.push(val.toString());
    }

    var userListCollector = g_form.getValue('requested_for');

    var listArr = userListCollector.split(',');
    alert('listArr  ' + listArr); //Getting expected alert

    var gaGetUserDetails = new GlideAjax('GetUserDetails');
    gaGetUserDetails.addParam('sysparm_name', 'getUserDetails');
    gaGetUserDetails.addParam('sysparm_listusers', listArr);
    gaGetUserDetails.addParam('sysparm_mrvsusers', mrvsSelectedUsers);
    gaGetUserDetails.getXMLAnswer(parseAnswer);

    function parseAnswer(response) {
         //returned value should be array of sysids of user to be removed from list
        var answer = response;
        var test = answer.split(',');
        alert('anser1 = ' + test); ///getting expected alert
        //if (answer.length > 0) {
        for (var a = 0; a < test.length; a++) {
            var valueToRemove = test[a];
            alert('Value to remove ' + valueToRemove);
            var index = listArr.indexOf(valueToRemove);
            alert('index ' + index); //getting expected index value
            if (index !== -1) { 
                listArr.splice(index, 1); //remove value
            }
        }
        alert('listArr100  ' + listArr); //getting expected value
        g_form.setValue('requested_for', listArr.join(','));
        return false; //This is false only for testing purpose.

 

There is no change in the selected values before / after clicking submit.

12 REPLIES 12

@Ruchi Kumari1 

Hope you are doing good.

Did my reply answer your question?

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

Hi @Ankur Bawiskar , I am trying the synchronous glideajax using getxmlwait but still it is not working. As per business requirement, catalog is not required on portal hence synchronous call would work in this case but the code is not working.
Below is the code that i am trying to update list collector before submit:

function onSubmit() {
var mrvsValues = g_form.getValue('list_the_existing_machine_name');
    var mrvsSelectedUsers = [];
    var rows = JSON.parse(mrvsValues);
    for (var i = 0; i < rows.length; i++) {
        var val = rows[i].req_for;
        mrvsSelectedUsers.push(val.toString());
    }
    var userListCollector = g_form.getValue('requested_for');
    var listArr = userListCollector.split(',');

var gaGetUserDetails = new GlideAjax('GetUserDetails');
gaGetUserDetails.addParam('sysparm_name', 'getUserDetails');
gaGetUserDetails.addParam('sysparm_listusers', listArr);
gaGetUserDetails.addParam('sysparm_mrvsusers', mrvsSelectedUsers);
gaGetUserDetails.getXMLWait();

answer = gaGetUserDetails.getAnswer();
var test = answer.split(',');
for (var a = 0; a < test.length; a++) {
    var valueToRemove = test[a];
    alert('Value to remove ' + valueToRemove); //expected alert is coming
    var index = listArr.indexOf(valueToRemove);
    if (index !== -1) { //valueToRemove was found in array
       listArr.splice(index, 1); //remove array member from this array
        }
    }
alert(listArr); //expected alert is coming.
    g_form.setValue('requested_for', listArr.join(','));
}



Ruchi Kumari1
Tera Expert

I tried using xmlwait as well but No luck !

var mrvsValues = g_form.getValue('list_the_existing_machine_name');
    var mrvsSelectedUsers = [];
    var rows = JSON.parse(mrvsValues);
    for (var i = 0; i < rows.length; i++) {
        var val = rows[i].req_for;
        mrvsSelectedUsers.push(val.toString());
    }
    var userListCollector = g_form.getValue('requested_for');
    var listArr = userListCollector.split(',');

var gaGetUserDetails = new GlideAjax('GetUserDetails');
    gaGetUserDetails.addParam('sysparm_name', 'getUserDetails');
    gaGetUserDetails.addParam('sysparm_listusers', listArr);
    gaGetUserDetails.addParam('sysparm_mrvsusers', mrvsSelectedUsers);
    gaGetUserDetails.getXMLWait();

answer = gaGetUserDetails.getAnswer();
    var test = answer.split(',');
    //if (answer.length > 0) {
    for (var a = 0; a < test.length; a++) {
        var valueToRemove = test[a];
        alert('Value to remove ' + valueToRemove);
        var index = listArr.indexOf(valueToRemove);
        alert('index ' + index);
        if (index !== -1) { //valueToRemove was found in array
            listArr.splice(index, 1); //remove array member from this array
        }
    }
g_form.setValue('requested_for', listArr.join(','));