feat: bgRFC/FM 支撑能力 + ADT 后缀剥离与 CLAS 激活修复(B1 配套)
CI / test (3.10) (push) Waiting to run
CI / test (3.11) (push) Waiting to run
CI / test (3.12) (push) Waiting to run

新增能力:
- remote-enable 子命令:设置函数模块处理类型为远程启用(bgRFC/RFC 执行体必需)。
  实现要点均按实机验证:PUT fmodule:processingType="rfc"(枚举值仅小写 rfc 有效,
  remoteEnabled/remote/RFC 等均 400);lockHandle 走 query 参数(放 header 报
  ParameterNotFound);PUT 后 GET 复核回显;DDIC 结构参数才可远程启用(类本地类型
  报"针对 RFC 不允许使用类或接口的类型")。
- create --type functiongroup 透传 --package / --corr_nr(此前 package 被静默写成 $TMP,
  导致函数组无法归目标包)。

修复:
- activate 请求体补重复引用:ADT CLAS 激活端点对 objectReferences 只有 1 个引用时
  返回 HTTP 200 + 空 body 且不执行激活;引用数 ≥2 才真正激活(同对象重复亦可)。
- scanner 剥离 ADT 文件后缀(xxx.clas.abap 解析错误)。

守卫测试:
- tests/unit/test_bgrfc_support.py(17 例):函数组 package 透传、processingType 助手、
  remote-enable 命令(含 lockHandle 走 query/小写 rfc/错误透传/复核失配判失败)、
  函数 URI 组装不得用组名冒充模块名。
- test_activate.py 增加激活请求体引用数守卫;test_repo_guards.py 增加后缀剥离守卫。

测试:tests/unit 676 + tests/test_sapcli.py 69 = 745 全绿
(PYTHONPATH=assets python -m unittest discover -s tests/unit -t tests)
This commit is contained in:
吴让宇
2026-09-15 22:51:35 +08:00
parent 04efa7388a
commit c06e350f6d
13 changed files with 697 additions and 4 deletions
+23
View File
@@ -90,6 +90,7 @@ Optional params in `[ ]`. 各命令参数以 `python main.py <cmd> --help` 为
| Other | `check` | `--name --type` (ATC) |
| Other | `format` | `--name --type` (Pretty Printer) |
| Other | `enhancement` | `--name --type` (增强) |
| Other | `remote-enable` | `--name <组/模块> [--corr_nr]` (FM 远程启用/bgRFC 执行体) |
| Other | `unit-test` | `--name --type` (ABAP Unit 测试) |
| Other | `package create` | `--name` |
| Other | `cds download` | `--name --path` |
@@ -120,6 +121,28 @@ python main.py activate --name ZMY_CLASS --type class --corr_nr DEVK901XXX
**Function naming**: must use `group/module`, e.g. `ZMY_FGROUP/Z_MY_FUNC`.
### Function Module Remote-EnablebgRFC/RFC 执行体)
bgRFC 的执行体必须是**远程启用的函数模块**。ADT 建 FM 默认 `processingType=normal`
语法检查**不校验**此标志,必须显式置 `rfc` 并以 `TFDIR.FMODE='R'` 复核。
```bash
python main.py remote-enable --name ZINT_FG_INTEGRATE/ZINT_FM_LOG_COMMIT --corr_nr DEVK901376
```
命令内部闭环(锁定→GET 原 XML→改 `processingType=rfc`→PUT→GET 复核→解锁),
仅改属性,不激活、不查 TFDIR。关键事实(本机 NW 7.52 实测):
| 要点 | 事实 |
|------|------|
| `processingType` 枚举值 | 只认小写 `rfc``remoteEnabled`/`remote`/`RFC` 等值全 400 |
| `lockHandle` 传递 | 必须走 query 参数 `?lockHandle=`;放 header 报 `ExceptionParameterNotFound` |
| 参数类型限制 | 只允许 DDIC 对象(结构含 STRING 列已验证);类本地类型 → HTTP 500「针对 RFC 不允许使用类或接口的类型」;表类型参数需 TTYP 端点(本机 404) |
| FM 源码限制 | `FUNCTION``ENDFUNCTION` 之间不得放 `*"` 参数注释块(ADT 拒绝「Parameter comment blocks are not allowed」) |
| 最终确认 | `TFDIR.FMODE='R'` 留给调用方 `read-table` 复核(本命令不查) |
—— 落款:吴让宇
## ⚠️ Constraints (HARD RULES — DO NOT VIOLATE)
Full rules: `references/sap-tool-constraints.md`. Violations are intercepted by hooks.