方向反转:此前 SKILL.md 是「模板渲染产物」、sap-cli 是源;现 sap-cli 归档, sap-cli-skill 承接开发与分发,SKILL.md 回归手工维护的正本。 迁移(来自 sap-cli,共 104 文件): - tests/ 692 例测试(15 个文件的内联 sys.path 改指 assets/) - openspec/ SDD 规格与归档变更(42 文件) - docs/ 开发文档与 ADT 原理(含 dev/CLAUDE.md、AGENTS.md) - .claude/ rules 副本 + settings.json(供 Claude Code) - .github/ .hermes/ .pre-commit-config.yaml .editorconfig CLAUDE.md - scripts/ 保持仅 setup.py(pack_skill.py 已随旧仓归档,不迁) 修复(迁移暴露的真实缺陷): - assets/pyproject.toml 的 build-backend 写作 `setuptools.backends._legacy:_Backend`, 该模块在 setuptools 中不存在 → `pip install -e` 从来装不上。改为 build_meta。 实测:临时 venv 安装成功,sap-cli --help 正常列出 31 个命令 - pyproject readme 指向不存在的 assets/README.md(editable 安装会失败)→ 改内联文本 - pyproject urls 改指 sap-cli-skill 机制调整: - .github/workflows/ci.yml 适配 assets/ 布局;顶部注明该工作流仅 GitHub 执行, 本仓在 Gitee 不会自动跑 - pre-commit 增本地测试门禁(Gitee 上真正生效的那道) - .gitignore 合并旧仓完整规则(保留 log/ 下 md 知识库入库,只忽略运行日志) - 大文件上限 100KB→1MB(架构图 512KB) 守卫测试 tests/unit/test_repo_guards.py(10 → 18 例): - SKILL.md 须记录 parser 全部 CLI 命令 / 铁律 1-5 须为真实小节标题 / 示例不得违反铁律 5 - references/ 规则齐备;.claude/rules 与 references 必须一致(实测抓到一次真实漂移) - VERSION == sapcli.__version__ == README 版本 - 仓内不得再出现 pack_skill.py / skill-src(防废弃流程回潮) 698 tests OK;editable 安装与 CLI 入口经临时 venv 实测通过。 docs/RELEASING.md 重写为单源开发流程。
203 lines
9.6 KiB
Markdown
203 lines
9.6 KiB
Markdown
# sap-cli 差距分析报告:ABAP 开发对象 × 已实现功能
|
||
|
||
> **项目**: sap-cli — 用你喜欢的编辑器写 ABAP
|
||
> **当前版本**: v2.1.0 | 25 命令 | 16 对象类型
|
||
> **编制日期**: 2026-06-17
|
||
> **目的**: 识别遗漏功能,为下一轮大优化提供决策依据
|
||
|
||
---
|
||
|
||
## 一、ABAP 开发对象完整全景
|
||
|
||
SAP 系统中可开发的 ABAP 对象**远不止 16 种**。按照 SAP Repository 结构,完整分类如下:
|
||
|
||
### 1.1 已支持(16 种)
|
||
|
||
| 类别 | 类型 | 覆盖率 |
|
||
|------|------|--------|
|
||
| 程序 | report · include · functiongroup | 3/5 |
|
||
| 面向对象 | class · interface | 2/2 |
|
||
| 函数 | function | 1/1 |
|
||
| DDIC 基础 | domain · dataelement · table · structure · tabletype | 5/8 |
|
||
| DDIC 扩展 | cdsview · view · messageclass · searchhelp · lockobject | 5/12 |
|
||
|
||
### 1.2 未支持但 ADT 有端点(优先级最高)
|
||
|
||
| 优先级 | 类型 | ADT 端点 | 使用场景 |
|
||
|:------:|------|---------|---------|
|
||
| ⭐⭐⭐ | **CDS Access Control (DCL)** | `/sap/bc/adt/ddic/dclsources` | CDS 权限控制,与 CDS View 配套 |
|
||
| ⭐⭐⭐ | **Behavior Definition (BDEF)** | `/sap/bc/adt/ddic_behaviordefinitions` | RAP(ABAP RESTful Application Programming Model)核心 |
|
||
| ⭐⭐⭐ | **Metadata Extension (DDLX)** | `/sap/bc/adt/ddic/metadataextensions` | CDS View 元数据扩展(UI 注解) |
|
||
| ⭐⭐⭐ | **Type Group (TYPE-POOL)** | `/sap/bc/adt/programs/typegroups` | 常量/类型集中定义,大量老项目仍在用 |
|
||
| ⭐⭐ | **AMDP 类** | 复用 class 端点 | HANA 数据库存储过程(标记接口 IF_AMDP_MARKER) |
|
||
| ⭐⭐ | **SICF Service** | `/sap/bc/adt/discovery/services` | HTTP Handler,API 开发必备 |
|
||
| ⭐⭐ | **Enhancement Spot** | `/sap/bc/adt/enhancements` | BAdI 定义 + 增强,Clean Core 依赖 |
|
||
| ⭐⭐ | **BAdI Implementation** | 复用 class/enhancement 端点 | 标准对象增强,实施项目高频 |
|
||
| ⭐⭐ | **Number Range Object** | `/sap/bc/adt/ddic/nrranges` | 编号范围,每个业务模块都用 |
|
||
| ⭐ | **XSLT Program** | `/sap/bc/adt/transformations` | XML 转换,接口开发场景 |
|
||
| ⭐ | **Web Dynpro** | 专用端点 | 传统 Web UI(逐渐淘汰但存量巨大) |
|
||
| ⭐ | **Gateway Service (SEGW)** | `/sap/bc/adt/sadl/...` | OData 服务定义 |
|
||
|
||
### 1.3 未支持且 ADT 无标准端点(SAP GUI 独占)
|
||
|
||
| 类型 | SE80 类别 | 实现路径 |
|
||
|------|----------|---------|
|
||
| Screen / Dynpro | Dialog Programming | 需 RFC 或 GUI Scripting |
|
||
| GUI Status / Title | Dialog Programming | 需 RFC |
|
||
| Transaction Code | Dictionary | 需 RFC(无 ADT 端点) |
|
||
| Report Variant | Programs | 需 RFC(RS_VARIANT_CONTENTS) |
|
||
| SAPScript Form | Forms | 需 RFC |
|
||
| SmartForm | Forms | 需 RFC(无 ADT 端点) |
|
||
| Adobe Form (SFP) | Forms | 需 RFC |
|
||
| Workflow Template | Business Obj | 需 RFC |
|
||
| Business Object (BOR) | Business Obj | 需 RFC |
|
||
| Append Structure | DDIC | ADT 可能间接支持 |
|
||
|
||
---
|
||
|
||
## 二、已实现功能 × 对象类型 完整矩阵
|
||
|
||
> 图例:✅ 完全支持 | ⚠️ 部分支持/有 bug | ❌ 不支持 | ➖ 不适用(容器对象)
|
||
|
||
| 操作 \ 类型 | report | class | func | funcgrp | intf | domain | datael | table | struct | tbltype | include | cdsview | msgcls | view | srchhelp | lockobj |
|
||
|:---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
|
||
| **create** | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ⚠️ | ❌ | ⚠️ | ❌ | ❌ | ❌ | ❌ |
|
||
| **download** | ✅ | ✅ | ✅ | ➖ | ✅ | ✅ | ✅ | ✅ | ✅ | ➖ | ✅ | ⚠️ | ➖ | ✅ | ➖ | ➖ |
|
||
| **sync** | ✅ | ✅ | ✅ | ➖ | ✅ | ✅ | ✅ | ✅ | ✅ | ➖ | ✅ | ⚠️ | ➖ | ✅ | ➖ | ➖ |
|
||
| **delete** | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
||
| **activate** | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
||
| **info** | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ |
|
||
|
||
**关键结论**:`create` 是最大缺口 — **6 种已注册类型完全无法通过通用命令创建**。
|
||
|
||
---
|
||
|
||
## 三、已实现命令全景(25 个顶层命令)
|
||
|
||
| 类别 | 命令 | 状态 |
|
||
|------|------|------|
|
||
| **对象 CRUD** | create · download · sync · upload · delete · info · activate | ✅ |
|
||
| **代码质量** | check(ATC) · format(PrettyPrinter) · diff · syntax-check | ✅ |
|
||
| **搜索浏览** | list · whereused · search · show-table · read-table | ✅ |
|
||
| **批量管理** | init · refresh · sync --all · analyze · scaffold | ✅ |
|
||
| **传输/包** | transport(list/info/release/objects) · package(create/info/list) | ✅ |
|
||
| **CDS** | cds(download/sync/create) | ✅ |
|
||
| **远程执行** | run-program | ✅ |
|
||
| **配置/认证** | config(show/set/list-profiles) · auth(login/logout/status) | ✅ |
|
||
|
||
---
|
||
|
||
## 四、已发现的 Bug 和缺陷
|
||
|
||
### 🔴 P0 — 功能性 Bug
|
||
|
||
| # | 问题 | 影响 | 位置 |
|
||
|---|------|------|------|
|
||
| 1 | **CDS View 端点不一致** | `download --type cdsview` 可能 404 | types.py 用 `/dds/ddl/sources/`,cds.py 用 `/ddic/ddlsources/` |
|
||
| 2 | **create 不支持 6 种类型** | include/messageclass/view/searchhelp/lockobject 无法创建 | `client/_ddic.py::_build_create_body` 直接 ValueError |
|
||
|
||
### 🟡 P1 — 功能降级
|
||
|
||
| # | 问题 | 影响 | 位置 |
|
||
|---|------|------|------|
|
||
| 3 | **info 的 Accept 头映射缺 7 种类型** | 7 种类型查询可能返回 406 或数据不完整 | `commands/crud.py::INFO_ACCEPT` |
|
||
| 4 | **list/whereused/search 的类型码缺 2 种** | searchhelp/lockobject 过滤可能不生效 | `commands/search.py::_TYPE_FILTER_MAP` |
|
||
| 5 | **tabletype 创建必须传 --definition** | 无法用默认模板快速创建 | `client/_ddic.py::_create_ddic` |
|
||
|
||
### 🟢 P2 — 设计限制(可接受)
|
||
|
||
| # | 问题 | 说明 |
|
||
|---|------|------|
|
||
| 6 | functiongroup/tabletype/messageclass/searchhelp/lockobject 无源码操作 | has_source=False,设计如此 |
|
||
| 7 | NW 7.40 激活空响应 | 已有 double-activate 变通,失败提示去 SE09 |
|
||
| 8 | DDIC 源码下载返回 XML/DDL 而非 ABAP | 语义差异,非 bug |
|
||
|
||
---
|
||
|
||
## 五、未实现的功能命令
|
||
|
||
| 优先级 | 命令 | 功能 | 实现难度 | 价值 |
|
||
|:------:|------|------|:--------:|:----:|
|
||
| ⭐⭐⭐ | `clone` | 从一个系统下载 → 上传到另一个系统(跨系统迁移) | 中 | 极高 |
|
||
| ⭐⭐⭐ | `history` | 查看 SAP 端版本历史 + 版本对比 | 中 | 高 |
|
||
| ⭐⭐⭐ | `enhancement` | Enhancement Spot / BAdI 增强管理 | 高 | 高 |
|
||
| ⭐⭐⭐ | `number-range` | 编号范围管理(创建/查看/调整) | 中 | 高 |
|
||
| ⭐⭐ | `where-used --reverse` | 反向 Where-Used(谁引用了我) | 低 | 中 |
|
||
| ⭐⭐ | `unit-test` | 触发远程 ABAP Unit 测试 | 中 | 高 |
|
||
| ⭐⭐ | `variant` | 报表变体管理(创建/复制/传输) | 中 | 中 |
|
||
| ⭐⭐ | `tcode` | 事务码管理(创建/分配) | 中 | 中 |
|
||
| ⭐⭐ | `aunit` | ABAP Unit 测试执行和结果查看 | 中 | 高 |
|
||
| ⭐ | `bapi` | BAPI 浏览和调用(测试用) | 低 | 中 |
|
||
| ⭐ | `stms` | 传输系统管理(STMS 等价) | 高 | 中 |
|
||
| ⭐ | `debug` | 远程调试辅助(设置断点、读取 dump) | 高 | 中 |
|
||
| ⭐ | `dump` | ST22 Dump 分析(读取/搜索/过滤) | 中 | 中 |
|
||
|
||
---
|
||
|
||
## 六、优化优先级建议
|
||
|
||
### Phase 1 — 修复 Bug + 补齐缺口(v2.2)
|
||
|
||
| 任务 | 预估工时 | 影响 |
|
||
|------|---------|------|
|
||
| 修复 CDS View 端点不一致 | 2h | 消除 P0 Bug |
|
||
| 补齐 create 对 5 种类型的支持 | 4h | include/messageclass/view/searchhelp/lockobject |
|
||
| 补齐 info Accept 头映射 | 1h | 消除 P1 降级 |
|
||
| 补齐 search 类型码映射 | 0.5h | 消除 P1 降级 |
|
||
|
||
### Phase 2 — 扩展对象类型(v3.0)
|
||
|
||
| 任务 | 预估工时 | 价值 |
|
||
|------|---------|------|
|
||
| Type Group 支持 | 2h | 老项目兼容 |
|
||
| Number Range Object 支持 | 3h | 业务模块必需 |
|
||
| Enhancement Spot / BAdI 支持 | 8h | Clean Core 实施必备 |
|
||
| CDS Access Control (DCL) 支持 | 4h | RAP 开发配套 |
|
||
| Behavior Definition (BDEF) 支持 | 6h | RAP 核心 |
|
||
| SICF Service 支持 | 4h | API 开发 |
|
||
|
||
### Phase 3 — 新增命令(v3.1+)
|
||
|
||
| 任务 | 预估工时 | 价值 |
|
||
|------|---------|------|
|
||
| `clone`(跨系统迁移) | 4h | 多系统项目效率 |
|
||
| `history`(版本管理) | 6h | 代码审计 |
|
||
| `unit-test` / `aunit` | 8h | 测试自动化 |
|
||
| `variant` | 4h | 变体管理 |
|
||
| `dump`(ST22 分析) | 4h | 异常排查 |
|
||
|
||
---
|
||
|
||
## 七、总结
|
||
|
||
### 当前覆盖度
|
||
|
||
```
|
||
ABAP 开发对象全谱系:
|
||
已支持:16 种
|
||
ADT 可支持但未实现:~12 种(高价值)
|
||
SAP GUI 独占:~10 种(需 RFC)
|
||
总覆盖率:约 42%(已支持 / ADT 可支持范围)
|
||
```
|
||
|
||
### 核心矛盾
|
||
|
||
> 设计理念是「用你喜欢的编辑器写 ABAP」,但目前的 16 种对象类型主要覆盖了**传统 ABAP 开发场景**(程序 + DDIC)。
|
||
|
||
**现代 ABAP 开发场景(S/4HANA / RAP / API)覆盖不足**:
|
||
- ❌ CDS 权限控制(DCL)— RAP 配套缺失
|
||
- ❌ Behavior Definition(BDEF)— RAP 核心缺失
|
||
- ❌ Enhancement Spot / BAdI — Clean Core 实施核心缺失
|
||
- ❌ SICF Service — API 开发缺失
|
||
|
||
### 建议的演进方向
|
||
|
||
```
|
||
Phase 1 (v2.2): 修复 Bug + 补齐 create 缺口 ← 2 天
|
||
Phase 2 (v3.0): 扩展对象类型(RAP + Enhancement) ← 1-2 周
|
||
Phase 3 (v3.1): 新增命令(clone/history/unit-test)← 1 周
|
||
Phase 4 (v4.0): MCP 服务器模式(AI 集成) ← 未来
|
||
```
|
||
|
||
从「能用的工具」到「不可替代的开发平台」,下一步的关键是**覆盖现代 ABAP 开发场景**。
|