mcpField
A
application-scope

application-scope

github.com/happy-technologies-llc开发4143 次安装2 天前更新
代码仓库

关于 application-scope

面向 ServiceNow 自定义应用开发者的技能,指导设置当前应用范围并使更新集与应用对齐。通过查询、切换和验证操作,帮助确保开发记录归属正确,并说明跨范围访问注意事项。

主要功能

  1. 01查询并选择目标应用
  2. 02设置当前应用范围
  3. 03创建并切换应用更新集
  4. 04验证范围与更新集的关联
  5. 05管理跨范围访问权限

适用场景

  1. 01开始自定义应用开发前配置范围
  2. 02为独立功能创建应用专属更新集
  3. 03排查记录未捕获或范围错误
  4. 04为应用访问其他表配置权限

MCP 相关

该技能使用 ServiceNow MCP 工具查询应用和更新集、设置当前应用范围与更新集,并验证配置是否匹配。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/happy-technologies-llc/happy-platform-skills --skill application-scope

安装后在 Claude Code 中输入/application-scope确认已加载。

详细介绍

应用范围管理

概述

在 ServiceNow 中进行范围应用开发,需要谨慎管理应用上下文并确保更新集保持一致。本技能介绍如何设置当前应用范围、了解范围应用与全局应用的区别,以及确保更新集与应用开发正确对齐。

  • 解决什么问题? 防止记录被创建在错误的应用范围内,并确保范围应用的更新集能正确捕获变更
  • 谁应该使用此技能? 构建自定义范围应用的 ServiceNow 开发者
  • 预期结果是什么? 应用构件范围设置正确,更新集能正确捕获变更,命名空间相互隔离

前提条件

  • 必需的 ServiceNow 角色:admin 或 application_creator
  • 已有范围应用,或有权创建应用
  • 了解 ServiceNow 应用范围和命名空间
  • 相关技能:admin/update-set-management(必须先了解更新集)

操作步骤

步骤 1:识别目标应用

首先,找到你要使用的应用。

使用 MCP 工具:

Tool: SN-Query-Table
Parameters:
  table_name: sys_app
  query: scope!=global^active=true
  fields: sys_id,name,scope,version,vendor
  limit: 50

预期响应:

{
  "result": [
    {
      "sys_id": "abc123def456...",
      "name": "My Custom Application",
      "scope": "x_myco_custom_app",
      "version": "1.0.0",
      "vendor": "My Company"
    }
  ]
}

决策点:

  • 如果应用存在 → 继续步骤 2
  • 如果未找到应用 → 创建新应用(参见示例 3)
  • 如果需要从多个应用中选择 → 确认范围前缀与预期命名空间一致
步骤 2:设置当前应用范围

为后续所有操作设置应用上下文。

使用 MCP 工具:

Tool: SN-Set-Current-Application
Parameters:
  app_sys_id: abc123def456...

重要提示: 这是通过 sys_trigger 机制执行的自动化操作。大约需要 1-2 秒。

验证:

Tool: SN-Query-Table
Parameters:
  table_name: sys_user_preference
  query: user=javascript:gs.getUserID()^name=apps.current_app
  fields: value
步骤 3:验证或创建应用更新集

范围应用应有各自的更新集,以保持清晰隔离。

查询应用现有的更新集:

Tool: SN-Query-Table
Parameters:
  table_name: sys_update_set
  query: application=abc123def456...^state=in progress
  fields: sys_id,name,state,application
  limit: 10

决策点:

  • 如果存在合适的更新集 → 使用现有更新集(步骤 4)
  • 如果没有更新集,或所有更新集均已完成 → 创建新的更新集

创建应用专用更新集:

Tool: SN-Create-Record
Parameters:
  table_name: sys_update_set
  data:
    name: "My Custom App - Feature Development v1.1"
    application: abc123def456...
    state: in progress
    description: "Development update set for new features"
步骤 4:设置当前更新集

使更新集与应用范围保持一致。

使用 MCP 工具:

Tool: SN-Set-Update-Set
Parameters:
  update_set_sys_id: xyz789ghi012...

验证:

Tool: SN-Get-Current-Update-Set
Parameters: (none required)

预期响应:

{
  "name": "My Custom App - Feature Development v1.1",
  "sys_id": "xyz789ghi012...",
  "state": "in progress",
  "application": "abc123def456..."
}
步骤 5:验证范围与更新集是否一致

在开始开发前,确认范围和更新集均已正确设置。

完整验证查询:

Tool: SN-Query-Table
Parameters:
  table_name: sys_update_set
  query: sys_id=xyz789ghi012...
  fields: sys_id,name,application.name,application.scope

一致性检查清单:

  • 应用范围与预期应用一致
  • 更新集的应用字段引用了正确的应用
  • 更新集状态为“进行中”
  • 用户对该范围具有写入权限

工具用法

