hange management in Service-now includes the use of a parent ‘Change request’ ticket and (usually) the use of multiple ‘Change task’ tickets that can be assigned to separate groups or individuals to perform specific pieces of work. Because these change task tickets should factor into the overall plan for the parent change request, it often makes sense to take the expected start and end dates of change tasks into account when setting a planned start and end date for the parent change request. The purpose of this script is to allow you to automate the calculation of the planned start and end dates for the parent change request based on updates made to the child change tasks. Whenever an update is made to the expected start or end dates of a change task, this script will run and evaluate the start and/or end dates of the other change tasks for the same change request. The earliest start date and latest end date from the tasks are then populated as the overall planned start and end dates for the change request.

Sample Title

Since there is no ‘Expected end’ field out-of-box, this script assumes that you’ve created a date/time field named ‘u_expected_end’ on the ‘Change task’ table. ‘Expected start’ and ‘Expected end (u_expected_end)’ on the ‘Change task’ table are the basis for calculating ‘Planned start date (start_date)’ and ‘Planned end date (end_date)’ on the ‘Change request’ table.

Name: Calculate change request dates
Table: Change task (change_task)
When: After Insert/Update
Condition: current.expected_start.changes() || current.u_expected_end.changes()


function calcChangeDates(){
//updateChange flag so we do not update unless necessary
var updateChange = false;

//Get the parent change to be updated
var chg = new GlideRecord('change_request');

//Query start times
var ts = new GlideRecord('change_task');
ts.addQuery('change_request', current.change_request);
if(ts.expected_start && ts.expected_start.getNumericValue() != chg.start_date.dateNumericValue()) {
chg.start_date = ts.expected_start;
updateChange = true;

//Query end times
var te = new GlideRecord('change_task');
te.addQuery('change_request', current.change_request);
if(te.u_expected_end && te.u_expected_end.getNumericValue() != chg.end_date.dateNumericValue()) {
chg.end_date = te.u_expected_end;
updateChange = true;

//Update the parent change request if necessary
if(updateChange == true){