Blog

Service Portal: Always show Requests and Approvals

There are a few different methods to always show approvals or requests in the top menu bar. Some involve cloning the header widget, adjusting angular templates, and even more creative designs.

I like the simplicity of this design below. You just add a couple menu items and some scripts, and you don’t even have to adjust a widget.

It effectively just takes to the page instead of a scripted list when there are no requests/approvals.

Code

Approvals

Script Include

Name: hasApprovals
API Name: global.hasApprovals
Application: Global
Accessible from: All application scopes
Active: true
Script:
function hasApprovals() {
	var grApproval = new GlideRecord('sysapproval_approver');
	grApproval.addQuery('approver', '=', gs.getUserID());
	grApproval.addQuery('state', '=', 'requested');
	grApproval.query();
	return grApproval.hasNext();
}

Menu Item

Label: Approvals
Parent Menu: SP Header Menu
Type: Page
Order: 400
Page: approvals
Condition: gs.isLoggedIn() && gs.getUser().hasRole('approver_user') && !hasApprovals()

Requests

SCRIPT INCLUDE

You may need to adjust this script include depending on what records you display in the service portal.

Name: hasRequests
API Name: global.hasRequests
Application: Global
Accessible from: All application scopes
Active: true
Script:
function hasRequests() {
	var recFound = false;
	
	var grST = new GlideRecord('service_task');
	grST.addActiveQuery();
	grST.addQuery('opened_by', gs.getUserID());
	grST.query();
	var hasST = grST.hasNext();

	var grIncident = new GlideRecord('incident');
	grIncident.addActiveQuery();
	grIncident.addQuery('caller_id', gs.getUserID());
	grIncident.query();
	var hasIncident = grIncident.hasNext();

	var grRequest = new GlideRecord('sc_request');
	grRequest.addActiveQuery();
	grRequest.addQuery('requested_for', gs.getUserID());
	grRequest.query();
	var hasRequest = grRequest.hasNext();
	
	if (hasST || hasIncident || hasRequest) {
		recFound = true;
	}
	
	return recFound;
}

MENU ITEM

Label: Requests
Parent Menu: SP Header Menu
Type: Page
Order: 400
Page: requests
Condition: gs.isLoggedIn() && !hasRequests()