Find your people. Pick a challenge. Ship something real. The CreatorCon Hackathon is coming to the Community Pavilion for one epic night. Every skill level, every role welcome. Join us on May 5th and learn more here.

robertmi
Kilo Explorer

After making several updates to a complicated form, I found that even leaving some space between the order value of the original variables wasn't sufficient and I needed to reorder many variables to get space to add new formatters and fields. I also dislike seeing orders like 100, 105, 107, 110, 111, etc. and wanted to leave a 'finished' catalog item with evenly ordered variables.

Searching these forums and elsewhere, I couldn't find any code to automatically reorder these variables and I'm shocked this isn't a built-in function, so I'm publishing my version as a UI Action. It will adjust the variables associated with the current catalog item with a configurable start and interval. Existing effective order is preserved, as are any places where multiple items have the same order, but the numbers are regenerated such that there is [interval] between each existing variable.

Attached is the XML defining my UI Action. It is visible on the sc_cat_item form if the current user is an admin. your environment might need a slightly different condition if you have more well defined roles.

The UI Action script follows:

var variables = new GlideRecord("item_option_new");
variables.addQuery('cat_item',current.sys_id);
variables.orderBy('order');
variables.query();
var interval = 10;
var counter = 100-interval; // we increment at the start of the loop (because we need to test against the previous value), so start at 100 - the interval so the first order set is 100
var previousOrder = 0;

while (variables.next()){
	// if this variable didn't have the same order as the last one, then increment the counter
	if (variables.getValue('order') != previousOrder){
		counter += interval;
	}
	previousOrder = variables.getValue('order'); // update 'this' variable's order to be the 'previous' variable's order
	variables.setValue('order',counter); // change this variable's order to the new numbering scheme
	variables.update();
}


action.setRedirectURL(current);

 

Comments welcome. Did I miss any edge cases or is there a better way to do this?

Version history
Last update:
‎12-22-2021 09:19 AM
Updated by: