关于 generic-crud-operations
面向 ServiceNow 开发者、管理员和集成人员的操作指南,介绍如何在不同表中查询、创建、更新和删除记录。重点是先发现表结构,并通过通用操作及批量工具处理记录。
主要功能
- 01执行跨表 CRUD 操作
- 02发现表字段及关系结构
- 03按条件筛选并分页查询
- 04创建或更新单条记录
- 05批量创建和更新记录
适用场景
- 01检查陌生表的字段和必填项
- 02查询并分页浏览业务记录
- 03在多个 ServiceNow 表中维护数据
MCP 相关
该技能指导使用 ServiceNow MCP 服务提供的通用表工具,包括查询、获取、创建、更新及批量操作。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ happy-technologies-llc/ happy-platform-skills --skill generic-crud-operations安装后在 Claude Code 中输入/generic-crud-operations确认已加载。
详细介绍
通用 CRUD 操作
概述
ServiceNow MCP 提供适用于平台中任何表的通用工具。本技能将教你如何在 160 多个 ServiceNow 表中执行创建、读取、更新和删除(CRUD)操作,而无需为每个表使用专用工具。
- 解决什么问题? 提供统一、一致的表操作方式
- 谁应使用此技能? 使用 ServiceNow 数据的开发人员、管理员和集成人员
- 预期结果是什么? 能够查询、创建、更新和检索任何表中的记录
前提条件
- 已配置并运行的 MCP ServiceNow 服务
- 目标表所需的 ServiceNow 角色(因表而异)
- 对 ServiceNow 表结构(sys_id、显示值)的基本了解
操作步骤
步骤 1:发现表架构
使用任何表之前,请通过架构发现了解其结构。
获取基本架构:
Tool: SN-Get-Table-Schema
Parameters:
table_name: incident
响应包含:
- 字段名称和类型
- 字段长度和必填标记
- 引用表关系
- 选择字段的可选值
获取扩展架构:
Tool: SN-Discover-Table-Schema
Parameters:
table_name: incident
include_relationships: true
响应包含:
- 所有基本架构信息
- 父表/子表关系
- 被引用的表和外键
步骤 2:查询记录(读取)
使用筛选条件、字段选择和分页查询任何表。
基本查询:
Tool: SN-Query-Table
Parameters:
table_name: incident
query: active=true
limit: 10
选择字段进行查询:
Tool: SN-Query-Table
Parameters:
table_name: incident
query: active=true^priority=1
fields: sys_id,number,short_description,state,assigned_to
limit: 20
分页查询:
Tool: SN-Query-Table
Parameters:
table_name: incident
query: active=true
fields: number,short_description
limit: 50
offset: 100
按顺序查询:
Tool: SN-Query-Table
Parameters:
table_name: incident
query: active=true^ORDERBYDESCpriority
fields: number,short_description,priority
limit: 25
步骤 3:获取单条记录(读取)
通过 sys_id 检索特定记录。
获取记录:
Tool: SN-Get-Record
Parameters:
table_name: incident
sys_id: abc123def456...
选择字段获取记录:
Tool: SN-Get-Record
Parameters:
table_name: incident
sys_id: abc123def456...
fields: number,short_description,state,priority,assigned_to
步骤 4:创建记录
使用正确的字段值在任何表中创建新记录。
创建记录:
Tool: SN-Create-Record
Parameters:
table_name: incident
data:
short_description: Network connectivity issue in Building A
description: Users in Building A floor 3 unable to access network resources
category: network
subcategory: connectivity
impact: 2
urgency: 2
caller_id: <user_sys_id>
assignment_group: <group_sys_id>
响应返回:
- 已创建记录的
sys_id number(如果自动生成)- 所有已创建字段的值
创建包含引用字段的记录:
Tool: SN-Create-Record
Parameters:
table_name: task
data:
short_description: Follow up with customer
parent: <parent_task_sys_id>
assigned_to: <user_sys_id>
assignment_group: <group_sys_id>
due_date: 2024-12-31
步骤 5:更新记录
通过 sys_id 更新现有记录。
更新单个字段:
Tool: SN-Update-Record
Parameters:
table_name: incident
sys_id: abc123def456...
data:
state: 2
更新多个字段:
Tool: SN-Update-Record
Parameters:
table_name: incident
sys_id: abc123def456...
data:
state: 2
assigned_to: <user_sys_id>
work_notes: Investigation in progress
priority: 2
更新引用字段:
Tool: SN-Update-Record
Parameters:
table_name: incident
sys_id: abc123def456...
data:
assignment_group: <new_group_sys_id>
assigned_to: <new_user_sys_id>
步骤 6:批量操作
高效执行多项操作。
批量创建:
Tool: SN-Batch-Create
Parameters:
records:
- table: sys_user_group
data:
name: Network Support L1
description: Level 1 network support
- table: sys_user_group
data:
name: Network Support L2
description: Level 2 network support
- table: sys_user_group
data:
name: Network Support L3
description: Level 3 network support
批量更新:
Tool: SN-Batch-Update
Parameters:
updates:
- table: incident
sys_id: abc123...
data:
state: 6
resolution_code: Solved
- table: incident
sys_id: def456...
data:
state: 6
resolution_code: Solved
- table: incident
sys_id: ghi789...
data:
state: 6
resolution_code: Solved
常见字段模式
系统字段(所有表)
| 字段 | 描述 | 备注 |
|---|---|---|
sys_id | 唯一标识符 | 32 位 GUID,只读 |
sys_created_on | 创建时间戳 | 只读 |
sys_created_by | 创建者用户名 | 只读 |
sys_updated_on | 最后更新时间戳 | 只读 |
sys_updated_by | 最后更新者用户名 | 只读 |
sys_mod_count | 修改次数 | 只读 |
sys_class_name | 表名 | 用于扩展表 |
引用字段
引用字段链接到其他表中的记录。
设置引用:
{
"assigned_to": "5137153cc611227c000bbd1bd8cd2007"
}
获取显示值:
Tool: SN-Query-Table
Parameters:
table_name: incident
query: active=true
fields: number,assigned_to,assigned_to.name,assigned_to.email
limit: 10
响应包含:
{
"assigned_to": {
"value": "5137153cc611227c000bbd1bd8cd2007",
"display_value": "John Smith"
},
"assigned_to.name": "John Smith",
"assigned_to.email": "[email protected]"
}
选择字段
选择字段具有预定义的可选值。
获取可用选项:
Tool: SN-Query-Table
Parameters:
table_name: sys_choice
query: name=incident^element=state
fields: value,label
常见事件状态:
| 值 | 标签 |
|---|---|
| 1 | 新建 |
| 2 | 进行中 |
| 3 | 暂挂 |
| 6 | 已解决 |
| 7 | 已关闭 |
日期/时间字段
日期格式: YYYY-MM-DD
日期时间格式: YYYY-MM-DD HH:MM:SS
示例:
{
"due_date": "2024-12-31",
"work_start": "2024-12-01 09:00:00"
}
工具用法
MCP 工具(Claude Code/Desktop)
| 工具 | 用途 |
|---|---|
SN-Query-Table | 使用筛选条件查询记录 |
SN-Get-Record | 通过 sys_id 获取单条记录 |
SN-Create-Record | 创建新记录 |
SN-Update-Record | 更新现有记录 |
SN-Get-Table-Schema | 发现表结构 |
SN-Discover-Table-Schema | 获取包含关系的扩展架构 |
SN-Batch-Create | 创建多条记录 |
SN-Batch-Update | 更新多条记录 |
REST API(ChatGPT/Other)
| Endpoint | Method | Purpose |
|---|---|---|
/api/now/table/{table} | GET | 查询记录 |
/api/now/table/{table}/{sys_id} | GET | 获取单条记录 |
/api/now/table/{table} | POST | 创建记录 |
/api/now/table/{table}/{sys_id} | PATCH | 更新记录 |
/api/now/table/{table}/{sys_id} | PUT | 替换记录 |
/api/now/table/{table}/{sys_id} | DELETE | 删除记录 |
REST 查询参数:
| Parameter | Description |
|---|---|
sysparm_query | 编码后的查询字符串 |
sysparm_fields | 以逗号分隔的字段列表 |
sysparm_limit | 要返回的最大记录数 |
sysparm_offset | 要跳过的记录数(分页) |
sysparm_display_value | 返回显示值(all、true、false) |
原生工具(Claude Code)
优先使用上述 MCP 工具。只有当 MCP 无法执行某项操作时,才将原始 REST 作为最后手段。在这种情况下,请依赖已在对话之外配置、且经组织批准的本地凭据助手。绝不要要求用户粘贴身份验证材料、将其嵌入命令,或生成包含身份验证标头的请求。保留 MCP 工作流中使用的相同架构检查、字段选择、分页、ACL 和明确的实例指定。
最佳实践
- 始终先检查架构: 使用
SN-Get-Table-Schema检查不熟悉的表 - 指定字段: 仅包含所需字段,以减少响应负载并提升性能
- 使用分页: 对于大型数据集,使用
limit和offset分页获取结果 - 验证 sys_ids: 引用字段需要使用被引用表中的有效 sys_id
- 处理错误: 检查响应中的错误消息,尤其是在创建/更新操作后
- 批量操作: 对多个记录(5-10 项以上操作)使用批量工具以提高效率
故障排除
未找到记录
症状: 查询返回空结果,或获取记录时返回 404
原因: sys_id 无效、记录已删除或权限不足
解决方案: 确认 sys_id 存在,并确认用户对该表具有读取权限
权限被拒绝(403)
症状: 创建/更新时出现 403 Forbidden 错误
原因: 用户缺少对该表或特定字段的写入权限
解决方案: 检查该表操作所需的 ACL 和角色
字段值无效
症状: 创建/更新因字段验证错误而失败
原因: 值与字段类型或选项列表不匹配
解决方案: 检查字段架构以确认有效值,尤其是选项字段和引用字段
引用字段被拒绝
症状: 引用字段值未保存
原因: sys_id 无效,或被引用的记录不存在
解决方案: 查询引用表以获取有效的 sys_id
缺少必填字段
症状: 创建时因必填字段错误而失败
原因: 数据中未提供必填字段
解决方案: 检查架构中的必填字段,并提供所有必填值
示例
示例 1:查询活跃用户
Tool: SN-Query-Table
Parameters:
table_name: sys_user
query: active=true
fields: sys_id,user_name,name,email,department
limit: 50
示例 2:创建配置项
Tool: SN-Create-Record
Parameters:
table_name: cmdb_ci_server
data:
name: web-server-01
ip_address: 192.168.1.100
os: Linux Red Hat
cpu_count: 4
ram: 16384
classification: Production
environment: Production
示例 3:更新多条事件
Tool: SN-Batch-Update
Parameters:
updates:
- table: incident
sys_id: inc001...
data:
assignment_group: <network_team_id>
work_notes: Routing to network team per triage
- table: incident
sys_id: inc002...
data:
assignment_group: <network_team_id>
work_notes: Routing to network team per triage
示例 4:使用点遍历获取记录
Tool: SN-Query-Table
Parameters:
table_name: incident
query: number=INC0010001
fields: number,short_description,caller_id.name,caller_id.email,caller_id.department.name
示例 5:分页查询
# Page 1
Tool: SN-Query-Table
Parameters:
table_name: change_request
query: state=-1
fields: number,short_description,start_date,end_date
limit: 100
offset: 0
# Page 2
Tool: SN-Query-Table
Parameters:
table_name: change_request
query: state=-1
fields: number,short_description,start_date,end_date
limit: 100
offset: 100
相关技能
itsm/natural-language-queries- 自然语言搜索精通指南itsm/quick-reference- ITSM 快速参考卡admin/batch-operations- 高级批量操作