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

View solution in original post

34 REPLIES 34

HI Raghava,
Firstly many many thanks for your continuous support from last few days.

Big respect to you.


And finally we set the below mentioned query in "encoded query" and it's working as per the requirement.

 

app.addEncodedQuery('starts<=javascript&colon;gs.endOfToday()^ends>=javascript&colon;gs.beginningOfToday()');

 




Thanks.

jaheerhattiwale
Mega Sage
Mega Sage

@ar1 You can try below code:

 

<?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:evaluate var="jvar_deletegate_GR" object="true">
var delegate = new GlideRecord('sys_user_delegate');
delegate.addQuery("starts<=javascript&colon;gs.endOfToday()^ends>=javascript&colon;gs.beginningOfToday()");
delegate.addQuery("user="+gs.getUserID());
delegate.addAggregate("COUNT");
delegate.query();
delegate;
</g:evaluate>

<j:if test="${jvar_deletegate_GR.hasNext()}">
<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"/>
</j:if>

<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>
 
Please mark as correct answer if this solves your issue.
Please mark the answer as correct or helpful based on impact
ServiceNow Community Rising Star, Class of 2023

Hi jaheerhattiwale,
Many thanks for the response.
Did we need to change anything on client script or script include level??

Advance thanks.

@ar1 I dont think so as we are adding the if condition in ui macro itself

Please mark the answer as correct or helpful based on impact
ServiceNow Community Rising Star, Class of 2023

Hi Jaheer,
Thanks for the response.
We tried your code, the Ui Macro icon not showing in all the scenarios. even though approver have the delegates.

Advance thanks.