mcpField
G
generic-crud-operations

generic-crud-operations

github.com/happy-technologies-llc数据与数据库4142 次安装2 天前更新
代码仓库

关于 generic-crud-operations

面向 ServiceNow 开发者、管理员和集成人员的操作指南,介绍如何在不同表中查询、创建、更新和删除记录。重点是先发现表结构,并通过通用操作及批量工具处理记录。

主要功能

  1. 01执行跨表 CRUD 操作
  2. 02发现表字段及关系结构
  3. 03按条件筛选并分页查询
  4. 04创建或更新单条记录
  5. 05批量创建和更新记录

适用场景

  1. 01检查陌生表的字段和必填项
  2. 02查询并分页浏览业务记录
  3. 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)
EndpointMethodPurpose
/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 查询参数:

ParameterDescription
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 - 高级批量操作

参考资料

评论

支持 Markdown