docs(log): NW 7.40 逗号陷阱知识库 — 9种场景+修复模式 (ZMCP_READ_LOG实战)
This commit is contained in:
@@ -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` |
|
| `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` |
|
| Function name error | Missing `/` separator — use `ZGROUP/Z_FUNC` |
|
||||||
| EOFError on delete | Non-interactive — prepend `echo "yes" \|` |
|
| 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.
|
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.
|
||||||
|
|
||||||
|
|||||||
@@ -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_LOG(202行 → 236行优化):11 轮 sync,逐个歼灭 9 个逗号陷阱后编译通过。项目仓库:`D:\Gitee\sap-learningleader\src\ZIDT_MCP\report\`。
|
||||||
+2
-1
@@ -1,9 +1,10 @@
|
|||||||
# SAP ADT 错误知识库索引
|
# 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-set-source-500]] — set_source 500: 传输请求中无对象导致写入失败
|
||||||
- [[adt-nw740-open-sql-consistency]] — NW 7.40 Open SQL @ 转义一致性错误
|
- [[adt-nw740-open-sql-consistency]] — NW 7.40 Open SQL @ 转义一致性错误
|
||||||
|
- [[adt-nw740-comma-traps]] — NW 7.40 逗号陷阱:9 种编译器误判逗号的场景与修复
|
||||||
|
|||||||
Reference in New Issue
Block a user