docs(log): NW 7.40 逗号陷阱知识库 — 9种场景+修复模式 (ZMCP_READ_LOG实战)

This commit is contained in:
WuRangyu
2026-09-01 15:53:08 +08:00
parent 4ab61cef0e
commit cd34b46dea
3 changed files with 71 additions and 1 deletions
+1
View File
@@ -206,6 +206,7 @@ Full flow: `references/error-handling.md`.
| `WITH EMPTY KEY` dump | NW 7.40 unsupported — use `WITH NON-UNIQUE KEY` / `WITH DEFAULT KEY` |
| Function name error | Missing `/` separator — use `ZGROUP/Z_FUNC` |
| EOFError on delete | Non-interactive — prepend `echo "yes" \|` |
| Syntax: "此处不允许逗号" | NW 7.40 逗号陷阱(9种) → `log/adt-nw740-comma-traps.md` |
General flow: **diagnose** (params / file / transport / network / object existence) → **usage error**: fix & retry → **sap-cli limit**: report, never bypass → **SAP limit**: exhaust automation below → **confirmed un-automatable**: request SAP GUI op.
+68
View File
@@ -0,0 +1,68 @@
---
title: "NW 7.40 逗号陷阱 — ABAP 编译器对逗号的极端敏感"
created: 2026-08-06
type: error
tags: [sap, adt, nw740, syntax, comma, abap-compiler, pitfall]
adt_endpoint: /sap/bc/adt/programs/programs
adt_method: PUT (set_source)
---
# NW 7.40 逗号陷阱
## 症状
sync 或 syntax-check 反复报错:
```
此处不允许 ",",因为它包含无效字符或者是关键字。(可通过 "!" 转义)。缺少空格或空格过多。
```
代码逐字节上传无误,本地零语法错误,但 SAP 编译器拒绝编译。
## 根因
NW 7.40 的 ABAP 词法分析器对逗号(`,`)极度敏感,多个 SP 补丁级别的解析器表现不一致。即使逗号出现在注释、字符串字面量、CSS 属性值中,编译器仍可能将其误读为 ABAP 语法分隔符。
## 9 大逗号陷阱清单
| # | 陷阱 | 示例 | 修复 |
|---|------|------|------|
| 1 | SELECT-OPTIONS 链式逗号 | `SELECT-OPTIONS: s_a FOR x, s_b FOR y.` | 拆为独立 `SELECT-OPTIONS` 语句 |
| 2 | CLASS-METHODS 链式逗号 | `CLASS-METHODS: m1, m2, m3.` | 拆为独立 `CLASS-METHODS` 声明 |
| 3 | DATA 链式逗号 | `DATA: a TYPE x, b TYPE y.` | 拆为独立 `DATA` 声明 |
| 4 | CSS `font-family` 逗号 | `font-family:Consolas,monospace` | 简化为单一字体 `monospace` |
| 5 | MESSAGE 字符串内 ASCII 逗号 | `MESSAGE ... WITH '数据, 请重试'` | 替换为空格 |
| 6 | `&&` 字符串拼接运算符 | `lv = 'a' && ',' && 'b'.` | 改用 `CONCATENATE` |
| 7 | 注释中逗号 | `" 列不存在, 无需隐藏` | 去掉逗号或用空格替代 |
| 8 | 行内注释逗号 | `DATA: x. " 注释, 有逗号` → 编译器误读 | 清除注释中的逗号 |
| 9 | 字符串字面量中逗号 | `','``CONCATENATE` 参数中 | 用变量替代:`DATA lv TYPE c VALUE ','. CONCATENATE a lv b INTO x.` |
## 解决模式
```abap
" ❌ 链式声明 — NW 7.40 可能误判
DATA: lv_a TYPE i,
lv_b TYPE string.
" ✅ 独立声明
DATA: lv_a TYPE i.
DATA: lv_b TYPE string.
" ❌ 字符串中逗号
MESSAGE '请检查, 并重试' TYPE 'E'.
" ✅ 空格替代
MESSAGE '请检查 并重试' TYPE 'E'.
```
## 排查流程
1. `upload` 代码到 SAP
2. `syntax-check` 获取错误
3. 搜索本地文件中所有 `,`(包括注释、字符串、CSS
4. 逐一替换/绕过
5. 重复 upload → syntax-check 直到 0 错误
6. 注意:NW 7.40 可能连 `*` 注释行中的逗号也误判
## 相关错误
- [[adt-nw740-open-sql-consistency]] — NW 7.40 @ 转义一致性
- [[adt-set-source-500]] — 传输请求中无对象导致 set_source 500
## 实战案例
ZMCP_READ_LOG202行 → 236行优化):11 轮 sync,逐个歼灭 9 个逗号陷阱后编译通过。项目仓库:`D:\Gitee\sap-learningleader\src\ZIDT_MCP\report\`
+2 -1
View File
@@ -1,9 +1,10 @@
# SAP ADT 错误知识库索引
> 内容目录。每个错误页面一行摘要。
> Last updated: 2026-08-05 | Total pages: 2
> Last updated: 2026-08-06 | Total pages: 3
## 错误
- [[adt-set-source-500]] — set_source 500: 传输请求中无对象导致写入失败
- [[adt-nw740-open-sql-consistency]] — NW 7.40 Open SQL @ 转义一致性错误
- [[adt-nw740-comma-traps]] — NW 7.40 逗号陷阱:9 种编译器误判逗号的场景与修复