← Script library

Business Rules

Create Related Records

Automatically create related records when certain conditions are met (e.g., create change request when major incident is detected).

JavaScript
(function executeRule(current, previous /*null when async*/) {

  // Configuration: Define when to create related record
  var shouldCreateChange = false;

  // Example: Create change for high-priority infrastructure incidents
  if (current.priority.toString() === '1' && // Critical priority
      current.category.toString() === 'hardware' &&
      current.cmdb_ci.sys_class_name.toString().indexOf('server') !== -1) {
    shouldCreateChange = true;
  }

  if (!shouldCreateChange) {
    return;
  }

  // Create a new change request
  var grChange = new GlideRecord('change_request');
  grChange.initialize();

  // Copy relevant fields from incident
  grChange.short_description = 'Change required: ' + current.short_description;
  grChange.description = 'This change was automatically created from incident ' +
                         current.number + '.\n\n' +
                         'Incident description: ' + current.description;

  // Set change-specific fields
  grChange.type = 'emergency';  // Emergency change
  grChange.priority = current.priority;
  grChange.assignment_group = current.assignment_group;
  grChange.assigned_to = current.assigned_to;
  grChange.cmdb_ci = current.cmdb_ci;

  // Set requested by and opened by
  grChange.requested_by = current.caller_id;
  grChange.opened_by = gs.getUserID();

  // Calculate implementation date (e.g., 24 hours from now)
  var gdt = new GlideDateTime();
  gdt.addHours(24);
  grChange.start_date = gdt;

  gdt.addHours(4);  // 4-hour implementation window
  grChange.end_date = gdt;

  // Insert the change request
  var changeId = grChange.insert();

  if (changeId) {
    gs.info('Created emergency change ' + grChange.number + ' from incident ' + current.number);

    // Link the incident to the change
    current.problem_id = changeId;  // Or use a custom field for change reference
    current.work_notes = 'Emergency change request created: ' + grChange.number;
    current.update();

    // Optional: Send notification
    gs.eventQueue('change.emergency.created', grChange, current.sys_id, current.assignment_group);
  }

})(current, previous);

How to use it

1. Create an after Business Rule on your parent table 2. Check "Insert" and/or "Update" checkboxes as needed 3. Customize the conditions for creating related records 4. Update field mappings for your data model 5. Test thoroughly to avoid creating unwanted records

Adapt the table names, fields, and conditions to your instance. Test the behavior in a development environment before using it in production.