logo

NJP

Time Worked in Agent Workspace

Import · Mar 08, 2021 · article

Time Worked in Agent Workspace!!

Use this code below to add Time Worked to any of the UI Action in Agent Workspace. Any existing UI action can be modified to include this and run on click. Please note that this works on Client Side and if a Server Side script is being utilized, it has to be modified to work on Client Side to make this work.

If a similar one was already exists in the community, kindly excuse.

Reference: There is an amazing article on Agent Workspace which could be used in multiple aspects.

https://www.ashleysn.com/post/workspace-ui-actions

There are three aspects,

  1. UI Page - To enter the data
  2. Script Include - To Glide and add the Time Worked
  3. UI Action - To trigger the UI Page

1. UI Page:

Name: Provide a valid name Eg: ws_timer

Application: Global

HTML:

<link href="sn_customerservice.agentworkspace.css.jsdbx" rel="stylesheet" type="text/css" />
<g:ui_form onsubmit="invokePromptCallBack('ok')">
<table width="100%">
    <tr>
        <td nowrap="true"><g:no_escape>${title}</g:no_escape></td>  
    </tr>
        <tr><td>
            <g:ui_input_field label="Hours"  name="hr" value="00" type="number" min="0" max="24"/> <g:ui_input_field label="Mins" name="min" value="00" type="number" min="0" max="60"/>
<g:ui_input_field label="Seconds" name="sec" value="00" type="number" min="0" max="60"/>        </td>
            <td/></tr>
        <tr>
            <td colspan="2" align="right">
                <g:dialog_buttons_ok_cancel 
                   ok="invokePromptCallBack('ok');" 
                   ok_type="button" />
            </td>
        </tr>   
</table>
</g:ui_form>

Client script:

function invokePromptCallBack() {

    function getQueryVariable(variable) {
        var query = window.location.search.substring(1);
        var vars = query.split("&");
        for (var i = 0; i < vars.length; i++) {
            var pair = vars[i].split("=");
            if (pair[0] == variable) {
                return pair[1];
            }
        }
        return '';
    }

    var case_sysid = getQueryVariable('case');
    var user = getQueryVariable('user');

    if (gel('min').value < 60 && gel('sec').value < 60 && user && case_sysid && gel('min').value >= 0 && gel('sec').value >= 0 && gel('hr').value >= 0 && (gel('min').value > 0 || gel('hr').value > 0)) {
        var ga = new GlideAjax('Workspace_Ajax'); //Script Include
        ga.addParam('sysparm_name', 'updateTimer');
        ga.addParam('sysparm_u_case', case_sysid);
        ga.addParam('sysparm_u_user', user);
        ga.addParam('sysparm_u_hr', gel('hr').value);
        ga.addParam('sysparm_u_min', gel('min').value);
        ga.addParam('sysparm_u_sec', gel('sec').value);
        ga.getXML(Parse);

    }

    function Parse(response) {
        var answer = response.responseXML.documentElement.getAttribute("answer");
        window.location.href = '';
    }
}

2. Script Include:

Name: Workspace_Ajax (As mentioned in the Client Script of the UI Page)

Application: Global

Accessible from: All Application Scopes

Client Callable: True

Script:

var Workspace_Ajax = Class.create();
Workspace_Ajax.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {

    updateTimer: function() {
        var timer = new GlideRecord('task_time_worked');
        timer.initialize();
        timer.setValue('task', this.getParameter('sysparm_u_case'));
        timer.setValue('user', this.getParameter('sysparm_u_user'));
        timer.setValue('time_in_seconds', this.getParameter('sysparm_u_sec'));
        timer.setValue('time_worked', new GlideDuration(this.getParameter('sysparm_u_hr') + ':' + this.getParameter('sysparm_u_min')));
        timer.insert();
    },

    type: 'Workspace_Ajax'
});

3. UI Action:

Name: Save

Application: CSM Workspace (Set based on requirement)

Order: -100

Action name: sysverb_ws_save

Show Insert / Show Update: True (Set based on requirement)

Client: True

List v2 Compatible: True

Condition: !current.isNewRecord() && current.canWrite() (Set based on requirement)

Workspace Form Button / Workspace Form Menu: True (Set based on requirement)

Workspace Client Script:

function onClick(g_form) {
    g_modal.showFrame({
        title: getMessage("Timer"),
        url: 'ui_page.do?sys_id=sys_id&case=' + g_form.getUniqueValue() + '&user=' + g_user.userID, //Mention SYS ID of the UI Page in sys_id=
        size: 'sm',
        autoCloseOn: 'URL_CHANGED',
        callback: function(ret, data) {
            console.log(data);
            console.log(ret);
            g_form.save();
        }
    });
}
View original source

https://www.servicenow.com/community/now-platform-articles/time-worked-in-agent-workspace/ta-p/2321726