The Now Platform® Washington DC release is live. Watch now!
06-13-2018 08:13 AM
Hi All,
I have a requirement to hide widget based on RITM stage in service portal.
I have server script as below
Server script
(function() {
// Get table & sys_id
data.table = input.table || $sp.getParameter("table");
data.sys_id = input.sys_id || $sp.getParameter("sys_id");
// Valid GlideRecord
gr = new GlideRecord(data.table);
if (!gr.isValid())
return;
// Valid sys_id
if (!gr.get(data.sys_id))
return;
if (input && input.action) {
var action = input.action;
// If request item table table
if (data.table == 'sc_req_item') {
data.stage = gr.getValue('stage');
if (action == 'cancel') {
// Cancel Request
var req = new GlideRecord('sc_request');
req.get('sys_id',gr.request);
req.setValue('request_state', 'closed_cancelled');
req.setValue('stage', 'closed_incomplete');
req.setValue('approval', 'rejected');
req.update();
}
}
}
})();
and HTML Tag as below
<div ng-if="data.stage==waiting_for_approval">
<button type="button" name="reject" class="btn btn-danger btn-lg btn-acceptRejectSolution" ng-click="c.uiAction('cancel')">
<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>
${Cancel Request}</button>
</div>
If I click on cancel request button,
Request is getting cancelled and button is invisible. If I refresh the page, again button is visible, in all stages.
Please suggest.
06-13-2018 02:04 PM
I think you problem is that the data.stage isn't set before something happens (since it's within the IF-statement of the code) Move this "data.stage = gr.getValue('stage');" to above the "if (input && input.action) {" and it will be hide it from the start. Then I guess you need to perhaps trim it and move some more stuff.
I would do the check in the server side instead and just have a variable like data.showWidget and use that to hide and show the button.
Take a look here. I made a simple video how to do the stuff you are looking for: