The CreatorCon Call for Content is officially open! Get started here.

Hide UI Macro icon using onLoad Client script.

ar1
Kilo Sage

Hi All,

We created one UI Macro to display the approver's delegates and it's working fine.
But now we want to hide the UI Macro if the approver don't have the delegates.

We gone through the old threads and tried few possibilities to hide the macro, But no luck.

Can anyone please help us hide the Marco using onLoad client script.

 

Ui Macro Script:
Name: delegates_approver

 

<?xml version="1.0" encoding="utf-8" ?>
<j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">

<g:evaluate var="jvar_guid" expression="gs.generateGUID(this);" />
<j:set var="jvar_n" value="show_incidents_${jvar_guid}:${ref}"/>

<g:reference_decoration id="${jvar_n}" field="${ref}"
onclick="showRelatedList('${ref}'); "
title="${gs.getMessage('Show delegates')}" class="btn btn-ref btn-default hide_hosted_asset_flag" image="images/icons/tasks.gifx" icon="icon-tree-right"/>


<script>
function showRelatedList(reference) {
var w = new GlideDialogWindow('show_list');
w.setTitle('Delegate Users');
w.setPreference('table', 'sys_user_delegate_list');
w.setPreference('sysparm_view', 'default');
//Set the query for the list
var approver = g_form.getValue('approver');

var usr = 'user=' + approver + '^approvals=true' + '^delegate.active=true';

w.setPreference('sysparm_query', usr);
w.render();
}
</script>
</j:jelly>

 

Hi @RaghavSh 

Could you please help us here.

Advance thanks.

1 ACCEPTED SOLUTION

@ar1 the code worked perfectly fine for me pasting it again:

client:

function onLoad() {
//Type appropriate comment here, and begin script below

alert('one');

//var usr = g_form.getReference('approver');


var gr = new GlideAjax('approverDelegationsCheck');
gr.addParam('sysparm_name','getDelegates');
gr.addParam('sysparm_usr',g_form.getValue('approver'));
gr.getXML(callbackfunction);
} // this bracket is the onload function bracket, it should close here , check your code.
function callbackfunction(response)
{
var answer = response.responseXML.documentElement.getAttribute("answer");
alert(answer);
if(answer==0){
alert('inside loop');

gel("test").style.display="none"; //make sure isolate script of your client script is false

}

}

 

SI:

var approverDelegationsCheck = Class.create();
approverDelegationsCheck.prototype = Object.extendsObject(AbstractAjaxProcessor, {

getDelegates: function()
{
gs.log("raghav111");
var usr = this.getParameter('sysparm_usr');
var app = new GlideRecord('sys_user_delegate');
app.addQuery('user',usr);
app.addQuery('approvals',true);
app.query();
return app.getRowCount();
// while(app.next())
// {
// var delUsr = app.getValue('delegate');
// //var delUsr = app.getRowCount();
// return delUsr;
// }
},


type: 'approverDelegationsCheck'
});

 

I think you should paste the screenshots of codes. Also I have put logs, check if you are getting this log or any error when you load the approval page.


Raghav
MVP 2023
LinkedIn

View solution in original post

34 REPLIES 34

alert(answer); ans check if you are getting 0


Raghav
MVP 2023
LinkedIn

Hi Raghav,
Thanks for the resonse.
We added three alerts in script level.
only first alert ('one')is popping up.

alert(answer) nothing is coming.
We checked the script include level "client callable" checkbox also

advance thanks.

function onLoad() {
//Type appropriate comment here, and begin script below

alert('one');

//var usr = g_form.getReference('approver');

var gr = new GlideAjax('ApproverDelegationsCheck');
gr.addParam('sysparm_name','getDelegates');
gr.addParam('sysparm_usr',g_form.getReference('approver'));
gr.getXML(callbackfunction);
function callbackFunction(response)
{
var answer = response.getXML.documentElement.getAttribute("answer");
alert(answer);
if(answer==0){
alert('inside loop');

gel("test").style.display="none"; //make sure isolate script of your client script is false

}


}
}

Try making below changes in SI:

 

getDelegates: function()
{
var usr = this.getParameter('sysparm_usr');
var app = new GlideRecord('sys_user_delegate');
app.addQuery('sys_id',usr);
app.addQuery('approvals','true'); // true in quotes
app.query();

return app.getRowCount();
},


type: 'ApproverDelegationsCheck'
});


Raghav
MVP 2023
LinkedIn

Hi Raghava,
Many thanks for the continues support.
We tried your above changes, But no luck.
And coming to CS alerts, only first alert popping up.

Advance thanks.

@ar1 there is a type in your code, use below:

client:

var gr = new GlideAjax('ApproverDelegationsCheck');
gr.addParam('sysparm_name','getDelegates');
gr.addParam('sysparm_usr',g_form.getValue('approver'));
gr.getXML(callbackfunction);
}
function callbackfunction(response)
{
var answer = response.responseXML.documentElement.getAttribute("answer");
alert(answer);
if(answer==0){
alert('inside loop');

gel("test").style.display="none"; //make sure isolate script of your client script is false

}

}

 

Script include:

getDelegates: function()
{
var usr = this.getParameter('sysparm_usr').toString();
var app = new GlideRecord('sys_user_delegate');
app.addQuery('user',usr);
app.addQuery('approvals',true); // true in quotes
app.query();

return app.getRowCount();
},


Raghav
MVP 2023
LinkedIn