MCP 工具(Claude Code/Desktop)
工具用途
SN-Set-Current-Application设置当前应用范围
SN-Set-Update-Set设置当前更新集
SN-Get-Current-Update-Set验证当前更新集
SN-Query-Table查询应用和更新集
SN-Create-Record创建新的更新集
REST API(ChatGPT/其他)
端点方法用途
/api/now/table/sys_appGET列出应用
/api/now/table/sys_update_setGET列出更新集
/api/now/table/sys_update_setPOST创建更新集

注意: 通过 REST API 设置当前应用,需要执行后台脚本或操作会话,过程较为复杂。MCP 工具会自动处理。

原生工具(Claude Code)
工具用途
Bash执行 curl 命令进行 REST 操作
Read读取应用配置文件

范围应用与全局应用的注意事项

何时使用 Scoped 应用程序

使用 Scoped 应用程序的情况:

  • 构建可复用、可分发的应用程序
  • 开发需要命名空间隔离的功能
  • 为 ServiceNow Store 创建应用程序
  • 在多租户场景中构建特定于租户的自定义功能
  • 实现可在升级后正常保留的功能

使用 Global Scope 的情况:

  • 进行小型的一次性自定义
  • 修改 ServiceNow 开箱即用的功能
  • 创建需要广泛访问表的集成
  • 在采用 Scoped 架构前进行原型设计
Scoped 应用程序的优势
优势说明
命名空间隔离表、脚本和 UI 元素带有 Scope 前缀(例如,x_myco_app_*)
升级保护Scoped 工件与平台升级相互隔离
依赖项管理明确应用程序之间的依赖关系
访问控制应用程序级别的访问限制
可移植性可通过更新集或 Store 轻松导出/导入
Scoped 应用程序的限制
限制影响解决方法
GlideRecord 访问受限默认情况下无法查询所有 Global 表通过 Application Properties 请求跨 Scope 访问权限
API 受限某些 GlideSystem API 不可用使用允许的 API 或请求提升权限
UI 限制无法修改 Global UI 元素创建 Scoped UI 组件
Script Include 可见性必须明确开放跨 Scope 访问设置 accessible_from: all_application_scopes
跨 Scope 访问

如需允许 Scoped 应用程序访问 Global 表或其他 Scoped 表:

Tool: SN-Create-Record
Parameters:
  table_name: sys_scope_privilege
  data:
    application: abc123def456...
    table: incident
    operation: read_write
    status: allowed

最佳实践

  • 设置 Scope 后再设置更新集: 始终先设置应用程序 Scope,再设置更新集。这样可确保更新集与正确的应用程序关联。
  • 每项功能使用一个更新集: 为不同的功能或冲刺创建单独的更新集,以便进行精细部署
  • 命名约定: 使用一致的命名格式:{App Name} - {Feature/Sprint} - {Version}(例如,“My App - User Portal v1.2”)
  • 开发前验证: 每次开发会话开始时,运行完整的验证流程(步骤 1-5)
  • 与应用程序关联的更新集: 创建更新集时,始终将 application 字段设为 Scoped 应用的 sys_id
  • Scope 前缀一致性: 在相关应用程序之间保持 Scope 前缀一致(例如,x_myco_*)

故障排除

常见问题 1:记录创建在错误的 Scope 中

症状: 新记录出现在 Global Scope,而不是预期的应用程序中
原因: 创建记录前未设置应用程序 Scope
解决方案:

  1. 使用 SN-Set-Current-Application 设置应用程序 Scope
  2. 通过查询 sys_user_preference 验证 Scope 已激活
  3. 删除 Scope 错误的记录并重新创建
常见问题 2:更新集未捕获记录

症状: 更改未出现在更新集中
原因: 更新集与应用程序 Scope 不匹配,或更新集未激活
解决方案:

  1. 验证更新集的 application 字段与当前 Scope 相匹配
  2. 确认更新集状态为 “in progress”
  3. 检查所修改的表是否会被更新集捕获(某些表不包含在内)
常见问题 3:无法设置应用程序 Scope

症状: SN-Set-Current-Application 失败或不起作用
原因: 权限不足或找不到应用程序
解决方案:

  1. 验证用户具有 admin 或 application_creator 角色
  2. 确认 app_sys_id 正确且应用程序存在
  3. 检查应用程序是否处于活动状态(未退役)
常见问题 4:跨作用域访问被拒绝

症状: GlideRecord 查询没有返回结果或抛出错误 原因: 受作用域限制的应用缺少访问目标表的权限 解决方案:

  1. 创建授予访问权限的 sys_scope_privilege 记录
  2. 或修改脚本包含,以便使用具有提升权限的 GlideRecordSecure
  3. 在应用程序属性中申请跨作用域访问权限
常见问题 5:更新集关联到了错误的应用程序

症状: 更新集存在,但关联到了 Global 或其他应用 原因: 在设置应用程序作用域之前创建了更新集 解决方案:

  1. 更新更新集的 application 字段:
Tool: SN-Update-Record
Parameters:
  table_name: sys_update_set
  sys_id: xyz789ghi012...
  data:
    application: abc123def456...
  1. 如有需要,将现有记录移至与新应用程序关联的更新集

