Reassign Approval After Requested

Kerry10
Giga Expert

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.

1 ACCEPTED SOLUTION

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. 

 

View solution in original post

25 REPLIES 25

May I know the use case, why user should not have this on form, as he is inputing it afterwards as well

If it is always same group, then you can put that in some system properties and fetch at run time, else this option is also fine,

 

you add the field on screen, keep it hidden and onsubmit client script, check the value of that field, if empty make it visible, return false and alert user to populate that field and submit again

 

Use case is this: we have a field for "business reviewer" on our change form. When the user submits the change for approval, it routes to the business reviewer. Sometimes, after routing, the change owner wants to change the business reviewer to a different person. If this happens now, they need to reach out to me and I mark the first approver as "no longer required" and I add a second approver as requested. 

 

Ideally, we want the change owner to be able to reassign the approval on their own.

 

Id prefer not to have a "reassign to" field on the approval form at all times. If I keep it hidden, then I will need one action that causes it to appear and a second that saves it, right?

Yes. That's correct

VaranAwesomenow
Mega Sage

is this for all approvals or is this specific to change / request item ..

At the moment, just change requests. However I can see this being a request for other future process' as well.