Clear list collector selected values when some field is changed in Service Portal AND Desktop

Baggies
Kilo Guru

Clear list collector selected values when some field is changed in Service Portal.

 When I change the value of one variable, a choice list, on a catalog item, I want the values from a list collector all cleared out. I have managed to achieve this with help from this forum. Trouble is, I have had to create  one script for the portal, and one for desktop view. here they are list below. Can I achieve the same results with one script only which will work in Portal  and desktop views? "add_user_to_group" is my list collector name. Many thanks. Mark S.

 

Portal script:

Works in portal
Name:
Clear values on change
Type: onChange
UI Type: Mobile/Portal *** THIS IS IMPORTANT *****

----------------------------------------------------------------------------------------------------------------------------------------------------------

function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
var collectorName = 'add_user_to_group'; //Name of your list collector.
var myListCollector = g_list.get(collectorName);

var selectedOptions = g_form.getValue(collectorName).split(',');

if((selectedOptions != "") && (selectedOptions.length > 0)){

//Remove items

var index = 0;

for (var i = 1, leng = selectedOptions.length+1; i < leng; i++){

myListCollector.removeItem(selectedOptions[selectedOptions.length-i]);

index++;
alert(" ** changed in portal ***");
}
}

}

--------------------------------------------------------------------------------------------------------------

Works in classic view
Name:
Clear values on change
Type: onChange
UI Type: Desktop *** THIS IS IMPORTANT *****


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

//Type appropriate comment here, and begin script below
var listCollectorName = 'add_user_to_group'; //Name of your list collector.

var leftBucket = gel(listCollectorName + '_select_0');
var rightBucket = gel(listCollectorName + '_select_1');

var selectedOptions = rightBucket.options;
var selectedIDs = [];
for(var i = 0; i < selectedOptions.length; i++){

//Check for the item to add here based on sys_id
selectedIDs.push(i);
//var value = selectedOptions[i].value;
//rightBucket.remove(value);
// var lefBucket = gel(listCollectorName + '_select_0');
//leftBucket.add(value);

}

moveSelectedOptions(selectedIDs,rightBucket,leftBucket,'--None--');
sortSelect(leftBucket);
var leftOptions = leftBucket.options;
for(var j = 0; j<leftOptions.length; j++){
var value = leftOptions[j].innerHTML;
if(value == '--None--'){

leftBucket.remove(j);
alert(" ** changed in CLASSIC view ***");

}
}
}

 

1 ACCEPTED SOLUTION

Mike Patel
Tera Sage

Change type to all and use below script to combine it.

function onChange(control, oldValue, newValue, isLoading) {
	if (isLoading || newValue == '') {
		return;
	}
	try{
		var collectorName = 'add_user_to_group'; //Name of your list collector.
		var myListCollector = g_list.get(collectorName);
		var selectedOptions = g_form.getValue(collectorName).split(',');
		if((selectedOptions != "") && (selectedOptions.length > 0)){

			//Remove items
			var index = 0;
			for (var i = 1, leng = selectedOptions.length+1; i < leng; i++){
				myListCollector.removeItem(selectedOptions[selectedOptions.length-i]);
				index++;
				alert(" ** changed in portal ***");
			}
		}
	}
	catch(err){
		//Type appropriate comment here, and begin script below
		var listCollectorName = 'add_user_to_group'; //Name of your list collector.
		var leftBucket = gel(listCollectorName + '_select_0');
		var rightBucket = gel(listCollectorName + '_select_1');
		var selectedOptions = rightBucket.options;
		var selectedIDs = [];
		for(var i = 0; i < selectedOptions.length; i++){
			//Check for the item to add here based on sys_id
			selectedIDs.push(i);
			//var value = selectedOptions[i].value;
			//rightBucket.remove(value);
			// var lefBucket = gel(listCollectorName + '_select_0');
			//leftBucket.add(value);
		}
		moveSelectedOptions(selectedIDs,rightBucket,leftBucket,'--None--');
		sortSelect(leftBucket);
		var leftOptions = leftBucket.options;
		for(var j = 0; j<leftOptions.length; j++){
			var value = leftOptions[j].innerHTML;
			if(value == '--None--'){
				leftBucket.remove(j);
				alert(" ** changed in CLASSIC view ***");

			}
		}
	}
}

View solution in original post

5 REPLIES 5

Mike Patel
Tera Sage

add myListCollector.reset(); where you want on code so it will clear the option.

Mike Patel
Tera Sage

Change type to all and use below script to combine it.

function onChange(control, oldValue, newValue, isLoading) {
	if (isLoading || newValue == '') {
		return;
	}
	try{
		var collectorName = 'add_user_to_group'; //Name of your list collector.
		var myListCollector = g_list.get(collectorName);
		var selectedOptions = g_form.getValue(collectorName).split(',');
		if((selectedOptions != "") && (selectedOptions.length > 0)){

			//Remove items
			var index = 0;
			for (var i = 1, leng = selectedOptions.length+1; i < leng; i++){
				myListCollector.removeItem(selectedOptions[selectedOptions.length-i]);
				index++;
				alert(" ** changed in portal ***");
			}
		}
	}
	catch(err){
		//Type appropriate comment here, and begin script below
		var listCollectorName = 'add_user_to_group'; //Name of your list collector.
		var leftBucket = gel(listCollectorName + '_select_0');
		var rightBucket = gel(listCollectorName + '_select_1');
		var selectedOptions = rightBucket.options;
		var selectedIDs = [];
		for(var i = 0; i < selectedOptions.length; i++){
			//Check for the item to add here based on sys_id
			selectedIDs.push(i);
			//var value = selectedOptions[i].value;
			//rightBucket.remove(value);
			// var lefBucket = gel(listCollectorName + '_select_0');
			//leftBucket.add(value);
		}
		moveSelectedOptions(selectedIDs,rightBucket,leftBucket,'--None--');
		sortSelect(leftBucket);
		var leftOptions = leftBucket.options;
		for(var j = 0; j<leftOptions.length; j++){
			var value = leftOptions[j].innerHTML;
			if(value == '--None--'){
				leftBucket.remove(j);
				alert(" ** changed in CLASSIC view ***");

			}
		}
	}
}

Hello Mike, this worked fine in my initial testing, and many thanks for the help. If I spot any issues, I'll post them back here, but for now marking your reply as correct. Cheers, Mark S.

Hi Mike,

Thanks for the solution. It worked for me. One query,can we not also remove the values that are there under slushbucket for the last value selected. PFA the screenshot for more clarity.

find_real_file.png

Thanks,

Ruchi