Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

How to Calculate Total Duration from Monday to Friday Catalog Variables and Store in Another variabl

AysenurU
Tera Contributor

Hi everyone,

 

I'm working on a Service Catalog Item that contains several duration-type variables for working hours from Monday to Friday (e.g., monday, tuesday, ..., friday). Each variable represents daily working hours (e.g., 6 hours 30 mins per day).

I also have two other duration-type variables:

  • contractual_weekly_working_hours→ represents the contractual total weekly hours (e.g., 37 hours)

  • total_hours_of_working_week → This should automatically calculate the sum of Monday to Friday durations. This should be read-only and error message should be visible when it does not match with the stated contractual_weekly_working_hours. 

I am not good at scripting and I have never done calculation like this before. Therefore I really appreciate you help. 

😇

1 REPLY 1

Ankur Bawiskar
Tera Patron
Tera Patron

@AysenurU 

please share the variable config screenshots and what you tried so far.

I assume you have 5 variables for each of the working day

write this onChange client script on each of the variable for working day

function onChange(control, oldValue, newValue, isLoading) {
    if (isLoading || newValue == '') {
        return;
    }

    // Get daily values in seconds (duration variables return seconds)
    var days = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday']; // give your variable name here
    var total = 0;
    days.forEach(function(day) {
        var val = g_form.getValue(day);
        total += val ? parseInt(val, 10) : 0;
    });

    // Set the total to the read-only variable
    g_form.setValue('total_hours_of_working_week', total);

    // Compare with contractual weekly hours
    var contractual = parseInt(g_form.getValue('contractual_weekly_working_hours'), 10) || 0;

    // Remove previous error
    g_form.hideFieldMsg('total_hours_of_working_week', true);

    if (contractual !== 0 && total !== contractual) {
        g_form.showFieldMsg('total_hours_of_working_week',
            'Total working hours do not match contractual weekly hours!',
            'error');
    }
}

If my response helped please mark it correct and close the thread so that it benefits future readers.

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader