How can i make Rejection comments mandatory on Service Portal

kashifansari07
Tera Expert

How can i make the rejection comments mandatory on Service Portal. We are in Paris release of ServiceNOW. Can someone help me in achieving the requirement.

1 ACCEPTED SOLUTION

not on RITM record, please check approval record. 

If you want to update on ritm , you can write business rule on approval record to copy the comment from approval record to RITM record. 

View solution in original post

11 REPLIES 11

This isn't working, i reviewed this previously. Service portal has evolved and since i have limited expertise in Service Portal domain i would need help on this one.

Try now, clone the widget "Approval Info"

 

Server Side :

 

(function() {
	data.actionPreventedMsg = gs.getMessage("Update failed");
	var gr = $sp.getRecord();
	if (gr == null || !gr.isValid()) {
		data.isValid = false;
		return;
	}

	data.isValid = true;
	data.isMine = isApprovalMine(gr);

	var approverDisplay = gr.approver.getDisplayValue();
	if (!data.isMine && approverDisplay)
		data.approverDisplay = approverDisplay;

	if (approverDisplay) {
		data.approvedMsg = gs.getMessage("Approved by {0}", approverDisplay);
		data.rejectedMsg = gs.getMessage("Rejected by {0}", approverDisplay);
	} else {
		data.approvedMsg = gs.getMessage("Approved");
		data.rejectedMsg = gs.getMessage("Rejected");
	}
	if (input && input.op && data.isMine) {
		gr.state = input.op;
		if (gr.state == "rejected") {
			gr.comments = "Requested Item rejected by "+gs.getUserDisplayName()+" via Service Portal \nRejected with comments: "+ input.comments; //Custom code (DFCT0010123)
		}
		data.updateID = gr.update();
		if (GlideStringUtil.nil(data.updateID)) {
			// update failed so fetch again for correct values
			gr = $sp.getRecord();
		}
		data.op = "";
	}

	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();
	data.esignature = {
		username:  gs.getUserName(),
		userSysId: gs.getUserID(),
		e_sig_required: checkESig(gr)
	};
	function checkESig(approvalGR) {
		var esigRegistryGR = new GlideRecord("e_signature_registry");
		if (!esigRegistryGR.isValid())
			return false;

		var table = approvalGR.getValue("source_table");
		if (!table)
			table = approvalGR.sysapproval.sys_class_name;
		if (!table)
			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();
	}
})();

 

 

Client Controller :

 

function ($scope, spUIActionsExecuter, spUtil, spModal) {
	var c = this;

	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 {	
			if (state == "rejected") {
				spModal.prompt("Provide a reason for rejecting this approval").then(function(newComments) {
					c.data.comments = newComments;
					c.data.op = state;
					c.server.update().then(function() {
						if (!c.data.updateID) // update failed
							spUtil.addErrorMessage(c.data.actionPreventedMsg);
						else
							c.data.state = state;
					});
				});
			}
			else 
			{
				c.data.op = state;
				c.server.update().then(function() {
					if (!c.data.updateID) // update failed
						spUtil.addErrorMessage(c.data.actionPreventedMsg);
					else
						c.data.state = state;
				});
			}
		}
	}	
}

 

Quick Demo:

 

find_real_file.png

 

Hello Harshvardhan,

Rejection reason is now available on Approval form however the comments are not captured anywhere

afind_real_file.png

AAlso, i can still reject any approval directly from the Approvals widget without any reason. Can you please help me with the server script and client script for the Approvals widget.