SuperAPI AI 工具集

business-rule-patterns

编程与开发

查看项目

更新于 10-16 02:11

技能介绍

用途

本资料面向 ServiceNow 平台的服务器端脚本开发,主题是业务规则(Business Rules)的编写规范与常见模式。业务规则是当记录被显示、插入、更新或删除时执行的服务器端脚本。

主要能力

规则类型选择:资料给出四种类型的时机与用途对照——Before(数据库写入前,用于校验、修改当前记录,性能影响低)、After(数据库写入后,用于创建关联记录、发送通知,性能影响中)、Async(提交后后台执行,用于重处理与集成,不占用前台)、Display(表单加载时,用于修改表单显示与设置默认值,性能影响低)。

可用对象:业务规则中始终可用的对象包括 current(正在操作的记录)、previous(变更前的记录,仅更新/删除时可用)、gs(GlideSystem 工具)。

Before 规则示例:可用于阻止不满足条件的更新,例如某状态未达前置状态时调用 current.setAbortAction(true) 并通过 gs.addErrorMessage 提示;也可用于自动填充字段,如在 isNewRecord() 为真时设置 caller_id、opened_by。资料提醒不要在 Before 规则中调用 current.update()(会导致递归),也不要查询其他表或调用外部 API。

After 规则示例:可在优先级变更为 P1 时创建子任务记录(使用 GlideRecord 的 initialize、setValue、insert),也可更新父记录的相关事件计数。

Async 规则示例:用于外部系统集成,或通过 gs.eventQueue 发送自定义通知。

使用方式

资料列出常用方法:current 上的 isNewRecord()、isValidRecord()、getValue()、setValue()、setAbortAction()、operation()、isActionAborted();字段变更检测方法 changes()、changesTo(1)、changesFrom(3)、nil();以及通过 previous 与 current 对比判断字段是否变化。条件示例包括 current.active == true、current.isNewRecord()、current.priority.changes()、gs.hasRole('admin')、current.assignment_group.nil() 等。

适用场景

包括自动分配(在 assignment_group 变更时通过 GroupMembers 获取可用人员并设置 assigned_to)、级联更新(状态变更为已关闭时,查询并更新所有未关闭的子任务)、创建关联记录与发送通知等。

限制与注意事项

性能最佳实践要求:使用条件限制规则运行范围;保持 Before 规则快速,尽量不查询;集成类操作使用 Async,避免阻塞事务;避免 Display 规则以免拖慢表单加载;设置 Order(数字越小越先运行,常用 100–500 区间);检查何时运行(insert、update、delete、query)。Before 规则中禁止调用 current.update()、查询其他表和外部 API 调用。