We've updated the ServiceNow Community Code of Conduct, adding guidelines around AI usage, professionalism, and content violations. Read more

Roles to make breadcrumb widget work?

Conan Lloyd1
Tera Contributor

We seem to be having a role issue with the snh breadcrumb widget.  When a user with the itil role views the page in the portal, they see this:

ConanLloyd1_0-1768257440418.png

 

But when a non-itil user looks at the same page:

ConanLloyd1_1-1768257558068.png

Note the blank spot in the breadcrumbs.  Also if I click on the REQ link, I get a 404 page, likely since the page shows up as undefined in the link: https://lazarddev.service-now.com/sp?id=undefined&sys_id=64af59d02b2c325041a5fc385e91bf78&table=sc_r...

 

Does anyone have any idea where I can look for what's causing this?  I tried giving a read role to the sc_request table without effect

 

~Conan

6 REPLIES 6

brianlan25
Kilo Patron

Did you create a custom breadcrumb widget? That does not look like the out of the box breadcrumb. Also did you customize your number as there is not normally a dash in it.

Nayara Gomes da
Tera Contributor

Can you give more information about if any widget was cloned? Or do you create a new taxonomy? Or any user criteria?

Conan Lloyd1
Tera Contributor

Sorry, I apparently wasn't firing on all cylinders.  It came from ServiceNow Hackery.  Here's the widget details, I put the OOB breadcrumb widget in place and it gives the same behavior.

Server:

(function() {
	var thisSession = gs.getSessionID();
	if (input) {
		if (Array.isArray(input.breadcrumbs)) {
			gs.getUser().setPreference('snhbc', JSON.stringify(input.breadcrumbs));
			gs.getUser().setPreference('snhses', thisSession);
		}
	} else {
		data.table = $sp.getParameter('table');
		data.sys_id = $sp.getParameter('sys_id');
		if (data.table) {
			var rec = new GlideRecordSecure(data.table);
			if (data.sys_id) {
				rec.get(data.sys_id);
				data.page = rec.getDisplayValue();
				if (data.page.indexOf('Created') == 0) {
					data.page = null;
				}
				if (!data.page) {
					data.page = rec.getDisplayValue('number');
				}
				if (!data.page) {
					data.page = rec.getDisplayValue('name');
				}
				if (!data.page) {
					data.page = rec.getDisplayValue('short_description');
				}
				if (!data.page) {
					data.page = rec.getLabel();
				}
			} else {
				data.page = rec.getPlural();
			}
		}
		data.breadcrumbs = [];
		var snhbc = gs.getPreference('snhbc');
		var snhses = gs.getPreference('snhses');
		if (snhbc && snhses && snhses == thisSession) {
			data.breadcrumbs = JSON.parse(snhbc);
		}
	}
})();

 

Client Controller:

function snhBreadcrumbs($scope, $rootScope, $location, spUtil) {
	var c = this;
	c.expanded = !spUtil.isMobile();
	c.expand = function() {
		c.expanded = true;
	};
	c.breadcrumbs = [];
	var thisTitle = c.data.page || document.title;
	if ($rootScope.portal && $rootScope.portal.title) {
		var portalSuffix = ' - ' + $rootScope.portal.title.trim();
		var cutoff = thisTitle.indexOf(portalSuffix);
		if (cutoff != -1) {
			thisTitle = thisTitle.substring(0, cutoff);
		}
	}
	var thisPage = {url: $location.url(), id: $location.search()['id'], label: thisTitle};

	if (thisPage.id && thisPage.id != $rootScope.portal.homepage_dv) {
		var pageFound = false;
		for (var i=0;i<c.data.breadcrumbs.length && !pageFound; i++) {
			if (c.data.breadcrumbs[i].id == thisPage.id) {
				c.breadcrumbs.push(thisPage);
				pageFound = true;
			} else {
				c.breadcrumbs.push(c.data.breadcrumbs[i]);
			}
		}
		if (!pageFound) {
			c.breadcrumbs.push(thisPage);
		}
	}
	c.data.breadcrumbs = c.breadcrumbs;
	c.server.update();
	c.returnPath = '?';
	if (c.breadcrumbs.length > 1) {
		c.returnPath = c.breadcrumbs[c.breadcrumbs.length - 2].url;
	}
	shareReturnPath();
	$rootScope.$on('snhShareReturnPath', function() {
		shareReturnPath();
	});

	function shareReturnPath() {
		$rootScope.$broadcast('snhBreadcrumbs', {
			returnPath: c.returnPath
		});
	}
}

 

HTML:

<div aria-label="${Page breadcrumbs}" role="navigation">
<ul class="nav nav-pills nav-sm">
  <li>
    <span><a ng-href="?id={{portal.homepage_dv}}">${Home}</a>
      <i aria-hidden="true" class="fa fa-chevron-right"></i></span>
  </li>
  <li ng-if="!c.expanded &amp;&amp; c.breadcrumbs &amp;&amp; c.breadcrumbs.length > 2">
    <span><a ng-click="c.expand()"><i class="fa fa-ellipsis-h" aria-hidden="true"></i></a>
      <i aria-hidden="true" class="fa fa-chevron-right"></i></span>
  </li>
  <li ng-if="!c.breadcrumbs"><span><a style="display: inline;" class="a-disabled" aria-current="page" href>{{page.title}}</a></span></li>
  <li ng-if="c.expanded || ((c.breadcrumbs.length > 2  &amp;&amp; $index > c.breadcrumbs.length-3) || (c.breadcrumbs.length <= 2))" ng-repeat="item in c.breadcrumbs track by $index" >
    <span><a ng-if="!$last" ng-href="{{item.url}}">{{item.label}}</a>
      <a class="a-disabled" ng-if="$last" aria-current="page" href>{{item.label}}</a>
      <i aria-hidden="true" ng-if="!$last" class="fa fa-chevron-right"></i></span>
  </li>
</ul>
</div>

Don't worry, it happens. Other question: did you saw if the user preferences was filled with the user that haven't the itil role?