SuperAPI AI 工具集

update-set-workflow

部署与运维

查看项目

更新于 10-16 02:12

技能介绍

用途

Update Set Workflow 是面向 ServiceNow 开发的更新集管理技能。更新集(Update Set)在 ServiceNow 开发中是强制要求:没有更新集,变更不会被跟踪,也无法部署到其他实例。该技能还带有强制机制——当会话中没有活动更新集时,配置写入会在工具层被阻止。遇到该阻止时,应先询问用户是否将工作捕获到命名更新集中,然后调用一次 snow_ensure_active_update_set({ name }) 并重试;只有当用户明确拒绝跟踪时,才用 __skipUpdateSet: true 重新发起一次调用,该选择会在本次会话剩余时间内被记住。

主要能力

在任何开发之前,始终创建或确保有一个活动更新集。典型流程为:

  1. 检查当前更新集:
var current = await snow_update_set_query({ action: "current" })
  1. 如果没有更新集或正在使用 Default,则创建一个:
if (!current || current.name === "Default") {
  await snow_update_set_manage({
    action: "create",
    name: "Feature: [Descriptive Name]",
    description: "What and why this change is being made",
  })
}
  1. 此时可以安全地进行变更,所有变更都会被跟踪。

  2. 完成后完成更新集:

await snow_update_set_manage({
  action: "complete",
  update_set_id: current.sys_id,
})

命名规范

类型 格式 示例
Feature Feature: [Name] Feature: Incident Auto-Assignment
Bug Fix Fix: [Issue] Fix: Approval Email Not Sending
Enhancement Enhancement: [Name] Enhancement: Dashboard Performance
Hotfix Hotfix: [Issue] Hotfix: Critical Login Bug

更新集生命周期

  1. In Progress —— 活动状态,接收变更
  2. Complete —— 可供导出/提升
  3. Ignore —— 变更不会被提升(用于实验)

会被跟踪的内容

更新集自动捕获以下变更:

  • 表和列
  • Business Rules
  • Script Includes
  • Client Scripts
  • UI Policies 和 Actions
  • Workflows 和 Flow Designer flows
  • Service Portal widgets 和 pages
  • ACLs 和安全规则
  • 系统属性
  • 计划任务
  • 以及更多……

不会被跟踪的内容

  • 数据记录(数据请使用 Import Sets)
  • 记录上的附件
  • 用户会话信息
  • 部分系统表(sys_user 等)

更新集的 MCP 工具

// 创建新更新集
snow_update_set_manage({
  action: "create",
  name: "Feature: My Feature",
  description: "Description of changes",
})

// 切换到已有更新集
snow_update_set_manage({
  action: "switch",
  update_set_id: "sys_id_here",
})

// 获取当前更新集
snow_update_set_query({ action: "current" })

// 完成更新集
snow_update_set_manage({
  action: "complete",
  update_set_id: "sys_id_here",
})

// 将更新集导出为 XML
snow_update_set_manage({
  action: "export",
  update_set_id: "sys_id_here",
})

最佳实践

  • 一个功能一个更新集——不要混入无关变更
  • 使用描述性名称——清楚说明更新集包含什么
  • 完成后及时完成——不要无限期保持更新集打开
  • 完成前先测试——验证所有变更正常工作
  • 绝不使用 Default——始终创建命名更新集

OAuth 上下文与更新集跟踪

Serac 使用 OAuth 服务账号认证。所有 API 调用以 OAuth 服务账号身份运行,而不是你的 UI 用户。更新集必须对进行变更的用户是“当前”的——对于 API 变更,这意味着对服务账号是当前的。

两个上下文:

┌─────────────────────────────────────────────────────────────┐
│ YOUR UI SESSION (when you log in to ServiceNow UI)         │
│ User: john.doe                                              │
│ Current Update Set: [Whatever you selected in the UI]      │
└─────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────┐
│ SERAC OAUTH SESSION (API calls)                             │
│ User: oauth.service.account                                 │
│ Current Update Set: [Set via Update Set tools]             │
│ ← All Serac changes are tracked here                        │
└─────────────────────────────────────────────────────────────┘

auto_switch —— 跟踪所必需:

  • auto_switch=true(默认)—— 更新集被设为服务账号的当前更新集,所有变更都会被跟踪 ✅
  • auto_switch=false —— 变更不会被跟踪。仅用于查询/分析,绝不用于开发。

要点:

  • ✅ 更新集确实会被创建——它们存在于 ServiceNow 中
  • ✅ 当 auto_switch=true 时变更确实会被跟踪——所有 Serac 产物自动进入更新集
  • ❌ 除非提供 servicenow_username 参数(这也会使其成为该 UI 用户的当前更新集),否则在你的 UI 会话中不可见
  • ✅ 部署仍然有效——更新集可以正常导出/导入
  • ⚠️ 不要为开发任务禁用 auto_switch

何时使用 servicenow_username:可选。当你希望更新集同时在你的 UI 会话中显示为当前更新集时,传入你的 ServiceNow 用户名——当你同时在 ServiceNow UI 和 Serac 中工作,并希望两处看到同一个更新集被选中时会很方便。它不影响跟踪;跟踪由 auto_switch 决定。

适用场景

适用于在 ServiceNow 上进行开发、需要跟踪配置变更并部署到其他实例的场景,尤其是通过 Serac 的 OAuth 服务账号进行 API 变更时。

限制

数据记录、记录附件、用户会话信息以及部分系统表(如 sys_user)不会被更新集跟踪。auto_switch=false 时变更不会被跟踪,仅可用于查询和分析。