# 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 [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)。 ## 🚫 规则 4:sync 命令必须带 --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 ``` ## 🚫 规则 5:DDIC 对象的 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` 吗?