spUtil

A reference page for spUtil

Last modified 2025-06-20

Jace Benson

Table of content
  1. What is spUtil
  2. Documented
  3. addErrorMessage
  4. [addErrorMessage(string)]
  5. [record]
  6. addInfoMessage
  7. addInfoMessage(string)
  8. [record]
  9. addTrivialMessage
  10. addTrivialMessage(string)
  11. [record]
  12. format
  13. get
  14. refresh
  15. update
  16. recordWatch
  17. Undocumented
  18. getHeaders
  19. getHeaders()
  20. getWidgetURL
  21. setBreadCrumb
  22. setSearchPage
  23. setSearchPage(searchPage)
  24. getURL
  25. getURL(type)
  26. scrollTo
  27. getAccelerator
  28. getAccelerator(char)
  29. createUid
  30. createUid(str)
  31. parseAttributes
  32. parseAttributes(strAttributes)
  33. getHost
  34. setPreference
  35. getPreference
  36. getPageUri

What is spUtil

spUtil is a really useful utility class, the problem is I can never seem to find it when I need to look it up as it's not on developer.servicenow.com, but is instead on docs.servicenow.com.

So I'm making a list of their functions for my reference as it's coded here or more readable here.

First I'll go over the documented methods, then the undocumented methods, as there always seems to be some.

Documented

addErrorMessage

[addErrorMessage(string)]

[record]

.service-now.com/sp_widget_list.do?sysparm_query=id=widget-sc-cat-item

docs

// source: SC Catalog Item[widget-sc-cat-item] line 42
spUtil.addErrorMessage($scope.m.largeAttachmentMsg);

addInfoMessage

addInfoMessage(string)" class="pos-absolute top-50 left-0 t-tY-50 | p-4 ml-1 | td-none | brad-4 bc-neutral-100 bwidth-1 bstyle-dashed bcolor-neutral-500 __hover-1 __soft-shadow" ml-3="xs,sm"> addInfoMessage(string)

[record]

service-now.com/sp_widget_list.do?sysparm_query=id=widget-sc-cat-item

docs

// source: SC Catalog Item[widget-sc-cat-item] line 210
spUtil.addInfoMessage(t);//t is just a string

addTrivialMessage

addTrivialMessage(string)" class="pos-absolute top-50 left-0 t-tY-50 | p-4 ml-1 | td-none | brad-4 bc-neutral-100 bwidth-1 bstyle-dashed bcolor-neutral-500 __hover-1 __soft-shadow" ml-3="xs,sm"> addTrivialMessage(string)

[record]

service-now.com/sp_widget_list.do?sysparm_query=id=widget-form

docs

// source: Form[widget-form] line 110
spUtil.addTrivialMessage(message);

format

format(string template, object data)

[record] service-now.com/sp_widget_list.do?sysparm_query=id=widget-sc-cat-item

docs

// source: SC Catalog Item[widget-sc-cat-item] line 198
var url = spUtil.format(
    c.options.url,
    {
        page: page,
        table: table,
        sys_id: sys_id
    }
);

get

get(string widgetid)

[record] service-now.com/sp_widget_list.do?sysparm_query=id=sqanda-create-question

docs

// source: SQANDA Create Question[sqanda-create-question] line 32
spUtil.get($scope, x).then(function(response) {
    var newURL = $location.search({id: 'kb_social_qa_question', sys_id: response.data.sys_id});
    spAriaFocusManager.navigateToLink(newURL.url());
});

refresh

refresh(object $scope)

docs

update

update(object $scope)

[record] service-now.com/sp_widget_list.do?sysparm_query=sys_id=f37aa302cb70020000f8d856634c9cfc

docs

// source: Approvals[] line 14
function get() {
    spUtil.update($scope);
}

recordWatch

recordWatch(object $scope, string table, string filter, function callback)

[record] service-now.com/sp_widget_list.do?sysparm_query=sys_id=f37aa302cb70020000f8d856634c9cfc

docs

// source: Approvals[] line 12
spUtil.recordWatch(
    $scope,
    "sysapproval_approver",
    "state=requested^approverIN" + $scope.data.myApprovals.toString()
);

Also, there's a number of tables that are blocked from being watched, you can see this list in your instance by running;

gs.info(gs.getProperty("glide.record_watcher.table.blacklist"))
//this property is non-editable

Undocumented

getHeaders

