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.

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
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  ||  ✨ 9x ServiceNow MVP  ||  ✨ ServiceNow Community Leader

View solution in original post

3 REPLIES 3

Mohith Devatte
Tera Sage
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
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  ||  ✨ 9x ServiceNow MVP  ||  ✨ ServiceNow Community Leader

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