Files
sap-cli-skill/docs/差距分析报告.md
T
吴让宇 d84099d5b3 docs: 406 真因入库 + 标注过时的差距分析报告
- references/error-handling.md:新增「HTTP 406 (info 查 DDIC)」行——NW 7.40 不支持 DDIC
  专属媒体类型,且 application/xml 同样 406,只有 */* 可用(工具已内置回退,无需手工处理)。
  同步 .claude/rules/error-handling.md 副本(守卫测试强制两份一致)。
- docs/差距分析报告.md:加历史快照声明。原文(2026-06-17 / v2.1.0)的 P1 #3「info 的 Accept
  头映射缺 7 种类型」已不成立(现覆盖 18 种),且真因是回退值本身无效——留着会把人引向错方向。
  同时标注命令数 25 → 31。

699 tests OK。
2026-09-11 00:59:39 +08:00

209 lines
10 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
> **目的**: 识别遗漏功能,为下一轮大优化提供决策依据
>
> ⚠️ **历史快照(2026-06-17,v2.1.0 时点)——部分条目已修复,勿按此判断现状**
> - P1 #3「info 的 Accept 头映射缺 7 种类型」:**已修复**。`INFO_ACCEPT` 现覆盖全部 18 种类型。
> 另查明真因不在此表:406 来自**回退值 `application/xml` 本身无效**NW 7.40 上同样 406),
> 已改为 `*/*`DDIC 类型在 `*/*` 下只返回 blueSource,描述/开发包为空,需 read-table 查 DD02T/TADIR
> - 命令数:25 → **31**(对照 `cli/parser.py` 实际注册数,勿引用本文档的数字)
---
## 一、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 开发场景**。