Making comments field mandatory in Service Portal

manibaig
Mega Guru

I want Comments field to be mandatory every time user Approves or Rejects a request. I tried using below link and was able to create comments box but it's not working properly, i can still Approve/Reject the ticket without entering any comments.. Kingston

 

https://community.servicenow.com/community?id=community_blog&sys_id=228da669dbd0dbc01dcaf3231f9619f3

find_real_file.png

1 ACCEPTED SOLUTION

Oh...Why do you have two action functions in client controller? You should remove one

 

c.action = function(state) {

if (c.data.comment == '' )//&& state == 'rejected'){
{
$window.alert('Comments cannot be empty')
return false; }
c.data.op = state;
c.data.state = state;
c.server.update(); } //H
var ESIGNATURE = {
"approved": "cbfe291147220100ba13a5554ee4904d",
"rejected": "580f711147220100ba13a5554ee4904b"
};

spUtil.recordWatch($scope, "sysapproval_approver", "state=requested^sys_id="+ c.data.sys_id);

c.action = function(state) {
if(c.data.esignature.e_sig_required) {
var requestParams = {
username: c.data.esignature.username,
userSysId: c.data.esignature.userSysId
};
spUIActionsExecuter.executeFormAction(ESIGNATURE[state], "sysapproval_approver" , c.data.sys_id, [] , "", requestParams).then(function(response) {
});
} else {
c.data.op = state;
c.data.state = state;
c.server.update();
}
}
}


Please mark this response as correct or helpful if it assisted you with your question.

View solution in original post

9 REPLIES 9

SanjivMeher
Kilo Patron
Kilo Patron

Can you post your widget HTML code and Client Controller Code?


Please mark this response as correct or helpful if it assisted you with your question.

CLIENT Controller:-

function ($scope, spUIActionsExecuter, spUtil, $window, spModal) {
var c = this;
/// HEre to

c.action = function(state) {

if (c.data.comment == '' )//&& state == 'rejected'){
{
$window.alert('Comments cannot be empty')
return false; }
c.data.op = state;
c.data.state = state;
c.server.update(); } //H
var ESIGNATURE = {
"approved": "cbfe291147220100ba13a5554ee4904d",
"rejected": "580f711147220100ba13a5554ee4904b"
};

spUtil.recordWatch($scope, "sysapproval_approver", "state=requested^sys_id="+ c.data.sys_id);

c.action = function(state) {
if(c.data.esignature.e_sig_required) {
var requestParams = {
username: c.data.esignature.username,
userSysId: c.data.esignature.userSysId
};
spUIActionsExecuter.executeFormAction(ESIGNATURE[state], "sysapproval_approver" , c.data.sys_id, [] , "", requestParams).then(function(response) {
});
} else {
c.data.op = state;
c.data.state = state;
c.server.update();
}
}
}

HTML:-

<div ng-if="c.data.isValid" class="panel panel-{{::c.options.color}} b">
<div class="panel-heading">
<h4 class="panel-title" ng-if="c.data.isMine && (c.data.state == 'requested')">${This {{c.data.label}} requires your approval}</h4>
<h4 class="panel-title" ng-if="!c.data.isMine && (c.data.state == 'requested')">${This {{c.data.label}} requires approval <span ng-if="c.data.approver"> by {{c.data.approver}}}</span></h4>
<h4 class="panel-title" ng-if="c.data.state == 'approved'">${Approved} <sn-time-ago timestamp="::c.data.sys_updated_on" /></h4>
<h4 class="panel-title" ng-if="c.data.state == 'rejected'">${Rejected} <sn-time-ago timestamp="::c.data.sys_updated_on" /></h4>
</div>
<div class="panel-body">
<form ng-submit="$event.preventDefault()" class="form-horizontal">
<div ng-if="c.data.fields.length > 0">
<div ng-repeat="field in c.data.fields" class="m-b-xs" ng-if="field.value">
<label class="m-n">{{field.label}}</label>
<span ng-switch="field.type">
<div ng-switch-when="glide_date_time" title="{{field.display_value}}"><sn-time-ago timestamp="::field.value" /></div>
<div ng-switch-default >{{field.display_value}}</div>
</span>
</div>
</div>


<div ng-if="c.data.isMine && (c.data.state == 'requested')" class="question">

<button type="button" name="approve" class="btn btn-success btn-question" ng-click="c.action('approved')">${Approve}</button>
<div class="spacer"></div>
<button type="button" name="reject" class="btn btn-default btn-question" ng-click="c.action('rejected')">${Reject}</button>
<textarea ng-model="c.data.comment" style="color: grey; width: 100%; margin-top: .5em;" placeholder="Please enter your comments" class="form-control" rows="5"></textarea><!--hi-->
</div>
</form>
</div>
</div>

SERVER:-

(function() {
var gr = $sp.getRecord();
//here
if (input && input.op && gr) {
gr.state = input.op;
gr.update();
}
if (input.comment){
gr.comments = input.comment;
gr.update(); } //here


if (gr == null || !gr.isValid()) {
data.isValid = false;
return;
}

data.isValid = true;
data.isMine = gr.getValue("approver") == gs.getUserID();

if (!data.isMine && !gr.approver.nil())
data.approver = gr.approver.getDisplayValue();
if (input && input.op) {
gr.state = input.op;
gr.update();
}
var fields = $sp.getFields(gr, 'state,sys_created_on');
if (gr.sys_mod_count > 0)
fields.push($sp.getField(gr, 'sys_updated_on'));

data.fields = fields;
data.state = gr.state.toString();
data.sys_updated_on = gr.sys_updated_on.toString();
data.sys_id = gr.getUniqueValue();
data.table = gr.getTableName();
data.label = getRecordBeingApproved(gr).getLabel();
//new lines
data.approveMsg = gs.getMessage("You have approved this request");
data.rejectMsg = gs.getMessage("You have rejected this request");
//
data.esignature = {
username: gs.getUserName(),
userSysId: gs.getUserID(),
e_sig_required: checkESig(gr.getValue("source_table"))
};
function checkESig(table) {
var esigRegistryGR = new GlideRecord("e_signature_registry");
if (!esigRegistryGR.isValid())
return false;
esigRegistryGR.addQuery("enabled", "true");
esigRegistryGR.addQuery("table_name", table);
esigRegistryGR.query();
return esigRegistryGR.hasNext();
}
function getRecordBeingApproved(gr) {
if (!gr.sysapproval.nil())
return gr.sysapproval.getRefRecord();

return gr.document_id.getRefRecord();
}
})();

 

Can you add this let me know what popup do you get. also compare with undefined

 

c.action = function(state) {

alert('c.data.comment is ---'+c.data.comment);

if ((c.data.comment =='' || c.data.comment==undefined) && state == 'rejected'){
{
$window.alert('Comments cannot be empty')
return false; }
c.data.op = state;
c.data.state = state;
c.server.update(); } //H
var ESIGNATURE = {
"approved": "cbfe291147220100ba13a5554ee4904d",
"rejected": "580f711147220100ba13a5554ee4904b"
};


Please mark this response as correct or helpful if it assisted you with your question.

No pop-up displayed