Files
sap-cli-skill/docs/NW740-COMPATIBILITY.md
吴让宇 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

73 lines
3.9 KiB
Markdown
Raw Permalink 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.
# NW 7.40 兼容性矩阵
> 最后更新:2026-07-09
> 测试系统:support.learningleader.com.cn (NW 7.40)
> 测试方式:真实 SAP 系统端到端 create→info→delete→download→sync
## 背景
sap-cli 封装 SAP ADT REST API,但不同 SAP NetWeaver 版本的 ADT 端点覆盖范围差异显著。本文件记录 v2.2.0 在真实 NW 7.40 系统上的验证结果,供用户和开发者参考。
## 对象类型 × 操作 可用性矩阵
### ✅ 完整可用(全生命周期闭环)
| 类型 | create | info | delete | download | sync | 说明 |
|------|:------:|:----:|:------:|:--------:|:----:|------|
| report | ✅ | ✅ | ✅ | ✅ | ✅ | 报表程序 |
| class | ✅ | ✅ | ✅ | ✅ | ✅ | ABAP 类 |
| interface | ✅ | ✅ | ✅ | ✅ | ✅ | ABAP 接口 |
| function | ✅ | ✅ | ✅ | ✅ | ✅ | 函数模块(含函数组自动创建) |
| functiongroup | ✅ | ✅ | ✅ | — | — | 函数组(容器对象,无源码) |
| include | ✅ | ✅ | ✅ | ✅ | ✅ | Include 程序 |
> **这 6 种类型构成 NW 7.40 上 sap-cli 的核心价值闭环**download → 本地编辑 → sync。
### ⚠️ 部分可用(仅 CRUD,无源码编辑)
| 类型 | create | info | delete | download | sync | 说明 |
|------|:------:|:----:|:------:|:--------:|:----:|------|
| domain | ✅ | ✅ | ✅ | ❌ | ❌ | 源码端点 /source/main 在 NW 7.40 不存在 |
| dataelement | ✅ | ✅ | ✅ | ❌ | ❌ | 同上 |
> DDIC 对象在 NW 7.40 上以 XML 形式存储于对象 URI 本身,没有独立的 source/main 端点。这是 NW 7.50+ 才引入的特性。即便 Eclipse ADT 在 7.40 上也无法编辑 DDIC 源码——这不是 sap-cli 的缺陷。
### ❌ 不可用(NW 7.40 端点缺失)
| 类型 | 失败原因 | HTTP 状态码 | 代码状态 |
|------|----------|:-----------:|----------|
| table | 集合端点 POST Content-Type 不匹配 | 415 | 代码已写,待更正 |
| structure | 集合端点 POST Content-Type 不匹配 | 415 | 代码已写,待更正 |
| tabletype | DDIC tabletypes 集合端点不存在 | 404 | 代码已写,端点缺失 |
| view | 媒体类型不支持 | 415 | 代码已写,端点限制 |
| messageclass | handler 未注册 | 404 | 代码已写,端点缺失 |
| searchhelp | 端点不存在 | 404 | 代码已写,端点缺失 |
| lockobject | 端点不存在 | 404 | 代码已写,端点缺失 |
| cdsview | DDL source 端点不存在 | 404 | 代码已写,端点缺失 |
> **判定原则**:这些类型的 `_build_create_body` XML 结构代码已就位,但 NW 7.40 的 ADT 端点层就不通。验证方式——如果是 XML 结构错误,SAP 会返回 400 校验消息;而这 8 种类型返回的都是 404/415(端点不存在/媒体类型不支持),请求未到达 XML 解析。需在 S/4HANA 或更高 NW 版本上验证。
## 其他命令的版本兼容性
| 命令 | NW 7.40 | 说明 |
|------|:-------:|------|
| list | ✅ | 对象列表 |
| whereused | ✅ | 引用查询 |
| search | ✅ | 源码搜索 |
| check (ATC) | ✅ | 代码检查 |
| format | ✅ | Pretty Printer |
| diff | ✅ | 本地 vs SAP 对比 |
| transport | ✅ | 传输请求管理 |
| package | ✅ | 包管理 |
| show-table | ✅ | 表结构查询(SE11 |
| read-table | ✅ | 表数据查询 |
| run-program | ✅ | 远程执行程序 |
| activate | ✅ | 对象激活 |
## 已知限制
1. **DDIC 对象 sync 不可用** — sync 流程依赖 `/source/main` 端点,NW 7.40 不支持。需 NW 7.50+。
2. **DDIC 对象 lock Accept 头**`delete_object` 已修复(传 `application/vnd.sap.as+xml`),sync 流程未扩展(因 source/main 限制无意义)。
3. **table/structure create** — 返回 415Content-Type 不匹配),需调研 NW 7.40 集合端点的正确 POST 方式。
4. **NW 7.40 激活空响应** — activate 可能返回空响应,已有 double-activate 变通机制,极端情况提示去 SE09 手动激活。