Completing Metric Instance calculation when ticket is closed
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎12-16-2011 10:12 AM
I am using a few OOB Metrics in reports to identify duration of how long a incident ticket was assigned to a person or group, but if the ticket is closed, the last metric is not updated so that calculation is never completed. The base Metric article (http://wiki.service-now.com/index.php?title=Metric_Definition_Support) states that a script can be used to complete a metric instance when a ticket is closed, but I have not been sucessful in actually building one.
A co-worker suggested adding the following into the script section, but this did NOT stop the metric when the incident was closed:
if (!current.active) {
answer = false;
}
Any suggestions as to what the script should be are most appreciated.
The fact that the last metric is not automatically completed when a ticket is closed was alluded to in Reporting on the date/time a task was assigned to a person, but since I'm actually looking for the script I made a new post.
- Labels:
-
Service Mapping
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎02-07-2014 11:39 AM
Is there any update to this? I am having the same issue and I have tried just about everything.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎03-01-2017 06:05 AM
Hey Tyler.Hoge
I am currently facing the same challenge.Did you have any luck in finding a solution for this through script?
Regards
Bhaskar Chaitanya P
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎03-30-2016 02:45 PM
364 views still no answer
for or an incident is possibly by design if potential to reopen?
for a change request we cannot reopen, but it's closed since it was closed. The metric instance is superfluous?
i want same thing but curious if really necessary, there must be some resources involved in every closed change clock still ticking
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎02-01-2017 11:14 AM
I wanted a way to calculate how long a demand stays in each state and I wanted it to terminate when it reached the last state. I spent quite a bit of time trying to get this to work correctly. I used a combination of filed valuation duration and script calculations. Never worked, the last state would always remain open or it wouldn't record the last state. I finally settled on doing everything in a script calculation. It's not in production yet, but from my preliminary testing, it seems to do what I intended. I terminate the metrics when the record goes from active to inactive. So when it reaches the final state, that last state will have an elapsed time of zero. it's all a script calculation, no field value durations.
/*
* Metrics for tracking the changing state of demands.
*/
// If this is a new record, then create a
// metric record.
if (current.sys_created_on == current.sys_updated_on) {
createMetric();
// If the record is active, the previous
// metric needs to be closed and the next
// one needs to be created.
} else if (current.active) {
closeMetric();
createMetric();
// If the record is inactive, the previous
// metric needs to be closed and the final
// one needs to be created and then closed.
} else if(!current.active) {
closeMetric();
createMetric();
closeMetric();
}
/*
* Create a metric.
*/
function createMetric() {
var mi = new MetricInstance(definition, current);
var gr = mi.getNewRecord();
gr.field_value = true;
gr.start = current.sys_updated_on;
gr.calculation_complete = false;
gr.insert();
}
/*
* Close a metric.
*/
function closeMetric() {
var gr = new GlideRecord('metric_instance');
gr.addQuery('id', current.sys_id);
gr.addQuery('calculation_complete', false);
gr.addQuery('definition.type', 'calculation');
gr.query();
if (gr.next()) {
var definition = new GlideRecord('metric_definition');
definition.get(gr.definition);
var mi = new MetricInstance(definition, current);
mi.endDuration();
}
}