getHeaders()" class="pos-absolute top-50 left-0 t-tY-50 | p-4 ml-1 | td-none | brad-4 bc-neutral-100 bwidth-1 bstyle-dashed bcolor-neutral-500 __hover-1 __soft-shadow" ml-3="xs,sm"> getHeaders()

directive.spReferenceField.js#40

var headers = spUtil.getHeaders();
// returns something like so
// {
//   'Accept': 'application/json',
//   'x-portal': $rootScope.portal_id
// };

getWidgetURL

getWidgetURL(string widgetid or string object)

directive.spReferenceField.js#36

var widgetUrl = spUtil.getWidgetURL('sys_id');
// returns something like so
// '/api/now/sp/widget/sys_id';

setBreadCrumb

setBreadCrumb(object $scope, list)

[record] service-now.com/sp_widget_list.do?sysparm_query=id=tagged-question-list

// source: Tagged Question List[] line 3
spUtil.setBreadCrumb($scope, [
    {
        label: c.data.community.Breadcrumb,
        url: '#'
    }
])

setSearchPage

setSearchPage(searchPage)" class="pos-absolute top-50 left-0 t-tY-50 | p-4 ml-1 | td-none | brad-4 bc-neutral-100 bwidth-1 bstyle-dashed bcolor-neutral-500 __hover-1 __soft-shadow" ml-3="xs,sm"> setSearchPage(searchPage)

[record] service-now.com/sp_widget_list.do?sysparm_query=sys_id=b8c57073cb10020000f8d856634c9cfc

// source: Search Page[] line 2
spUtil.setSearchPage($scope.data.t);//t is a string passed via url here

getURL

getURL(type)" class="pos-absolute top-50 left-0 t-tY-50 | p-4 ml-1 | td-none | brad-4 bc-neutral-100 bwidth-1 bstyle-dashed bcolor-neutral-500 __hover-1 __soft-shadow" ml-3="xs,sm"> getURL(type)

[record]service-now.com/sp_widget_list.do?sysparm_query=id=widget-login

// source: Login[widget-login] line 21
var url = spUtil.getURL({sysparm_type: 'view_form.login'});
// I assume this returns a string, I'll have to check

scrollTo

scrollTo(id, time)

[record] service-now.com/sp_widget_list.do?sysparm_query=id=widget-sc-order-guide

// source: SC Order Guide[widget-sc-order-guide] line 28
spUtil.scrollTo("#" + item.sys_id);

getAccelerator

getAccelerator(char)" class="pos-absolute top-50 left-0 t-tY-50 | p-4 ml-1 | td-none | brad-4 bc-neutral-100 bwidth-1 bstyle-dashed bcolor-neutral-500 __hover-1 __soft-shadow" ml-3="xs,sm"> getAccelerator(char)

[record] service-now.com/sp_widget_list.do?sysparm_query=id=widget-form

// source: Form[widget-form] line 5
spUtil.getAccelerator('s');
// returns for mac '⌘ + ' + char;
// returns for otherwise 'Ctrl + ' + char;

createUid

createUid(str)" class="pos-absolute top-50 left-0 t-tY-50 | p-4 ml-1 | td-none | brad-4 bc-neutral-100 bwidth-1 bstyle-dashed bcolor-neutral-500 __hover-1 __soft-shadow" ml-3="xs,sm"> createUid(str)

directive.spWidget.js#14

if (scope.widget.update) {
    name += spUtil.createUid('xxxxx');
}

parseAttributes

parseAttributes(strAttributes)" class="pos-absolute top-50 left-0 t-tY-50 | p-4 ml-1 | td-none | brad-4 bc-neutral-100 bwidth-1 bstyle-dashed bcolor-neutral-500 __hover-1 __soft-shadow" ml-3="xs,sm"> parseAttributes(strAttributes)

directive.spChoiceList.js#37

function isRefQualElement(fieldName) {
    var refQualElements = [];
    if (field.attributes && field.attributes.indexOf('ref_qual_elements') > -1) {
        var attributes = spUtil.parseAttributes(field.attributes);
        refQualElements = attributes['ref_qual_elements'].split(',');
    }
    return field.reference_qual.indexOf(fieldName) != -1 || refQualElements.indexOf(fieldName) != -1;
}

getHost

getHost()

setPreference

setPreference(pref,value)

getPreference

getPreference(pref,value)

getPageUri

getPageUri()