feat(铁律5): src 目录三层结构(TMP 开发包 → 对象类型 → 代码)
- 第 1 层固定 TMP(对应 SAP $TMP 本地包,去 $ 防 shell 展开),归入传输包后改包名 - 第 2 层 = 对象类型目录(开发对象),第 3 层 = 代码文件 - download --path 必须指到对象类型目录,否则产出平铺结构 - Quick Start 示例同步修正;目录结构节标注为唯一合法层次 - 事故总结表补第 8 行(平铺下载导致结构返工) - version 2.4.0 → 2.5.0
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: sap-cli
|
||||
description: "SAP ABAP ADT CLI for AI agents. Trigger when: operating ABAP objects, syncing code to/from SAP, managing transports, querying DDIC, running ABAP programs, reading SAP tables, or any SAP development task via terminal."
|
||||
version: "2.4.0"
|
||||
version: "2.5.0"
|
||||
author: WuRangyu
|
||||
license: MIT
|
||||
triggers:
|
||||
@@ -21,9 +21,10 @@ Python CLI wrapping the SAP ADT REST API. Manages the full lifecycle of ABAP dev
|
||||
|
||||
```bash
|
||||
# 1. Single object: download → edit → sync
|
||||
python main.py download --name ZMY_CLASS --type class --path ./src
|
||||
# edit ./src/zmy_class.abap
|
||||
python main.py sync --name ZMY_CLASS --type class --path ./src/zmy_class.abap --corr_nr DEVK901XXX
|
||||
# 注意:--path 必须给到「对象类型目录」(src/TMP/<对象类型>),见铁律 5
|
||||
python main.py download --name ZMY_CLASS --type class --path ./src/TMP/class
|
||||
# edit ./src/TMP/class/zmy_class.abap
|
||||
python main.py sync --name ZMY_CLASS --type class --path ./src/TMP/class/zmy_class.abap --corr_nr DEVK901XXX
|
||||
|
||||
# 2. Batch project sync (auto dependency-ordered)
|
||||
python main.py init --path ./my_project # add objects under src/
|
||||
@@ -152,6 +153,24 @@ Full rules: `references/sap-tool-constraints.md`. Violations are intercepted by
|
||||
|
||||
多会话并发操作同一批对象会相互覆盖。**派下一个会话前,先确认前一个已退出**(`ps aux | grep [h]ermes`)。长任务用 `background=true, notify=true`,等完成通知再派下一步。
|
||||
|
||||
### 铁律 5:src 目录三层结构(开发包 → 开发对象 → 代码)
|
||||
|
||||
源码仓 `src/` 下**只允许这一种层次**,三层缺一不可:
|
||||
|
||||
```
|
||||
src/
|
||||
└── TMP/ ← 第 1 层:开发包,本地开发固定用 TMP
|
||||
└── <对象类型>/ ← 第 2 层:开发对象 = 对象类型,一个类型一个目录
|
||||
└── zxxx.abap ← 第 3 层:代码文件,文件名 = 对象名(download 产出小写,扫描大小写不敏感)
|
||||
```
|
||||
|
||||
- 第 1 层**固定写 `TMP`**(本地开发包):对应 SAP 端 `$TMP` 本地包,目录名去掉 `$` 以免 shell 把 `$TMP` 当变量展开。对象正式归入传输包时,该层目录改名为包名(如 `ZIDTR`),层次不变
|
||||
- 第 2 层目录即开发对象类型的落地:`report` / `class` / `interface` / `function` / `domain` / `dataelement` / `table` / `structure` / `tabletype` / `include` …(完整清单见下方「📦 Gitee仓库规范 → 目录结构」)
|
||||
- **禁止**:`.abap` 平铺在 `src/` 根下;禁止跳过开发包层直接把对象类型目录放 `src/` 下;禁止在对象类型目录下再嵌套子目录(函数模块的命名按下方结构图 `function/ZGROUP_ZFUNC.abap`)
|
||||
- **`download --path` 要给到对象类型目录**:该命令只把文件写进给定目录,**不会自动建开发包层/对象层**。`--path ./src/TMP/class` 正确;`--path ./src` 会产出平铺目录,不合格
|
||||
- 反例(2026-09-10 实测):`sap-cem-bip/src/` 25 个 `.abap` 平铺在根下,既无开发包层也无对象类型层 → 不合格,需归位
|
||||
- ⚠️ 已知工具缺口:`init` / `sync --all` 的扫描器(`sapcli/scanner.py`)只认**项目根目录下**的**复数**类型目录(`classes/` `reports/` `functions/<组名>/…`),不认 `src/<开发包>/<对象类型>/` 三层。用批量功能前须先对齐工具,否则扫不到对象;逐对象 `download` / `sync` 不受影响
|
||||
|
||||
### 2026-09-10 S4T 事故问题总结
|
||||
|
||||
| # | 问题 | 后果 | 对策(已固化) |
|
||||
@@ -163,6 +182,7 @@ Full rules: `references/sap-tool-constraints.md`. Violations are intercepted by
|
||||
| 5 | 批量生成 DDIC 的工具报表反复 500/转储 | 34 分钟会话耗尽,零交付 | 逐个落对象;`run-program` 不稳定见下方「DDIC 落地方案」 |
|
||||
| 6 | 多个会话并发改同一批对象 | 相互覆盖,效率崩盘 | 铁律 4(单工作者) |
|
||||
| 7 | 未读技能就试错(`delete` 交互确认) | 白撞 EOFError 一轮 | 动手前先读 SKILL.md 与 references |
|
||||
| 8 | `download --path ./src` 平铺下载,不建开发包/对象层 | 25 个 .abap 堆在 `src/` 根下,结构不合格需返工归位 | 铁律 5(src 三层结构 + `--path` 指向对象类型目录) |
|
||||
|
||||
## 🔄 Standard Workflow(SAP 对象操作标准流程)
|
||||
|
||||
@@ -203,6 +223,8 @@ Full rules: `references/sap-tool-constraints.md`. Violations are intercepted by
|
||||
|
||||
### 目录结构(ADT 层级)
|
||||
|
||||
> ⛔ **本节即铁律 5 的唯一合法层次**:`src/TMP/<对象类型>/<代码文件>`(本地开发固定 `TMP`,对象有正式包后用包名)。`.abap` 平铺在 `src/` 根下、或跳过开发包层,均为不合格。
|
||||
|
||||
每个 SAP 项目的 Gitee 仓库按 ADT 层级组织源码:
|
||||
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user