UI Actions
Bulk Update Selected Records (List Action)
Update multiple selected list records with custom field values, useful for mass updates.
// Server-side code
(function() {
// Get selected record sys_ids from URL parameter
var sysIds = g_request.getParameter('sysparm_record_list');
if (!sysIds) {
gs.addErrorMessage('No records selected');
return;
}
// Split comma-separated sys_ids
var recordIds = sysIds.split(',');
if (recordIds.length === 0) {
gs.addErrorMessage('No records selected');
return;
}
// Configuration: Define updates to apply
// Customize these values for your use case
var updates = {
'state': '2', // In Progress
'assigned_to': gs.getUserID(), // Assign to current user
'work_notes': 'Bulk updated by ' + gs.getUserName() + ' on ' + new GlideDateTime().getDisplayValue()
};
// Optional: Get update values from UI Page or dialog
// var newState = g_request.getParameter('sysparm_new_state');
// var newAssignedTo = g_request.getParameter('sysparm_assigned_to');
var successCount = 0;
var failCount = 0;
var errors = [];
// Process each selected record
for (var i = 0; i < recordIds.length; i++) {
var sysId = recordIds[i];
try {
var gr = new GlideRecord('incident');
if (gr.get(sysId)) {
// Apply updates
for (var field in updates) {
if (updates.hasOwnProperty(field)) {
gr.setValue(field, updates[field]);
}
}
// Validation: Check business rules before updating
// Example: Don't update if already closed
if (gr.state.toString() === '7') { // Closed
errors.push(gr.number + ' is already closed');
failCount++;
continue;
}
// Update the record
gr.update();
successCount++;
} else {
errors.push('Record ' + sysId + ' not found');
failCount++;
}
} catch (e) {
errors.push('Error updating ' + sysId + ': ' + e.message);
failCount++;
}
}
// Show results
if (successCount > 0) {
gs.addInfoMessage('Successfully updated ' + successCount + ' record(s)');
}
if (failCount > 0) {
gs.addErrorMessage('Failed to update ' + failCount + ' record(s)');
// Show first 5 errors
var errorMsg = errors.slice(0, 5).join(', ');
if (errors.length > 5) {
errorMsg += ' and ' + (errors.length - 5) + ' more';
}
gs.addErrorMessage('Errors: ' + errorMsg);
}
// Return to list
action.setRedirectURL('incident_list.do');
})();How to use it
1. Create a new UI Action on your table 2. Set Name to 'Bulk Update' 3. Check 'List button' checkbox 4. Uncheck 'Client' checkbox 5. Set Order: 100 6. Configure updates object with your desired field values 7. Add condition if needed (e.g., gs.hasRole('admin')) 8. Test by selecting multiple records and clicking button 9. Consider creating a UI Page for dynamic input values 10. Add logging for audit trail if needed
Adapt the table names, fields, and conditions to your instance. Test the behavior in a development environment before using it in production.