MetricInstance object in Metric Instance definition scripting space
I found this useful, but it was not documented anywhere. Hope someone else will find it handy as well.
Contents of MetricInstance Object
definition : [object GlideRecord]//definition GR
current : [object GlideRecord]//currentGR such as task or incident record
initialize :
function (definitionGR, currentGR) {
this.definition = definitionGR;
this.current = currentGR;
}
process :
function () {
answer = true;
mi = this;
eval(this.definition.script);
if (!answer) {
return;
}
this.endDuration();
this.startDuration();
}
startDuration :
function () {
var gr = this.getNewRecord();
gr.field_value = this.current[this.definition.field];
gr.start = current.sys_updated_on;
gr.insert();
}
endDuration :
function () {
var gr = new GlideRecord("metric_instance");
gr.addQuery("definition", this.definition.sys_id);
gr.addQuery("id", this.current.sys_id);
gr.addQuery("calculation_complete", false);
gr.query();
if (!gr.next()) {
return;
}
gr.end = this.current.sys_updated_on;
gr.duration = gs.dateDiff(gr.start.getDisplayValue(), gr.end.getDisplayValue());
gr.calculation_complete = true;
gr.update();
}
getNewRecord :
function () {
var gr = new GlideRecord("metric_instance");
gr.table = this.current.getRecordClassName();
gr.id = this.current.sys_id;
gr.definition = this.definition.sys_id;
gr.field = this.definition.field;
return gr;
}
metricExists :
function () {
var gr = new GlideRecord("metric_instance");
gr.addQuery("id", this.current.sys_id);
gr.addQuery("definition", this.definition.sys_id);
gr.query();
return gr.hasNext();
}
_z :
function () {
}
https://www.servicenow.com/community/developer-articles/metricinstance-object-in-metric-instance-definition-scripting/ta-p/2295880