From fc90bc719cb590c9b125eee1db4a4ca9c65c4e84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E8=AE=A9=E5=AE=87?= Date: Thu, 10 Sep 2026 22:38:09 +0800 Subject: [PATCH] =?UTF-8?q?rules(E04/E05):=20CALL=20FUNCTION=20=E5=BC=BA?= =?UTF-8?q?=E5=88=B6=E6=A0=B8=E5=AE=9E=E8=A2=AB=E8=B0=83=E5=AF=B9=E8=B1=A1?= =?UTF-8?q?=E5=AD=98=E5=9C=A8=E6=80=A7=E4=B8=8E=E7=AD=BE=E5=90=8D=E4=B8=80?= =?UTF-8?q?=E8=87=B4=EF=BC=88=E8=80=81=E6=9D=BF=E6=8C=87=E4=BB=A4=2009-10?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - E04:调用 Z 对象/引用 Z 结构前,必须 sap-cli info/download/read-table DD02L 核实对象真实存在且名称逐字符一致 - E05:参数名/类型/顺序以核实到的函数签名为准(函数头 Local Interface 节),结构组件以 DD02L/DD03L 实查为准 - 根因:ADT syntax-check 只覆盖当前对象自身,不校验被调函数存在性与结构匹配——本地全绿≠运行期不转储 - SKILL.md 质检标准行同步(28→38 条口径修正 + E04/E05 强制标注) --- SKILL.md | 2 +- references/abap-coding-rules.md | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/SKILL.md b/SKILL.md index 8acf2b3..98361b6 100644 --- a/SKILL.md +++ b/SKILL.md @@ -101,7 +101,7 @@ python main.py activate --name ZMY_CLASS --type class --corr_nr DEVK901XXX ## ⚠️ Constraints (HARD RULES — DO NOT VIOLATE) Full rules: `references/sap-tool-constraints.md`. Violations are intercepted by hooks. -质检标准: `references/abap-coding-rules.md`(28条规则,6大类:安全/性能/可维护性/错误处理/NW740兼容/风格)。质检员在代码审计时以此文档为唯一标准,判定体系:✅合规 / ❌违反(必须修复) / ⚠️建议(推荐修复)。 +质检标准: `references/abap-coding-rules.md`(38条规则,6大类:安全/性能/可维护性/错误处理/NW740兼容/风格。其中 E04/E05 强制:CALL FUNCTION 前必须核实被调对象存在、参数结构与真实签名一致,ADT 语法检查不覆盖被调对象,核实记录纳入交付物)。质检员在代码审计时以此文档为唯一标准,判定体系:✅合规 / ❌违反(必须修复) / ⚠️建议(推荐修复)。 1. **Only `python main.py ` touches SAP** — no `requests`/`urllib`, no curl to ADT/SOAP/RFC, no `python -c` inline, no importing `ADTClient` internals, no hand-built ADT XML. Exceptions: `run-program` custom reports, explicit user request, or developing sap-cli itself. 2. **Never modify SAP standard objects** (`CL_*`, `CX_*`, `IF_*`, `SAPL*`, or any non-user original system) — read-only only: download/info/list/search/whereused/show-table/read-table/diff. When unsure, ask the user. diff --git a/references/abap-coding-rules.md b/references/abap-coding-rules.md index 1eb73e8..c7787d4 100644 --- a/references/abap-coding-rules.md +++ b/references/abap-coding-rules.md @@ -62,11 +62,13 @@ | E01 | `sy-subrc <> 0` 后**不能静默处理** | ❌违反 | `IF sy-subrc <> 0. " 错误处理 ENDIF.` → 必须 MESSAGE/EXIT | | E02 | API 调用必须有异常保护(CATCH) | ⚠️建议 | HTTP 调用、RFC 调用 | | E03 | 数据库操作必须有错误处理 | ⚠️建议 | COMMIT/ROLLBACK | -| E04 | | | | -| E05 | | | | +| E04 | **CALL FUNCTION 前必须核实被调对象真实存在**:ADT 通道无法校验被调函数与引用结构是否存在(syntax-check 只覆盖当前对象自身),凡调用 `CALL FUNCTION 'Z...'` 或引用 `Z...` 结构/表类型,必须先用 sap-cli(`info`/`download`/`read-table DD02L` 任一)确认对象存在且名称逐字符一致,再落代码 | ❌违反 | 凭记忆写 `CALL FUNCTION 'ZMM_BIP_CREATE'`(实际对象是 `ZMM_BIP_VENDOR_CREATE`)→ 编译期不报错、运行期 CALL_FUNCTION_NOT_FOUND 转储。正确:先 `sap-cli info --name 组名/函数名 --type function` 查实,再写调用 | +| E05 | **CALL FUNCTION 的参数结构必须与被调函数真实签名一致**:IMPORTING/EXPORTING/CHANGING/TABLES 各参数名、类型、顺序以核实到的函数签名为准(info 输出或 download 函数源码的 Interface 节),不得按猜测拼参数;引用的 DDIC 结构(如 `TYPE zmm_bip_001_in`)须同批核实结构存在且组件名/类型一致 | ❌违反 | `CALL FUNCTION 'X' EXPORTING iv_a = lv` 但实际签名参数是 `IS_IMPORT` → 运行期 PARAMETER_NOT_FOUND/类型不匹配转储。正确:以 `download` 拿到函数头 `"*" Local Interface: 注释节为准逐参数比对,结构组件以 DD02L/DD03L 实查为准 | *(Rangyu 补充更多错误处理规则...)* +> **E04/E05 背景(2026-09-10 老板指令)**:远程语法检查不校验被调函数的存在性与签名匹配——本地语法全绿 ≠ 运行期不转储。开发报表/程序中所有 `CALL FUNCTION`(尤其调用本组外/客户化 Z 对象)一律先核实后调用,核实记录(对象存在性 + 签名比对)纳入交付物。 + --- ## 5. NW 7.40 兼容规则(7.40 Compatibility)