Add two duration fields together and populate custom field with calculation BR
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-08-2019 09:22 AM
Good morning,
I'm trying to add two duration fields together on Incident.
I have a custom field called u_incident_total_time_worked which is pulling data from the Incident Tasks time worked (total duration spent on all Incident tasks) - working fine.
I have the OOTB field time_worked on Incident which is required on resolve, at which point on update/save I would like to populate my custom total_time_worked field on Incident.
so basically I want:
total_time_worked = incident_task_total_time_worked + time_worked
My before BR looks like this ( but it looks like it's pulling non human time from somewhere) which is triggered when time_worked changes.
var inctasktotal = new GlideDuration(current.u_incident_task_total_time_worked).getNumericValue();
var timeworked = new GlideDuration(current.time_worked).getNumericValue();
var total = inctasktotal + timeworked;
var totaltimeworked= new GlideDuration();
totaltimeworked.setNumericValue(total);
current.u_total_time_worked = totaltimeworked.getDurationValue();
All help is appreciated 🙂
- Labels:
-
Scripting and Coding
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-11-2019 03:08 PM
Hey, I had made the bracket adjustment previous and it didn't work. The business rule sets the field blank for some reason.
I had a value in the total time worked field and it blew it out on update. hmmm
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-12-2019 08:44 AM
I used 2 fields on incident of type duration= for my example, business_duration and calendar_duration.
when you retrieve those fields in a business rule they are not GlideDuration objects.
you have to get the value, create a string in the format 'D HH:mm:ss'
and instantiate a GlideDuration object with the string in your br.
you can then add them.
I did string manipulation to get the STring value in the format I need.
you can run this in FixScript to test.
If anyone knows of an easier way to do this please chime in.
here is my code:
var gr = new GlideRecord('incident');
gr.addQuery('number', 'INC0000059');
gr.query();
if (gr.next()){
//*************************************************************
var bus_dur = gr.getDisplayValue('business_duration');
gs.print('bus dur display value ' + bus_dur); //1577 Days 13 Hours
gs.print(typeof bus_dur); //string
var dayIndex = bus_dur.indexOf('Days');
gs.print(dayIndex); //5
var dayPart = bus_dur.substring(0, dayIndex);
gs.print(' day part is ' + dayPart);
var hourIndex = bus_dur.indexOf('Hours');
gs.print(hourIndex); //5
var startHourIndex = dayIndex + 5;
gs.print('start Hour Index is ' + startHourIndex);
var hourPart = bus_dur.substring(startHourIndex, hourIndex);
gs.print('hour part is ' + hourPart);
var newString = dayPart + trim(hourPart) + ':00:00';
var dur1 = new GlideDuration(newString);
gs.print('new string is ' + newString);
gs.print('');
gs.print('************************************************');
gs.print('');
//*************************************************************
var cal_dur = gr.getDisplayValue('calendar_duration');
gs.print('cal dur display value ' + cal_dur); //1577 Days 13 Hours
gs.print(typeof cal_dur); //string
dayIndex = cal_dur.indexOf('Days');
gs.print(dayIndex); //5
dayPart = cal_dur.substring(0, dayIndex);
gs.print(' day part is ' + dayPart);
hourIndex = cal_dur.indexOf('Hours');
gs.print(hourIndex); //5
startHourIndex = dayIndex + 5;
gs.print('start Hour Index is ' + startHourIndex);
hourPart = cal_dur.substring(startHourIndex, hourIndex);
gs.print('hour part is ' + hourPart);
newString = dayPart + trim(hourPart) + ':00:00';
var dur2 = new GlideDuration(newString);
gs.print('new string is ' + newString);
//*************************************************************
var a = dur1.add(dur2);
gs.print('sum is ' + a.getDisplayValue());
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-12-2019 02:29 PM
So I just realized time_worked OOTB on Incident is a timer, not a duration... I think I need to query the task_time_worked duration field then?