用途
client-scripts 面向 ServiceNow 平台的客户端脚本开发,说明如何编写运行在用户浏览器中、用于控制表单行为的脚本。与服务端脚本不同,客户端脚本在现代浏览器中可以使用现代 JavaScript(ES6+)。
主要能力
客户端脚本类型
| 类型 | 运行时机 | 适用场景 |
|---|---|---|
| onLoad | 表单加载 | 设置默认值、隐藏/显示字段、初始化设置 |
| onChange | 字段值变化 | 响应用户输入、级联更新 |
| onSubmit | 表单提交 | 保存前校验 |
| onCellEdit | 列表单元格编辑 | 校验行内编辑 |
g_form API
取值与赋值:使用 g_form.getValue 获取字段值,g_form.getDisplayValue 获取引用字段的显示值;使用 g_form.setValue 设置值(引用字段可带显示值),g_form.clearValue 清空字段。
字段可见性与状态:g_form.setVisible 显示/隐藏字段,g_form.setDisplay 控制是否从 DOM 移除;g_form.setMandatory 设置必填;g_form.setReadOnly 设置只读;g_form.setDisabled 设置禁用(置灰但可见)。
消息与校验:g_form.showFieldMsg 与 g_form.hideFieldMsg 控制字段级消息;g_form.addInfoMessage、g_form.addErrorMessage、g_form.clearMessages 控制表单级消息;g_form.flash 可让字段闪烁以吸引注意。
区块与标签:g_form.setSectionDisplay 折叠或展开区块,g_form.setLabelOf 修改字段标签。
常见模式
文档给出多种模式,包括:onLoad 设置默认值(仅新记录、设置默认优先级、把调用者设为当前用户、按角色隐藏内部字段);onChange 级联更新(值变化时清空子字段、按分类自动设置优先级并切换只读);onChange 配合 GlideAjax 从服务端取数据并回填表单;onSubmit 校验(邮箱格式、解决时要求关闭备注、高优先级提交前确认);按条件设置必填字段(如分类为硬件时要求资产标签,分类为软件时要求应用名称)。
GlideAjax 服务端通信
文档展示客户端脚本通过 GlideAjax 调用服务端 Script Include 的完整写法,包括 addParam 传参、getXMLAnswer 回调处理响应,以及服务端基于 AbstractAjaxProcessor 的 Script Include 示例(查询相关事件并返回 JSON)。
g_user 对象
可获取当前用户的 userName、userID、firstName、lastName、getFullName;可通过 hasRole、hasRoleExactly、hasRoleFromList 进行角色检查。
性能最佳实践
- 减少服务端调用:把多个 GlideAjax 调用合并为一次返回全部数据的调用。
- 使用 isLoading 参数:在表单加载时跳过不必要的逻辑。
- 对快速变化做防抖:用 setTimeout 等待输入停止后再执行开销较大的操作(示例为 300ms)。
常见错误
文档列出常见错误及解决方案:忘记 isLoading 判断会导致脚本在加载时多余执行;阻塞式 onSubmit 在慢校验时会让界面卡住;GlideAjax 缺少错误处理会造成静默失败;只在单一浏览器测试会带来跨浏览器问题;直接操作 DOM 会因界面更新而失效,应改用 g_form API。
适用场景与限制
适用于需要在 ServiceNow 表单上控制字段行为、做前端校验、按条件显隐字段或与服务端轻量交互的场景。文档未说明具体的许可、收费、价格或平台版本要求,这些信息暂未提供。