- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-24-2022 11:45 PM - edited 11-24-2022 11:48 PM
Hi All
I have a requirement where i am using Adhoc approval option in HR case management. I added "Agent can add an approval" in case options on HR Service.
Add adhoc approvers to an HR case in the Agent Workspace for HR Case Management (servicenow.com)
We have corresponding Ui action "Add an approval" I selected 'Workspace Form Button' option
The Ui action is available on HR Agent Workspace, but it is not working. No dialog box opens in Agent workspace to add an approval although it is working fine in native UI Form view.
If anyone have idea, please help.
Thanks in Advance.
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-30-2022 04:56 AM - edited 11-30-2022 05:00 AM
The following code I have added in the workflow client script. Also, I have created one script Include for this.
Workspace client script:
function onClick(g_form) {
var gajax = new GlideAjax("sn_hr_core.hr_ApprovalUtilsAjax");
gajax.addParam("sysparm_name", "isAdhocApprovers");
gajax.addParam("sysparm_sys_id", g_form.getUniqueValue());
gajax.addParam("sysparm_parent_table", g_form.getTableName());
gajax.getXMLAnswer(launchAdhocApprovalDialog);
function launchAdhocApprovalDialog(response) {
if (!response || response == 'false') {
g_form.addErrorMessage(getMessage('Adhoc approval action can not be performed'));
return;
} else {
var fields = [{
type: 'glide_list',
name: 'approver_users',
label: getMessage('Approver users'),
referringTable: 'sn_hr_core_service_activity',
referringRecordId: '-1',
dictionary: {
reference: 'sys_user'
},
mandatory: true,
},
{
type: 'choice',
name: 'wait_for',
value: 'anyone',
label: 'Wait For',
choices: [{
displayValue: 'Anyone to approve',
value: 'anyone'
},
{
displayValue: 'Everyone to approve',
value: 'everyone',
},
{
displayValue: 'First responce from aynyone',
value: 'first_response',
},
],
},
{
type: 'choice',
name: 'on_rejection',
value: 'resubmit',
label: 'On rejection',
choices: [{
displayValue: 'Allow resubmit of approvals',
value: 'resubmit'
},
{
displayValue: 'Closed incomplete',
value: 'close_case',
},
],
},
{
type: 'choice',
name: 'ac_or_wk',
value: '1',
label: 'Select work notes or additional comments',
choices: [{
displayValue: 'Additional comment',
value: '2'
},
{
displayValue: 'Work note',
value: '1'
},
],
},
{
type: 'textarea',
label: 'Reason',
name: 'reason,'
},
]
g_modal.showFields({
title: "Add an approval",
instruction: 'After filling out these details and sending for approval, an approval process will be added to this request.',
confirmTitle: "Send for Approval",
fields: fields,
size : 'lg',
}).then(function(fieldValues) {
var gr = new GlideAjax('sn_hr_core.add_an_approval');
gr.addParam('sysparm_name', 'sendApproval');
gr.addParam('sysparm_approvers', fieldValues.updatedFields[0].value);
gr.addParam('sysparm_waitFor', fieldValues.updatedFields[1].value);
gr.addParam('sysparm_onRejection', fieldValues.updatedFields[2].value);
gr.addParam('sysparm_tableName', g_form.getTableName());
gr.addParam('sysparm_sys_id', g_form.getUniqueValue());
gr.addParam('sysparm_comment', fieldValues.updatedFields[3].value);
gr.addParam('sysparm_reason', fieldValues.updatedFields[4].value);
gr.getXML();
g_form.save();
});
}
}
}
Script Include :
var add_an_approval = Class.create();
add_an_approval.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {
sendApproval: function() {
var usersStr = this.getParameter('sysparm_approvers');
var selectedWaitFor = this.getParameter('sysparm_waitFor');
var selectedOnReject = this.getParameter('sysparm_onRejection');
var tableName = this.getParameter('sysparm_tableName');
var task_sys_id = this.getParameter('sysparm_sys_id');
var comment = this.getParameter('sysparm_comment');
var reason = this.getParameter('sysparm_reason');
var caseGr = new GlideRecord(tableName);
if (!usersStr || !caseGr.get(task_sys_id))
return;
if (comment == 1) {
caseGr.work_notes = 'Adhoc approval reason:' + reason;
}
if (comment == 2) {
caseGr.comments = 'Adhoc approval reason:' + reason;
}
var vars = {};
vars.adhoc_approvers = usersStr;
vars.wait_for = selectedWaitFor;
vars.on_rejection = selectedOnReject;
sn_hr_core.hr_ApprovalUtil.startAdhocApprovalFlow(caseGr, vars);
caseGr.update();
var str = tableName + ".do?sysparm_query=sys_id=" + task_sys_id;
response.sendRedirect(str);
},
type: 'add_an_approval'
});
Please let me know if it is helpful for you or not.
Thank You!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-30-2022 04:56 AM - edited 11-30-2022 05:00 AM
The following code I have added in the workflow client script. Also, I have created one script Include for this.
Workspace client script:
function onClick(g_form) {
var gajax = new GlideAjax("sn_hr_core.hr_ApprovalUtilsAjax");
gajax.addParam("sysparm_name", "isAdhocApprovers");
gajax.addParam("sysparm_sys_id", g_form.getUniqueValue());
gajax.addParam("sysparm_parent_table", g_form.getTableName());
gajax.getXMLAnswer(launchAdhocApprovalDialog);
function launchAdhocApprovalDialog(response) {
if (!response || response == 'false') {
g_form.addErrorMessage(getMessage('Adhoc approval action can not be performed'));
return;
} else {
var fields = [{
type: 'glide_list',
name: 'approver_users',
label: getMessage('Approver users'),
referringTable: 'sn_hr_core_service_activity',
referringRecordId: '-1',
dictionary: {
reference: 'sys_user'
},
mandatory: true,
},
{
type: 'choice',
name: 'wait_for',
value: 'anyone',
label: 'Wait For',
choices: [{
displayValue: 'Anyone to approve',
value: 'anyone'
},
{
displayValue: 'Everyone to approve',
value: 'everyone',
},
{
displayValue: 'First responce from aynyone',
value: 'first_response',
},
],
},
{
type: 'choice',
name: 'on_rejection',
value: 'resubmit',
label: 'On rejection',
choices: [{
displayValue: 'Allow resubmit of approvals',
value: 'resubmit'
},
{
displayValue: 'Closed incomplete',
value: 'close_case',
},
],
},
{
type: 'choice',
name: 'ac_or_wk',
value: '1',
label: 'Select work notes or additional comments',
choices: [{
displayValue: 'Additional comment',
value: '2'
},
{
displayValue: 'Work note',
value: '1'
},
],
},
{
type: 'textarea',
label: 'Reason',
name: 'reason,'
},
]
g_modal.showFields({
title: "Add an approval",
instruction: 'After filling out these details and sending for approval, an approval process will be added to this request.',
confirmTitle: "Send for Approval",
fields: fields,
size : 'lg',
}).then(function(fieldValues) {
var gr = new GlideAjax('sn_hr_core.add_an_approval');
gr.addParam('sysparm_name', 'sendApproval');
gr.addParam('sysparm_approvers', fieldValues.updatedFields[0].value);
gr.addParam('sysparm_waitFor', fieldValues.updatedFields[1].value);
gr.addParam('sysparm_onRejection', fieldValues.updatedFields[2].value);
gr.addParam('sysparm_tableName', g_form.getTableName());
gr.addParam('sysparm_sys_id', g_form.getUniqueValue());
gr.addParam('sysparm_comment', fieldValues.updatedFields[3].value);
gr.addParam('sysparm_reason', fieldValues.updatedFields[4].value);
gr.getXML();
g_form.save();
});
}
}
}
Script Include :
var add_an_approval = Class.create();
add_an_approval.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {
sendApproval: function() {
var usersStr = this.getParameter('sysparm_approvers');
var selectedWaitFor = this.getParameter('sysparm_waitFor');
var selectedOnReject = this.getParameter('sysparm_onRejection');
var tableName = this.getParameter('sysparm_tableName');
var task_sys_id = this.getParameter('sysparm_sys_id');
var comment = this.getParameter('sysparm_comment');
var reason = this.getParameter('sysparm_reason');
var caseGr = new GlideRecord(tableName);
if (!usersStr || !caseGr.get(task_sys_id))
return;
if (comment == 1) {
caseGr.work_notes = 'Adhoc approval reason:' + reason;
}
if (comment == 2) {
caseGr.comments = 'Adhoc approval reason:' + reason;
}
var vars = {};
vars.adhoc_approvers = usersStr;
vars.wait_for = selectedWaitFor;
vars.on_rejection = selectedOnReject;
sn_hr_core.hr_ApprovalUtil.startAdhocApprovalFlow(caseGr, vars);
caseGr.update();
var str = tableName + ".do?sysparm_query=sys_id=" + task_sys_id;
response.sendRedirect(str);
},
type: 'add_an_approval'
});
Please let me know if it is helpful for you or not.
Thank You!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
12-09-2022 03:17 AM
@Pratiksha_45 Thanks! It works perfectly.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-27-2023 01:58 AM
Hi, i tried using this solution. I am able to reach the glidemodal but after I click send for approval, no approval record is generated