Service Portal & Client Scripts

Service Portal runs client scripts & catalog client scripts as long as the UI Type is set to "Mobile" or "Both". Many of your existing client scripts can be set to "Both" as long as the api calls are supported by the mobile client scripting environment.

Please note: This document applies to the Form widget and SC Catalog Item widget. Client Scripts are different than a widget's client controller & link script blocks.

Unsupported client scripting globals

The following globals and APIs are unavailable in service portal client script:

  • window
  • document
  • $
  • jQuery
  • $$
  • $j
  • angular

Client scripting in widgets

Widget client controllers are full angular controllers and are not subject to the restrictions listed above. Feel free to use jQuery and Angular as needed.

Embedded widgets & g_form

When using the Service Catalog variable type "Macro" and "Macro with Label" you can pick a widget to embed in a catalog item form. Within that embedded widget's client controller you can access the field object and catalog item g_form instance using:

  • $
  • $

Checking desktop vs mobile runtime

You might want to mark a client script compatible with both Desktop and Mobile but still do something different depending on the runtime use this:

  if (window === null)
    // Write your mobile compatible code here
    // Write your desktop compatible code here

Supported client scripting APIs

These are the officially supported client scripting APIs you can use in onLoad, onChange, and onSubmit client scripts.


  • addDecoration(fieldName, icon, title)
  • addErrorMessage(message)
  • addInfoMessage(message)
  • addOption(fieldName, value, label, index)
  • clearMessages()
  • clearOptions(fieldName)
  • clearValue(fieldName)
  • getActionName()
  • getBooleanValue(fieldName)
  • getDecimalValue(fieldName)
  • getDisplayValue(fieldName)
  • getEncodedRecord()
  • getFieldNames()
  • getIntValue(fieldName)
  • getLabel(fieldName)
  • getReference(fieldName, callback)
  • getRelatedListNames()
  • getSectionNames()
  • getSysId()
  • getTableName()
  • getValue(fieldName)
  • hasField(fieldName)
  • hideAllFieldMsgs(type: "info | error")
  • hideErrorBox(fieldName)
  • hideFieldMsg(fieldName, clearAll)
  • hideRelatedList(listTableName)
  • hideRelatedLists()
  • isMandatory(fieldName)
  • isNewRecord()
  • isReadOnly(fieldName)
  • isVisible(fieldName)
  • removeDecoration(fieldName, icon, title)
  • removeOption(fieldName, value)
  • save()
  • serialize(onlyDirtyFields)
  • setFieldPlaceholder(fieldName, placeholder)
  • setLabel(fieldName, label)
  • setMandatory(fieldName, isMandatory)
  • setReadOnly(fieldName, isReadOnly)
  • setSectionDisplay(sectionName, isVisible)
  • setValue(fieldName, value, displayValue)
  • setVisible(fieldName, isVisible)
  • showErrorBox(fieldName, message, scrollForm)
  • showFieldMsg(fieldName, message, type: "info | error", scrollForm)
  • showRelatedList(relatedTableName)
  • showRelatedLists()
  • submit(submitActionName)


  • get(fieldName)
    • addItem(value, displayValue)
    • removeItem(value)
    • reset()
    • setQuery(queryString)
    • setDefaultOperator(operator)
    • getDefaultOperator()



  • new GlideAjax(scriptIncludeName)
    • addParam (name, value)
    • getParam (name)
    • getXML(callback)
    • getXMLAnswer(callback)
    • getJSON(callback)
    • setErrorCallback(errorCallback)
    • getURL()
    • getParams()
    • execute()
    • successCalback(data, status, xhr)
    • errorCallback(xhr)
    • setScope(scope)


  • new GlideRecord(tableName)
    • addQuery(encodedQuery)
    • addQuery(fieldName, operator, value)
    • getEncodedQuery()
    • deleteRecord(callback)
    • get(id)
    • getTableName()
    • hasNext()
    • insert(callback)
    • gotoTop()
    • next()
    • loadRow(rowObj)
    • getValue(fieldName)
    • setValue(fieldName, value)
    • isDotWalkField(fieldName)
    • addOrderBy(fieldName)
    • orderBy(fieldName)
    • orderByDesc(fieldName)
    • setDisplayFields(fieldNames)
    • query(callback)
    • setRows(rowsArray)
    • setTableName(tableName)
    • update(callback)
    • setLimit(maxInt)
    • getLimit()

getMessage(messageKey, callback)

Usage examples


g_list helps you set the filter of a glide list element or a list collector variable. Use this api in place of the "g_filter" api on desktop client scripts.

function onLoad() {
  var myListCollector = g_list.get("my_list_collector");
  myListCollector.addItem('3a700d39af5f4fc0aab978df90f4c692', 'Power Supply');
  myListCollector.addItem('1cb93419a3a248318da8f814140b42f6', 'Backpack');


g_service_catalog is only available in Service Portal service catalog item scripts. Use this API to know if your catalog item script is being run as part of an order guide or on its own.

 function onLoad() {
   if (window) // if CMS don't run this

    // g_service_catalog api for Service Portal and Mobile
    var isOrderGuide = g_service_catalog.isOrderGuide();
    g_form.setValue("is_order_guide", isOrderGuide ? "Yes!" : "Nope :(");

Error: Please enter a valid email address

Error: Invalid email

Error: Please enter your first name

Error: Please enter your last name

Error: Please enter a username

Error: Please enter a password

Error: Please confirm your password

Error: Password and password confirmation do not match