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

Again- Sorry for the delayed response. This has been EXTREMELY. helpful.

 

I was able to create the ui action/ui page/script include

 

The pop up appears correctly, however when I select a user I get the console message:

Unloaded table does not match current table sys_user

and If i type a user (not using the magnifying glass) I get the following:

ERROR: invalid field ('newUser') passed to g_form.hideFieldMsg

 

 

Then when I hit submit nothing happens.

 

I noticed that in your original comment you had the additional parameter "dialog.setPreference('currentRecord', sys_id)". Do I need to add this? 

 

Also, in the line var dialog = new GlideDialogWindow('x_25054_reassign_a_Reassign approval'); , is 'x_25054_reassign_a_Reassign approval' just the name of your ui page? is there a purpose to this naming convention? 

The 'x_25054_reassign_a_Reassign approval' part should be replaced by the endpoint of your UI page. The naming convention is in that format because I created a scoped app when testing this script for you. 

 

Make sure that end point is correct and let me know if that fixed your issues. 

My UI page doesn't have an endpoint url. the field is visible on the form design but nothing is showing up. The xml also just shows '<endpoint/>'

 

ah ok. in that case just use "reassign_approval_window". you don't have the endpoint because you are working in the global scope. 

Alright. That is what I'm doing but I'm still getting the above error. I'm assuming it has something to do with the reference?