List collector value not removed from script
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎07-09-2025 12:24 PM
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.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎07-09-2025 02:11 PM - edited ‎07-09-2025 02:12 PM
The use of asynchronous javascript in an onSubmit client script can be quite tricky. You will actually need to submit the form a second time with your client script.
Here is a KB article on the topic that shows the code you will need - KB0783579
Feel free to follow up if you get stuck.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎07-09-2025 11:48 PM
Hi @Community Alums , Tried this as well but no luck. Here's what i tried :
var actionName = g_form.getActionName();
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.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(',');
//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(','));
g_form.submit(actionName);
//g_form.orderNow();
}
I was getting this error message : "The g_form.submit function has no meaning on a catlog item. Perhaps you mean g_form.addToCart() or g_form.orderNow() instead ". Tried with orderNow() as well but no luck.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎07-09-2025 02:16 PM - edited ‎07-09-2025 02:19 PM
Hi @Ruchi Kumari1,
Try this solution and Ken know if help you
var mrvsValues = g_form.getValue('list_the_existing_machine_name');
var mrvsSelectedUsers = [];
if (mrvsValues) {
var rows = JSON.parse(mrvsValues);
for (var i = 0; i < rows.length; i++) {
var val = rows[i].req_for;
if (val) {
mrvsSelectedUsers.push(val.toString());
}
}
}
var userListCollector = g_form.getValue('requested_for') || '';
var listArr = userListCollector ? userListCollector.split(',') : [];
alert('listArr: ' + listArr);
var gaGetUserDetails = new GlideAjax('GetUserDetails');
gaGetUserDetails.addParam('sysparm_name', 'getUserDetails');
gaGetUserDetails.addParam('sysparm_listusers', listArr.join(','));
gaGetUserDetails.addParam('sysparm_mrvsusers', mrvsSelectedUsers.join(','));
gaGetUserDetails.getXMLAnswer(parseAnswer);
function parseAnswer(response) {
var answer = response;
var usersToRemove = answer.split(',');
alert('Users to remove: ' + usersToRemove);
listArr = listArr.filter(function(userId) {
return usersToRemove.indexOf(userId) === -1;
});
alert('Updated listArr: ' + listArr);
g_form.setValue('requested_for', listArr.join(','));
}
If you’re placing this script inside an onSubmit Client Script, make sure of the following:
- Set Is Async = true in the script configuration. This is required because you’re using GlideAjax, which runs asynchronously.
- Ensure the GlideAjax call includes a valid callback function (which you already have with parseAnswer).
Otherwise, the form may submit before the GlideAjax call finishes, which would prevent your list from being updated in time.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎07-09-2025 07:18 PM
onSubmit client scripts must return true or false synchronously to let the form know if it should proceed.
But GlideAjax is asynchronous — it finishes after the script already returned, so your g_form.setValue() runs too late to affect the submission.
That’s why your values don’t update on submit.
try this scripts:
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading) return;
var listArr = newValue.split(',');
var mrvsValues = g_form.getValue('list_the_existing_machine_name');
var mrvsSelectedUsers = JSON.parse(mrvsValues).map(row => row.req_for.toString());
var ga = new GlideAjax('GetUserDetails');
ga.addParam('sysparm_name', 'getUserDetails');
ga.addParam('sysparm_listusers', listArr);
ga.addParam('sysparm_mrvsusers', mrvsSelectedUsers);
ga.getXMLAnswer(function(answer) {
var toRemove = answer.split(',');
for (var i = 0; i < toRemove.length; i++) {
var index = listArr.indexOf(toRemove[i]);
if (index !== -1) listArr.splice(index, 1);
}
g_form.setValue('requested_for', listArr.join(','));
});
}