If SLA is breached an incident, then Escalation button needs to be populated on portlal.

akin9
Tera Contributor

Hello @Gunjan Kiratkar and Team,

1.If SLA reached any incident, then SLA escalation button needs to be auto populated.

for end user view. 

2.The escalation function should be a documented email send out to Service-Desk Team, Asignee, Assinees Manager,

We got have some clues from our community, but im struggling to achieve this.

Pls find the below attached xml file same scenario achieved by someone.

below code is not working to me.

can you please support.

 

Server side

 

(function(){
var rec = $sp.getRecord();
if (rec == null){
return;
}
var escalated = $sp.getField(rec, 'u_escalated');
var fields = $sp.getFields(rec, 'u_escalate_reason,u_escalate_comments');
data.escalated = escalated;
data.fields = fields;
data.showEscalate = false;

data.table = input.table || $sp.getParameter("table")|| options.table;
data.sys_id = input.sys_id || $sp.getParameter("sys_id") || options.sys_id;
var gr = new GlideRecord(data.table);
if (!gr.isValid())
return;
if (!gr.get(data.sys_id))
return;
//Button Visibility
var getSLA = new GlideRecord('task_sla');
//getSLA.addEncodedQuery('task=input.sys_id^has_breached=true');
getSLA.addQuery("task",data.sys_id.toString());
getSLA.addQuery("has_breached",true);
getSLA.query();
if(getSLA.next()){
data.showEscalate = true;
}

if (input) {
var action = input.action;
if (data.table == 'incident') {
if (action == 'escalate') {
gr.setValue('u_escalate_reason', input.reason);
gr.setValue('u_escalate_comments', input.comments);
gr.setValue('u_escalated', true);
gr.setValue('u_escalated_by', gs.getUserID());
//gr.setValue('comments', 'incident escalated');
gr.update();
}
}
}
})();

 

Client side

 

function ($scope, spUtil) {
var c = this;
$scope.$on('record.updated', function(name, data) {
spUtil.update($scope);
});
$scope.$on("field.change", function(evt, parms) {
//confirm(parms.field.name + ' ' + parms.newValue + ' ' + parms.displayValue);
//if (parms.field.name == 'reason_picker'){
c.data.reason = parms.newValue;
//}
});
c.uiAction = function(action) {
if(c.data.comments == '' || c.data.reason == '') {
(alert("Please ensure you have selected a reason and entered comments"));
return;
}
if(!confirm("Are you sure you wish to escalate?"))
return;
c.data.action = action;
c.server.update().then(function() {
c.data.action = undefined;
})
}
}

 

Template.

 

<div class="panel b" ng-if="data.showEscalate">


<div class="panel-heading bg-primary">Escalation</div>

<div class="panel-body">


<div ng-if="data.escalated.value === '0'">


<div class="row" text-align: justify;>


<p>${If you feel your ticket is not being responded to in an appropriate manner, please complete the form below to escalate}</p>


</div>


<div class="row">


<label>${Escalate Reason}</label>


<sn-record-picker field="reason_picker" table="'sys_choice'" placeholder="${Select a resaon}"


display-field="'label'" value-field="'value'"


default-query="'element=u_escalate_reason'"></sn-record-picker>


<input class="form-control" ng-model="c.data.reason" type="hidden" />


</div>


<div class="row">


<label>${Escalate Comments}</label>


<textarea class="form-control" ng-model="c.data.comments"></textarea>


</div>

<div class="clearfix"></div>
<br>


<div class="row">


<button type="button" class="btn btn-success btn-block" ng-click="c.uiAction('escalate')">${Escalate Incident}</button>


</div>


</div>


<div ng-if="data.escalated.value === '1'">


<div class="row pull-left">


${This ticket has already been escalated!}


</div>


</div>


</div>


</div>

 

1 REPLY 1

akin9
Tera Contributor

Hi,@Gunjan Kiratkar @Ankur Bawiskar ,@saurav11 @Basheer ,@sandeep Dutta and Team

Its some urgent, we are struggling to achieve this ,

im not very familiar with widget creation

Can you please check and support to achieve.