Get a first look at what's coming. The Developer Passport Australia Release Preview kicks off March 12. Dive in! 

onClick function in workspace client script for an UI action is not working as expected

Sailesh4
Giga Expert

Hi, @Ankur Bawiskar 

I want to add a functionality where approvers can approve any HR case directly on HR case in Agent workspace.

I have made the Workspace Form Button to "True" and in Workspace Client Script, I'm calling a client callable script include to make the sysapproval record to approve/reject. But this seems to be not working, as when I click that button on Agent workspace, there is no action performed from client and server side.

 

Please help me here.

Workspace Client Script:

function onClick(g_form) {
    var approve = new GlideAjax('DB_HR_ClientUtils');
    approve.addParam('sysparm_name', 'approveFromHRCase');
    approve.addParam('sysparm_user', g_user.userID);
    approve.addParam('sysparm_record', g_form.getUniqueID());
    approve.addParam('sysparm_action', 'approve');
    approve.getXML(getResponse);
}

function getResponse(response) {
    var answer = response.responseXML.documentElement.getAttribute("answer");
    if (answer == 'true') {
        g_form.assigned_to = g_user.userID;
        g_form.save();
    }
}


Client-callable Script Include:

approveFromHRCase: function() {
        var user = this.getParameter('sysparm_user');
        var record = this.getParameter('sysparm_record');
        var action = this.getParameter('sysparm_action');
        gs.error("now in the script include " + user + record);
        var appr = new GlideRecord('sysapproval_approver');
        appr.addQuery('document_id', record);
        appr.addQuery('state', 'requested');
        appr.addQuery('approver', user);
        appr.query();
        if (appr.next()) {
            gs.error("got the approval record " + approve);
            if (action == 'approve') {
                appr.state = 'approved';
            } else
                appr.state = 'rejected';
            appr.update();
        }
        return true;
    },

find_real_file.png

Thanks,

Sailesh

1 ACCEPTED SOLUTION

Ankur Bawiskar
Tera Patron

Hi,

update client side code as this

function onClick(g_form) {
    var approve = new GlideAjax('DB_HR_ClientUtils');
    approve.addParam('sysparm_name', 'approveFromHRCase');
    approve.addParam('sysparm_user', g_user.userID);
    approve.addParam('sysparm_record', g_form.getUniqueValue());
    approve.addParam('sysparm_action', 'approve');
    approve.getXMLAnswer(getResponse);
}

function getResponse(response) {
    var answer = response;
    if (answer.toString() == 'true') {
        g_form.assigned_to == g_user.userID;
        g_form.save();
    }
}

Script Include as this

approveFromHRCase: function() {
    var user = this.getParameter('sysparm_user');
    var record = this.getParameter('sysparm_record');
    var action = this.getParameter('sysparm_action');
    var appr = new GlideRecord('sysapproval_approver');
    appr.addQuery('sysapproval', record);
    appr.addQuery('state', 'requested');
    appr.addQuery('approver', user);
    appr.query();
    if (appr.next()) {
        gs.error("got the approval record " + approve);
        if (action == 'approve') {
            appr.state = 'approved';
        } else
            appr.state = 'rejected';
        appr.update();
    }
    return true;
},

Regards
Ankur

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

View solution in original post

3 REPLIES 3

Mohith Devatte
Tera Sage

hello ,

can you replace this line approve.addParam('sysparm_record', g_form.getUniqueID());

To this 

approve.addParam('sysparm_record', g_form.getUniqueValue());

Also while comparing the answer do like below

 if (answer == 'true' || answer==true) {
        g_form.assigned_to = g_user.userID;
        g_form.save();
    }

 

Please mark my answer correct if it helps you

Ankur Bawiskar
Tera Patron

Hi,

update client side code as this

function onClick(g_form) {
    var approve = new GlideAjax('DB_HR_ClientUtils');
    approve.addParam('sysparm_name', 'approveFromHRCase');
    approve.addParam('sysparm_user', g_user.userID);
    approve.addParam('sysparm_record', g_form.getUniqueValue());
    approve.addParam('sysparm_action', 'approve');
    approve.getXMLAnswer(getResponse);
}

function getResponse(response) {
    var answer = response;
    if (answer.toString() == 'true') {
        g_form.assigned_to == g_user.userID;
        g_form.save();
    }
}

Script Include as this

approveFromHRCase: function() {
    var user = this.getParameter('sysparm_user');
    var record = this.getParameter('sysparm_record');
    var action = this.getParameter('sysparm_action');
    var appr = new GlideRecord('sysapproval_approver');
    appr.addQuery('sysapproval', record);
    appr.addQuery('state', 'requested');
    appr.addQuery('approver', user);
    appr.query();
    if (appr.next()) {
        gs.error("got the approval record " + approve);
        if (action == 'approve') {
            appr.state = 'approved';
        } else
            appr.state = 'rejected';
        appr.update();
    }
    return true;
},

Regards
Ankur

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

thanks Ankur. by using sysapproval it worked, along with i had to write a script include in global scope.