Files
吴让宇 fc90bc719c rules(E04/E05): CALL FUNCTION 强制核实被调对象存在性与签名一致(老板指令 09-10)
- E04:调用 Z 对象/引用 Z 结构前,必须 sap-cli info/download/read-table DD02L 核实对象真实存在且名称逐字符一致
- E05:参数名/类型/顺序以核实到的函数签名为准(函数头 Local Interface 节),结构组件以 DD02L/DD03L 实查为准
- 根因:ADT syntax-check 只覆盖当前对象自身,不校验被调函数存在性与结构匹配——本地全绿≠运行期不转储
- SKILL.md 质检标准行同步(28→38 条口径修正 + E04/E05 强制标注)
2026-09-10 22:38:09 +08:00

121 lines
6.0 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.
# ABAP 编码规则(质检标准)
> 维护者:Rangyu | 版本:v1.0 | 2026-08-05
>
> 本规则文档由 **Rangyu(老板)维护**,质检员在代码审计时以此文档为唯一标准。
> 质检结果分为:✅合规 / ❌违规(必须修复) / ⚠️建议(推荐修复)
---
## 1. 安全规则(Security
| ID | 规则 | 判定 | 示例 |
|----|------|------|------|
| S01 | 生产代码中**禁止硬断点**BREAK-POINT | ❌违反 | `BREAK-POINT.` → 删除 |
| S02 | 关键数据访问前**必须 AUTHORITY-CHECK** | ❌违反 | 聊天记录读取、配置维护、表维护 |
| S03 | SQL 注入防护:**所有变量必须用 @ 转义** | ✅合规 | `WHERE field = @lv_var` |
| S04 | 敏感数据(聊天内容、用户信息)需脱敏或审计 | ⚠️建议 | `zidt_chatlog` message_body 字段 |
| S05 | | | |
| S06 | | | |
| S07 | | | |
*(Rangyu 补充更多安全规则...*
---
## 2. 性能规则(Performance
| ID | 规则 | 判定 | 示例 |
|----|------|------|------|
| P01 | 禁止 `SELECT *`,仅查询所需字段 | ⚠️建议 | `SELECT field1, field2 FROM ...` |
| P02 | 禁止无 WHERE 条件的全表扫描(小配置表除外) | ⚠️建议 | `SELECT ... FROM ztable WHERE ...` |
| P03 | 大表查询必须有索引支撑 | ⚠️建议 | SE11 检查索引 |
| P04 | 循环内禁止 SQL 查询 | ❌违反 | LOOP 内 SELECT |
| P05 | 循环字符串拼接用 `CONCATENATE` 单次操作 | ⚠️建议 | 避免 LOOP 内 `&&` |
| P06 | | | |
| P07 | | | |
*(Rangyu 补充更多性能规则...*
---
## 3. 可维护性规则(Maintainability
| ID | 规则 | 判定 | 示例 |
|----|------|------|------|
| M01 | 重复代码超过 80% 相似 → 提取公共方法/FORM | ❌违反 | 3处 AI 调用重复约 90% |
| M02 | 每个 FORM/方法不超过 200 行 | ⚠️建议 | |
| M03 | 禁止**裸硬编码字符串**(模型名、GUI状态、事务码) | ⚠️建议 | 用常量 `CONSTANTS c_model TYPE ... VALUE 'qwq-32b'` |
| M04 | 关键逻辑必须有注释 | ⚠️建议 | |
| M05 | 无用变量/死代码必须清理 | ⚠️建议 | `gs_tool-END` 赋值未消费 |
| M06 | | | |
| M07 | | | |
*(Rangyu 补充更多可维护性规则...)*
---
## 4. 错误处理规则(Error Handling
| ID | 规则 | 判定 | 示例 |
|----|------|------|------|
| E01 | `sy-subrc <> 0` 后**不能静默处理** | ❌违反 | `IF sy-subrc <> 0. " 错误处理 ENDIF.` → 必须 MESSAGE/EXIT |
| E02 | API 调用必须有异常保护(CATCH) | ⚠️建议 | HTTP 调用、RFC 调用 |
| E03 | 数据库操作必须有错误处理 | ⚠️建议 | COMMIT/ROLLBACK |
| 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
| ID | 规则 | 判定 | 示例 |
|----|------|------|------|
| C01 | **禁止 `DATA(...)` inline 声明** | ❌违反 | `DATA(lv_x) = ...` → `DATA lv_x TYPE ...` |
| C02 | Open SQL `@` 转义**全局一致** | ❌违反 | 不能混用 `@lv` 和 `lv` |
| C03 | 禁止字符串模板 `\|...\|` | ❌违反 | 用 `CONCATENATE` 代替 |
| C04 | 禁止 `WITH EMPTY KEY` | ❌违反 | 用 `WITH DEFAULT KEY` |
| C05 | LOOP AT SCREEN 逻辑避免重复 | ⚠️建议 | 提取公共 FORM |
| C06 | | | |
| C07 | | | |
*Rangyu 补充更多 7.40 兼容规则...*
---
## 6. 代码风格规则(Style
| ID | 规则 | 判定 | 示例 |
|----|------|------|------|
| T01 | 命名遵循 SAP 规范(Z开头自定义) | ✅合规 | `ZIDTR_AI_ASSISTANT` |
| T02 | 变量命名语义化 | ⚠️建议 | `lv_date` 优于 `lv_d` |
| T03 | 注释语言统一(中/英) | ⚠️建议 | |
| T04 | | | |
| T05 | | | |
*(Rangyu 补充更多风格规则...*
---
## 附录:今天质检发现的典型违规
| 程序 | 问题 | 规则ID | 行号 |
|------|------|--------|------|
| ZIDTR_AI_ASSISTANT | 生产代码 BREAK-POINT | S01 | L44 |
| ZIDTR_AI_ASSISTANT | 权限检查缺失 | S02 | 全文 |
| ZIDTR_AI_ASSISTANT | 3处代码重复~90% | M01 | L464-667 |
| ZIDTR_AI_ASSISTANT | 硬编码模型名 | M03 | L207 |
| ZIDTR_AI_ASSISTANT | F4错误静默处理 | E01 | L170-172 |
| ZIDTR_AI_ASSISTANT | DATA(...) inline | C01 | L152等6处 |
| ZIDTR_AI_ASSISTANT | @转义混用 | C02 | L154/259 |
---
> **使用方式**:质检员读取本文件 → 逐条对照代码 → 输出 `✅/❌/⚠️` 审计报告。
>
> **维护方式**:Rangyu 随时增删规则,更新后通知小迅同步到质检员的审查标准。