The Now Platform® Washington DC release is live. Watch now!
‎07-27-2018 12:41 PM
I have a request to allow users to reassign an approval after it has been requested.
I couldn't find any OOB functionality that is like this, so I figured I have to make my own UI action.
I am trying to think of the best way to do this. Ideally, when the button is clicked I would like a pop up to appear with a reference field for the user table, and then when they submit, the approval will be reassigned to this value.
I have made a UI action with a client side pop up window before, but it only had plain text. How can I make a "mini form" appear as a pop up?
I'm looking for any help with this, or im open to any alternate suggestions!
thanks.
Solved! Go to Solution.
‎08-01-2018 10:33 AM
I created a basic UI page, and script include to make the change to the approval record.
Here are the details. the items in BOLD will change based on what you name the records.
UI ACTION:
function popupWindow() {
var dialog = new GlideDialogWindow('x_25054_reassign_a_Reassign approval');
dialog.setTitle("Approval Re-assign");
dialog.setSize(500,225);
dialog.adjustBodySize();
dialog.render();
return false;
}
UI PAGE:
HTML -
<?xml version="1.0" encoding="utf-8" ?>
<j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">
<h2 >Re-assign this approval</h2>
<g:ui_form>
<tr><td>Re-assign to: </td><td><g:ui_reference name="newUser" table="sys_user" completer="AJAXTableCompleter" columns="first_name" /></td></tr>
<tr><td></td></tr>
<g:dialog_buttons_ok_cancel ok="validateChanges();" cancel="processCancel();" ok_type="button" cancel_type="button" />
</g:ui_form>
</j:jelly>
CLIENT SCRIPT -
function validateChanges(){
var user = gel("newUser").value;
var id = gel('sys_uniqueValue').value;
GlideDialogWindow.get().destroy();
var ga = new GlideAjax('reAssignApprover');
ga.addParam('sysparm_name', 'reAssign');
ga.addParam('sysparm_user', user);
ga.addParam('sysparm_id', id);
ga.getXML();
}
function processCancel(){
GlideDialogWindow.get().destroy();
}
SCRIPT INCLUDE:
var reAssignApprover = Class.create();
reAssignApprover.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {
reAssign: function(){
var user = this.getParameter('sysparm_user');
var id = this.getParameter('sysparm_id');
var gr = new GlideRecord('sysapproval_approver');
gr.get(id);
gr.query();
while(gr.next()){
gr.setValue('approver',user);
gr.update();
}
gs.addInfoMessage('This approval record has been re-assigned');
},
type: 'reAssignApprover'
});
Hope this helps. let me know if you still need some help.
‎07-27-2018 12:45 PM
you can have the field on the form itself and set the assignment group to the value entered on the form
‎07-27-2018 12:53 PM
I thought about this - adding a field 'reassign to' and then having that populate the 'assign to' field. This isn't ideal though as I don't want the field to always be on the form.
Or, I suppose I could say on click of the button the "reassign to" field becomes visible...and then have them click reassign again?
I guess I'm just confused on how your suggestion would look to the user.
‎07-27-2018 12:56 PM
you can still create a UI action that will then display the field on the form. that way you can hide it from view unless the button is clicked.
‎07-27-2018 12:58 PM
Then they would need to click the reassign button twice, right?
click once - field appears
fill in the field
click again - saves and reassigns
Or am I missing something?