Major Incident Communication plan

RohitGeorgV
Mega Guru

While creating a incident communication plan from major incident, how is the status being set to 'Approved' by default, is it using any OOB business rule? Just want to make the status to 'Open'. Can i know from where it is set to Approved, rather than writing a business rule to set the status to 'Open'.

1 REPLY 1

Pavan Srivastav
ServiceNow Employee

Hello Rohit,

 

The status is not set by a Business Rule. It is set directly inside the Script Include: MajorIncidentCommunicationPlan (or in some versions MajorIncidentUtils) when the communication plan record is created programmatically from the Major Incident workbench.

Specifically — what to check in your instance

Navigate to System Definition → Script Includes and search for:

 
 
MajorIncidentCommunicationPlan

Inside that Script Include, look for the method that creates the plan record — typically named something like createCommunicationPlan or createPlan. You will find a line similar to:

 
 
javascript
commPlan.setValue('state', 'approved'); // or the integer value e.g. '2'
// or
commPlan.state = 'approved';

This is the OOB source of the default value being set to Approved at creation time.


How to Confirm It in Your Instance

Rather than guessing, run this in Scripts - Background to find every location that writes to the state field on the communication plan table:

 
 
javascript
// Find the communication plan table name first
var gr = new GlideRecord('sys_db_object');
gr.addQuery('name', 'CONTAINS', 'comm');
gr.addQuery('name', 'CONTAINS', 'plan');
gr.query();
while (gr.next()) {
    gs.info(gr.getValue('name') + ' — ' + gr.getDisplayValue('name'));
}

Once you have the exact table name (likely mel_communication_plan or major_inc_comm_plan), search for what sets the state:

 
 
javascript
// Check Business Rules on the table
var br = new GlideRecord('sys_script');
br.addQuery('collection', 'YOUR_TABLE_NAME');
br.addQuery('script', 'CONTAINS', 'state');
br.query();
while (br.next()) {
    gs.info('BR: ' + br.getValue('name'));
    gs.info('Script: ' + br.getValue('script'));
    gs.info('---');
}

// Check Script Includes that reference the table
var si = new GlideRecord('sys_script_include');
si.addQuery('script', 'CONTAINS', 'YOUR_TABLE_NAME');
si.addQuery('script', 'CONTAINS', 'state');
si.query();
while (si.next()) {
    gs.info('SI: ' + si.getValue('name'));
}

The Right Way to Override It (Without a Business Rule)

Since it originates in a Script Include rather than a Business Rule, your options in order of preference are:

Option 1 — Override the Script Include (Cleanest)

Copy the OOB Script Include into your custom application scope, modify the line that sets state to approved, and change it to open (or whatever the correct choice value is). The scoped version takes precedence over the global OOB one.

 
 
javascript
// Change this
commPlan.setValue('state', 'approved');

// To this
commPlan.setValue('state', 'open'); // verify exact choice value in your instance

This is upgrade-safe if done in a custom scope and is the most direct fix.

Option 2 — Check for a Table Default Value

Navigate to your communication plan table in sys_dictionary and check if there is a default value set on the state field itself:

 
 
System Definition → Dictionary
Table: YOUR_COMM_PLAN_TABLE
Field: state

If the default value is set to approved here, simply changing it to open in the dictionary entry resolves it with zero code — this is the easiest fix if it applies.

Option 3 — Check UI Policy / Data Policy

Navigate to:

 
 
System UI → UI Policies  (filter by your comm plan table)
System Policy → Data Policies  (filter by your comm plan table)

Occasionally a UI Policy sets the initial value on form load. Less likely for a status field but worth ruling out.


Recommended Investigation Order

 
 
1. Check Dictionary default value on state field     ← easiest, check first
2. Check MajorIncidentCommunicationPlan Script Include  ← most likely source
3. Check MajorIncidentUtils Script Include
4. Check Business Rules on the table                 ← unlikely but rule it out
5. Check UI Policies on the table                    ← least likely

Finding it in the Script Include is the most probable outcome — once you locate the exact line, Option 1 above gives you a clean override without writing a new Business Rule from scratch.