SuperAPI AI 工具集

sn-scripting

编程与开发

查看项目

更新于 10-15 09:47

技能介绍

ServiceNow 传统脚本(ServiceNow Legacy Scripting)使用 GlideRecord API 进行服务端数据访问,用 Script Include 类封装可复用的服务端逻辑,用 Business Rules 实现服务端自动化,用 g_form/g_user/g_list 进行客户端表单操作。本技能用于生成和审查此类脚本。

用途

  • 生成 GlideRecord 查询与增删改查操作
  • 生成 Script Include 类
  • 生成客户端脚本(Client Script)
  • 用于 Business Rules、Scheduled Jobs、服务端逻辑与客户端表单操作
  • 审查已有 ServiceNow 脚本中的常见问题

参考文件

技能说明强调按需读取参考文件,不要在会话开始时预加载全部参考。路径相对于技能根目录(即包含 SKILL.md 的目录)。

  • references/gliderecord.md:在生成或审查 GlideRecord 查询、CRUD 操作或 addQuery/getValue 模式时读取
  • references/server-side.md:在生成 Script Include、Business Rules 或使用 GlideSystem(gs.*)日志时读取
  • references/client-side.md:在生成使用 g_form、g_user 或 g_list 的客户端脚本,或进行任何客户端表单操作时读取
  • references/gotchas.md:在生成或审查任何 ServiceNow 脚本之前读取,用于检查幻觉陷阱

脚本

  • scripts/validate-script.sh:在部署前校验 ServiceNow 脚本文件是否存在常见问题

示例

示例仅作为结构模板使用,只读取与目标类型匹配的示例,不要预加载全部:

  • assets/examples/gliderecord-crud.js:演示完整的 GlideRecord CREATE、READ(单条与多条)、UPDATE、DELETE,以及正确的 getValue() 用法
  • assets/examples/script-include-class.js:演示使用 Class.create() 模式的 Script Include,包含 initialize()、工具方法与 type 属性
  • assets/examples/client-script-gform.js:演示客户端脚本 onLoad/onChange 处理函数,使用 g_form.getValue()、g_form.setMandatory()、g_user.hasRole()

硬性规则

  1. 当存在 ServiceNow Fluent SDK 时,绝不使用 GlideRecord。如果工作区包含 now.config.json、.now.ts 文件,或从 @servicenow/sdk/core 导入,则开发者使用的是 Fluent SDK 应用,应停止并转向提示:"I can see you're working in a Fluent SDK project. Use the sn-sdk-fluent skill to generate typed metadata definitions instead of GlideRecord scripts. GlideRecord is the legacy scripting API and does not work inside Fluent SDK .now.ts files."
  2. GlideRecord 仅限服务端,绝不在客户端脚本中生成 GlideRecord,应使用 GlideAjax。
  3. 始终先调用 query() 再调用 next();没有 gr.query() 的 while(gr.next()) 永远不会执行。
  4. 在循环中使用 getValue();gr.field_name 返回指针,gr.getValue('field_name') 返回字符串值。
  5. 只使用有文档的 API 方法,不要发明 gr.getField()、gr.setQuery()、gr.addOrder() 之类的方法。

按任务类型的行为

生成时

  • 首先检查 Fluent SDK 信号(硬性规则 1);若检测到,立即转向,不生成 GlideRecord 代码
  • 判断脚本上下文:服务端(Business Rule、Script Include)还是客户端(Client Script)
  • 服务端:读取 references/gliderecord.md 获取 CRUD 模式,读取 references/server-side.md 获取 Script Include 结构与 Business Rule 上下文变量
  • 客户端:读取 references/client-side.md 获取 g_form/g_user/g_list API;绝不在客户端脚本中生成 GlideRecord(硬性规则 2)
  • 使用 assets/examples/ 中的示例文件作为可用模板

审查时

  • 检查硬性规则 3 和 4:next() 之前是否有 query(),循环中是否使用 getValue()
  • 确认客户端代码中没有 GlideRecord(硬性规则 2)
  • 确认没有发明的方法,与 references/gliderecord.md 中有文档的 API 对照(硬性规则 5)
  • 运行 scripts/validate-script.sh <file>,检查客户端脚本中的 GlideRecord、裸 setAbortAction 以及 g_form 误用

解释时

  • 将开发者引导到相关参考文件以查看详细方法文档
  • 对于 Fluent SDK 相关问题,转向 sn-sdk-fluent 技能

适用场景与限制

适用于 ServiceNow 传统脚本的生成、审查与解释,涵盖服务端与客户端脚本。不适用于 Fluent SDK 项目;在检测到 Fluent SDK 信号时必须转向 sn-sdk-fluent 技能。技能的官方收费、价格、平台支持与效果等信息暂未提供。