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
Related Scripts
Auto-assign Based on Category
Automatically assign tickets to the appropriate assignment group based on category.
Send Email Notifications
Send customized email notifications when specific conditions are met.
Populate Fields on Insert
Automatically populate fields with default values or calculated values when a record is created.