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

104 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 交互方式**
```bash
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
```bash
# ✅ 正确
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 调用。
```bash
# 查看表结构
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` 吗?