Service Portal Widget to display Approvals for RITM.
Can add to Standard Ticket Config Page for Requested Item.
(code works but could use some cleanup before using)

HTML
<div ng-if="data.canRead && data.isRITM && data.validStage" >
<div class="tab-content">
<div id="home" class="tab-pane fade in active">
<div ng-if="data.canRead && data.isRITM && data.validStage" class="panel b">
<div class="panel-body">
<div class="row">
<table class="table">
<thead>
<tr>
<th ng-if="data.hasTasks">${Approver}</th>
<th ng-if="data.hasTasks">${Status}</th>
<th ng-if="data.noTasks">There are no approvers on this request.</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="task in data.tasks">
<td>{{task.approver}}</td>
<td>{{task.state}}</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
Client Script
function() { /* widget controller */ var c = this;}
Server Script
(function() {
/* populate the 'data' object */
/* e.g., data.table = $sp.getValue('table'); */
var gr = $sp.getRecord();
data.canRead = gr.canRead();
data.isRITM = gr.getTableName() == 'sc_req_item' ;
data.stage = gr.stage.toString();
data.validStage = true;
data.hasTasks = true;
data.hasTasks2 = true;
if (!data.canRead)
return;
//Approvers
var tsk = new GlideRecord('sysapproval_approver');
tsk.addQuery('sysapproval', gr.getUniqueValue());
//tsk.addActiveQuery();
tsk.query();
data.tasks = [];
while(tsk.next()){
var temp1 = {};
temp1.approver = tsk.approver.getDisplayValue();
temp1.state = tsk.state.getDisplayValue();
data.tasks.push(temp1);
}
if (data.tasks <1){
data.hasTasks = false;
data.noTasks = true;
}
})();

Leave a comment