範囲計算機スクリプト
範囲の制限を計算し、親の更新をタイムラインページで処理するスクリプトインクルードを指定できます。
範囲計算機スクリプト
次に、範囲制限の指定に役立つスクリプトインクルードの 3 つの例を示します。
ExampleUpdateParentsRangeCalculator
タイムラインで子レコードスパンが移動またはサイズ変更されたときに親レコードを更新します。
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'
}この例では、スパンは関数の ID とテーブル (id、table、startDate、endDate) に基づいて識別されます。
ExampleMinRangeCalculator
指定したスパンの最も早い開始日と最も遅い終了日を定義します。
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
指定したスパンの最も早い開始日と最も遅い終了日を定義します。
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'
}次の 2 つの関数を使用して、参照用に提供されている 3 つのサンプルスクリプトインクルードの正しい開始日と終了日を取得します。
getTimeMs: function(date){
return new ScheduleDateTime(date).getMS();
}
getTimeObject: function(timeMS) {
var gdt = new GlideDateTime();
gdt.setNumericValue(timeMS);
return gdt;
}