- /
-
- Docs /
- spUtil
spUtil
A reference page for spUtil
Last modified 2025-06-20
Jace Benson
Table of content
- What is spUtil
- Documented
- addErrorMessage
- [addErrorMessage(string)]
- [record]
- addInfoMessage
- addInfoMessage(string)
- [record]
- addTrivialMessage
- addTrivialMessage(string)
- [record]
- format
- get
- refresh
- update
- recordWatch
- Undocumented
- getHeaders
- getHeaders()
- getWidgetURL
- setBreadCrumb
- setSearchPage
- setSearchPage(searchPage)
- getURL
- getURL(type)
- scrollTo
- getAccelerator
- getAccelerator(char)
- createUid
- createUid(str)
- parseAttributes
- parseAttributes(strAttributes)
- getHost
- setPreference
- getPreference
- 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.
| Method | Documented |
|---|---|
| addErrorMessage | Yes |
| addInfoMessage | Yes |
| addTrivialMessage | Yes |
| createUid | No |
| format | Yes |
| getAccelerator | No |
| getHeaders | No |
| getHost | No |
| getPageUri | No |
| getPreference | No |
| getURL | No |
| getWidgetURL | No |
| get | Yes |
| parseAttributes | No |
| recordWatch | Yes |
| refresh | Yes |
| scrollTo | No |
| setBreadCrumb | No |
| setPreference | No |
| setSearchPage | No |
| update | Yes |
Documented
addErrorMessage
[addErrorMessage(string)]
[record]
.service-now.com/sp_widget_list.do?sysparm_query=id=widget-sc-cat-item
// 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
// 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
// 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
// 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
// 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)
update
update(object $scope)
[record] service-now.com/sp_widget_list.do?sysparm_query=sys_id=f37aa302cb70020000f8d856634c9cfc
// 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
// 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
clone_preserved_dataclone_tokendigest_propertiesinstancelicense_detailspa_job_logsrole_has_licensesaml2_update1_propertiessp_logsso_federationsso_propertiessys_audit_deletesys_audit_relationsys_broadcast_messagesys_broadcast_message_m2msys_cache_flushsys_cluster_messagesys_cluster_statesys_db_cachesys_dictionary_overridesys_emailsys_email_accountsys_email_logsys_event_processorsys_glide_objectsys_import_setsys_import_set_rowsys_import_set_row_errorsys_import_set_runsys_progress_workersys_progress_worker_domainsys_report_summarysys_report_summary_linesys_rw_actionsys_rw_amb_actionsys_statussys_triggersys_ui_navigator_historysys_update_setsys_update_set_logsys_update_versionsys_update_xmlsys_upgrade_historysys_upgrade_history_logsys_user_preferencesys_user_sessionsys_user_tokenua_app_metadataua_app_usageusageanalytics_countusageanalytics_count_cfgwf_commandwf_contextwf_executingwf_historywf_transition_historywf_workflow_execution
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)
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)
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
setPreference
getPreference
getPageUri
getPageUri()