← Script library

UI Actions

Bulk Update Selected Records (List Action)

Update multiple selected list records with custom field values, useful for mass updates.

JavaScript
// 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.