Files
sap-cli-skill/references/sap-tool-constraints.md
T
wurangyu 1e39b6da88 feat: sap-cli skill v2.1.0 — self-contained distributable package
- assets/: sap-cli source (v2.1.0, 26 commands, 16 object types)
- references/: tool constraints + error handling (self-contained)
- scripts/setup.py: one-click install/config/verify
- SKILL.md: full command reference + dual-platform install guide
- VERSION: 2.1.0

Built from D:/Codespace/sap-cli via scripts/pack_skill.py
2026-06-13 20:52:24 +08:00

3.8 KiB
Raw Blame History

sap-cli 使用约束

本文件定义使用 sap-cli 操作 SAP 系统时的 硬性约束。违反任何一条都会被 Hooks 拦截。

🚫 规则 1:只使用 sap-cli 命令操作 SAP 系统

操作 SAP 系统时,必须且只能使用 python main.py <命令> 的形式。

严禁以下行为

禁止操作 原因
用 Python requests / urllib 直接调 ADT REST 端点 必须通过 sap-cli 命令
用 curl 直接调 ADT 端点(/sap/bc/adt/* 必须通过 sap-cli 命令
用 curl 调 SOAP RFC/sap/bc/soap/rfc 必须通过 sap-cli 的 read-table 命令
编写 Python 脚本导入 sapcli.client.ADTClient 后直接调内部方法 sap-cli 的内部 API 不是公开接口
在 Python 脚本中手动构造 ADT XML body 必须通过 sap-cli 命令处理
python -c 内联调用 requests 访问 SAP 同上

唯一合法的 SAP 交互方式

cd D:/Codespace/sap-cli && python main.py <command> [options]

例外(仅在以下情况下允许)

  • run-program 执行自定义 ABAP 报表 — 这是 sap-cli 的内置功能
  • 用户明确要求使用其他方式(如"请用 curl 测试这个端点"
  • 开发 sap-cli 本身(作为项目开发而非使用工具时)

🚫 规则 2:禁止修改 SAP 标准开发对象

SAP 系统中的标准交付对象(CL_*CX_*IF_*SAPL* 等)严禁修改

禁止 说明
download 标准对象后修改再 sync 回去 破坏 SAP 系统一致性
对标准对象执行 delete 不可逆操作
run-program 修改标准对象源码 同上

允许(只读):

  • download / info / list / search / whereused
  • show-table / read-table — 查看结构和数据
  • diff — 对比分析

判定标准:对象 original system 不是用户自己的开发系统,或对象名以 SAP 标准命名空间开头。不确定时先问用户

🚫 规则 3:禁止操作系统表数据

SAP 系统表(存储元数据、运行时状态、内部配置的表)严禁直接操作

禁止 典型表
INSERT / UPDATE / DELETE / MODIFY 系统表 TADIR, E071, SEOCLASS, REPOSRC, D010SINF, T000, TDEVC, TSTC

允许(只读):

  • read-table / show-table 查看(SELECT)系统表数据用于诊断
  • run-program 报表中 SELECT 读取系统表

唯一例外:用户明确授权后才能操作系统表,且必须遵循 4 步授权流程(见 error-handling.md)。

🚫 规则 4sync 命令必须带 --corr_nr

# ✅ 正确
python main.py sync --name ZMY_CLASS --type class --path ./src/zmy.abap --corr_nr DEVK901362

# ❌ 错误(缺少 --corr_nr,会触发交互式传输请求选择)
python main.py sync --name ZMY_CLASS --type class --path ./src/zmy.abap

🚫 规则 5DDIC 对象的 NW 7.40 限制

在 NW 7.40 上,DDIC 对象(domain、dataelement、table)的 ADT Lock 返回 HTTP 406。

  • 这是 SAP 系统限制,不是 sap-cli 的 bug
  • sync DDIC 失败时,不要反复重试 — 报告给用户,让用户通过 SAP GUI SE09 处理
  • 新建的 DDIC 对象(不存在于 SAP)可通过 create --definition 创建

🚫 规则 6:查表数据用 read-table,查表结构用 show-table

sap-cli 已内置这些命令,不要自己写 HTTP 调用。

# 查看表结构
python main.py show-table --name ZSAPILOT_OBJ

# 查看表数据
python main.py read-table --name ZSAPILOT_OBJ --max-rows 50

自检清单

每次执行 SAP 操作前,确认:

  1. 我在用 python main.py <命令> 吗?
  2. 我没有直接调 ADT/SOAP/RFC 端点吗?
  3. 我操作的是 Z* 开头的自定义对象吗?
  4. 我没有 INSERT/UPDATE/DELETE 系统表吗?
  5. sync 命令带了 --corr_nr 吗?