Range calculator scripts

reference australia Updated Sep 10, 2026 2 min read r_RangeCalculatorScripts.md
Raw file servicenow.com

You can specify a script include that calculates range restrictions and processes parent updates in a timeline page.

Range Calculator Scripts

Following are three examples of script includes that help specify range restrictions.

ExampleUpdateParentsRangeCalculator

Updates parent records when a child record span is moved or resized in the timeline.

JavaScript
var ExampleUpdateParentsRangeCalculator = Class.create();ExampleUpdateParentsRangeCalculator.prototype = {initialize: function() { },updateParents: function(id, table, startDate, endDate){ if (table == "rm_sprint"){   var releaseID;   var sprint = new GlideRecord(table);   sprint.addQuery('sys_id', id);   sprint.query();   if (sprint.next())     releaseID = sprint.release + "";   if (releaseID) {         var now_GR = new GlideRecord("rm_release_scrum");         gr.addQuery("sys_id", releaseID);         gr.query();         if (gr.next()) {           if (startDate  && startDate < this.getTimeMs(gr.start_date))               gr.start_date = this.getTimeObject(startDate);            if (endDate && endDate > this.getTimeMs(gr.end_date))              gr.end_date = this.getTimeObject(endDate);              gr.update();         }    }  }},  getMinRangeDetails: function(id, table){ return [-1, -1, "", ""]; },getMaxRangeDetails: function(id, table){ return [-1, -1, ""]; },getTimeMs: function(date){   return new GlideScheduleDateTime(date).getMS(); },getTimeObject: function(timeMS) {   var gdt = new GlideDateTime();   gdt.setNumericValue(timeMS);   return gdt; },logMessage: function(message){ gs.log(message); },type: 'ExampleUpdateParentsRangeCalculator'}

In this example, the span is identified based on the id and table from function(id, table, startDate, endDate).

ExampleMinRangeCalculator

Defines the earliest start date and the latest end date for a specified span.

JavaScript
var ExampleMinRangeCalculator = Class.create();  ExampleMinRangeCalculator.prototype = {      initialize: function() { },      updateParents: function(id, table, startDate, endDate){ },      getMinRangeDetails: function(id, table){           var min = -1;           var max = -1;           var minID = "";           var maxID = "";           if (table == "rm_release_scrum"){                    var now_GR = new GlideRecord("rm_sprint");                    gr.addQuery("release", id);                    gr.query();                    while(gr.next()){                         var start = this.getTimeMs(gr["start_date"]);                         var end = this.getTimeMs(gr["end_date"]);                         var id = gr["sys_id"];                         if (min == - 1 || start <= min){                                if (start != min)                                     minID = "";                         min = start;                         minID += "," + id;                         }                         if (max == -1 || end >= max){                                    if (end != max)                                            maxID = "";                                    max = end;                                    maxID += "," + id;                            }                       }            }        return [min, max, minID, maxID];},getMaxRangeDetails: function(id, table){ return [-1, -1, ""]; },getTimeMs: function(date){ return new GlideScheduleDateTime(date).getMS(); },getTimeObject: function(timeMS) {   var gdt = new GlideDateTime();   gdt.setNumericValue(timeMS);   return gdt; },logMessage: function(message){ gs.log(message); },type: 'ExampleUpdateParentsRangeCalculator'}

ExampleMaxRangeCalculator

Defines the earliest start date and the latest end date for a specified span.

JavaScript
var ExampleMaxRangeCalculator = Class.create();ExampleMaxRangeCalculator.prototype = {   initialize: function() { },   updateParents: function(id, table, startDate, endDate){ },   getMinRangeDetails: function(id, table){ return [-1, -1, "", ""]; },   getMaxRangeDetails: function(id, table){      if (table == "rm_sprint"){         var sprint = new GlideRecord(table);         sprint.addQuery('sys_id', id);         sprint.query();         if (sprint.next())            releaseID = sprint.release + "";         if (releaseID) {            var now_GR = new GlideRecord("rm_release_scrum");            gr.addQuery("sys_id", releaseID);            gr.query();            if (gr.next())               return [this.getTimeMs(gr.start_date),                this.getTimeMs(gr.end_date), gr.sys_id];         }      }      return [-1, -1, ""];   },   getTimeMs: function(date){ return new ScheduleDateTime(date).getMS(); },   getTimeObject: function(timeMS) {      var gdt = new GlideDateTime();     gdt.setNumericValue(timeMS);      return gdt; },   logMessage: function(message){ gs.log(message); },   type: 'ExampleUpdateParentsRangeCalculator'}

Use the following two functions to obtain the correct start and end dates in the three example script includes provided for reference.

JavaScript
getTimeMs: function(date){        return new ScheduleDateTime(date).getMS();    }
JavaScript
getTimeObject: function(timeMS) {        var gdt = new GlideDateTime();        gdt.setNumericValue(timeMS);        return gdt;    }

Parent Topic:Timeline pages

Search documentation
Search document titles and file paths on the australia branch