示例

示例 1:标准开发会话设置

启动受作用域限制的开发会话所需的完整设置:

# Step 1: Find application
Tool: SN-Query-Table
Parameters:
  table_name: sys_app
  query: scope=x_myco_custom_app
  fields: sys_id,name,scope

# Step 2: Set application scope
Tool: SN-Set-Current-Application
Parameters:
  app_sys_id: abc123def456...

# Step 3: Find or create update set
Tool: SN-Query-Table
Parameters:
  table_name: sys_update_set
  query: application=abc123def456...^state=in progress
  fields: sys_id,name

# Step 4: Set update set
Tool: SN-Set-Update-Set
Parameters:
  update_set_sys_id: xyz789ghi012...

# Step 5: Verify setup
Tool: SN-Get-Current-Update-Set
Parameters: (none)
示例 2:为应用程序创建新的更新集

创建正确关联的更新集:

# Create update set linked to application
Tool: SN-Create-Record
Parameters:
  table_name: sys_update_set
  data:
    name: "Customer Portal - Sprint 14"
    application: abc123def456...
    state: in progress
    description: "Sprint 14 features: ticket submission, knowledge base search"

# Set as current
Tool: SN-Set-Update-Set
Parameters:
  update_set_sys_id: [sys_id from above]
示例 3:创建新的受作用域限制的应用程序

从头开始创建新的受作用域限制的应用程序:

# Step 1: Create the application
Tool: SN-Create-Record
Parameters:
  table_name: sys_app
  data:
    name: "My New Application"
    scope: "x_myco_newapp"
    version: "1.0.0"
    vendor: "My Company"
    short_description: "Application for managing custom workflows"

# Step 2: Set as current application
Tool: SN-Set-Current-Application
Parameters:
  app_sys_id: [sys_id from above]

# Step 3: Create initial update set
Tool: SN-Create-Record
Parameters:
  table_name: sys_update_set
  data:
    name: "My New Application - Initial Development"
    application: [sys_id from step 1]
    state: in progress

# Step 4: Set update set
Tool: SN-Set-Update-Set
Parameters:
  update_set_sys_id: [sys_id from step 3]
示例 4:多实例受作用域限制的开发

在特定实例上设置作用域:

# Set application on dev instance
Tool: SN-Set-Current-Application
Parameters:
  app_sys_id: abc123def456...
  instance: dev

# Set update set on dev instance
Tool: SN-Set-Update-Set
Parameters:
  update_set_sys_id: xyz789ghi012...
  instance: dev

# Verify on dev instance
Tool: SN-Get-Current-Update-Set
Parameters:
  instance: dev
示例 5:验证更新集记录捕获情况

确认记录是否正确捕获:

# Create a test record
Tool: SN-Create-Record
Parameters:
  table_name: sys_properties
  data:
    name: x_myco_app.test_property
    value: test_value
    type: string

# Verify capture in update set
Tool: SN-Query-Table
Parameters:
  table_name: sys_update_xml
  query: update_set=xyz789ghi012...^nameSTARTSWITHsys_properties
  fields: sys_id,name,type,action
  limit: 10

完整自动化工作流

结合作用域与更新集管理的完整自动化示例:

# FULLY AUTOMATED SCOPED APP DEVELOPMENT (Zero Manual Steps!)

# 1. Query for existing application
Tool: SN-Query-Table
Parameters:
  table_name: sys_app
  query: scope=x_myco_custom_app
  fields: sys_id,name,scope,version

# 2. Set as current application (automated via sys_trigger)
Tool: SN-Set-Current-Application
Parameters:
  app_sys_id: abc123def456...

# 3. Find or create update set
Tool: SN-Query-Table
Parameters:
  table_name: sys_update_set
  query: application=abc123def456...^state=in progress
  fields: sys_id,name

# 4. Set update set (automated via sys_trigger)
Tool: SN-Set-Update-Set
Parameters:
  update_set_sys_id: xyz789ghi012...

# 5. Verify both are active
Tool: SN-Get-Current-Update-Set
Parameters: (none)

# 6. Begin development - create business rule
Tool: SN-Create-Record
Parameters:
  table_name: sys_script
  data:
    name: Validate Custom Record
    table: x_myco_custom_app_records
    when: before
    active: true
    script: |
      (function executeRule(current, previous) {
        if (!current.name) {
          gs.addErrorMessage('Name is required');
          current.setAbortAction(true);
        }
      })(current, previous);

# 7. Verify capture
Tool: SN-Query-Table
Parameters:
  table_name: sys_update_xml
  query: update_set=xyz789ghi012...
  fields: sys_id,type,name,action

相关技能

  • admin/update-set-management - 详细管理更新集
  • admin/instance-management - 为受作用域限制的开发切换实例
  • admin/deployment-workflow - 在多个实例间部署受作用域限制的应用程序
  • admin/batch-operations - 在某个作用域内执行批量操作

参考资料

评论

支持 Markdown