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.