Files
sap-cli-skill/references/abap-coding-rules.md
T

119 lines
4.4 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.
# 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 | | | |
| E05 | | | |
*(Rangyu 补充更多错误处理规则...)*
---
## 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 随时增删规则,更新后通知小迅同步到质检员的审查标准。