Files
sap-cli-skill/docs/差距分析报告.md
T
吴让宇 c5905a5b1e refactor: 本仓升为唯一源(原 sap-cli 源码仓归档)
方向反转:此前 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 重写为单源开发流程。
2026-09-11 00:40:15 +08:00

203 lines
9.6 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 差距分析报告: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` | RAPABAP 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 HandlerAPI 开发必备 |
| ⭐⭐ | **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 | 需 RFCRS_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 DefinitionBDEF)— 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 开发场景**。