Skip to Content

Create Related Records

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

Table: incident When: after
#create-records #automation #change-request #after #insert #related-records

Script Code

JavaScript
1(function executeRule(current, previous /*null when async*/) {
2
3  // Configuration: Define when to create related record
4  var shouldCreateChange = false;
5
6  // Example: Create change for high-priority infrastructure incidents
7  if (current.priority.toString() === '1' && // Critical priority
8      current.category.toString() === 'hardware' &&
9      current.cmdb_ci.sys_class_name.toString().indexOf('server') !== -1) {
10    shouldCreateChange = true;
11  }
12
13  if (!shouldCreateChange) {
14    return;
15  }
16
17  // Create a new change request
18  var grChange = new GlideRecord('change_request');
19  grChange.initialize();
20
21  // Copy relevant fields from incident
22  grChange.short_description = 'Change required: ' + current.short_description;
23  grChange.description = 'This change was automatically created from incident ' +
24                         current.number + '.\n\n' +
25                         'Incident description: ' + current.description;
26
27  // Set change-specific fields
28  grChange.type = 'emergency';  // Emergency change
29  grChange.priority = current.priority;
30  grChange.assignment_group = current.assignment_group;
31  grChange.assigned_to = current.assigned_to;
32  grChange.cmdb_ci = current.cmdb_ci;
33
34  // Set requested by and opened by
35  grChange.requested_by = current.caller_id;
36  grChange.opened_by = gs.getUserID();
37
38  // Calculate implementation date (e.g., 24 hours from now)
39  var gdt = new GlideDateTime();
40  gdt.addHours(24);
41  grChange.start_date = gdt;
42
43  gdt.addHours(4);  // 4-hour implementation window
44  grChange.end_date = gdt;
45
46  // Insert the change request
47  var changeId = grChange.insert();
48
49  if (changeId) {
50    gs.info('Created emergency change ' + grChange.number + ' from incident ' + current.number);
51
52    // Link the incident to the change
53    current.problem_id = changeId;  // Or use a custom field for change reference
54    current.work_notes = 'Emergency change request created: ' + grChange.number;
55    current.update();
56
57    // Optional: Send notification
58    gs.eventQueue('change.emergency.created', grChange, current.sys_id, current.assignment_group);
59  }
60
61})(current, previous);

How to Use

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

Explore More Scripts

Browse our complete library of ServiceNow scripts

View All Scripts