fix(create): $TMP 包不再误弹传输请求选择
cmd_create 在未指定 --corr_nr 时无条件调 _select_transport_request(), 未判目标包 —— $TMP 是本地包(对象不进传输),弹交互是错的,且管道/脚本 调用时 input() 直接 EOFError,报错栈指向传输选择,误导排查方向。 修法:包名规范化后等于 $TMP/TMP 则跳过选择(corr_nr=None)。 实测:create --package '$TMP' 直接成功,TADIR 落 DEVCLASS=$TMP。
This commit is contained in:
@@ -299,7 +299,7 @@ Full flow: `references/error-handling.md`.
|
|||||||
| HTTP 404 (DDIC download/sync) | NW 7.40 has no `/source/main` endpoint (7.50+) — DDIC objects only create/info/delete |
|
| HTTP 404 (DDIC download/sync) | NW 7.40 has no `/source/main` endpoint (7.50+) — DDIC objects only create/info/delete |
|
||||||
| HTTP 423 (Transport lock) | Object bound to transport — report to user → SE09 |
|
| HTTP 423 (Transport lock) | Object bound to transport — report to user → SE09 |
|
||||||
| HTTP 500 (set_source) | Lock 成功但写入 500,传输请求中无对象 → SE09 手动添加对象到请求 → `log/adt-set-source-500.md` |
|
| HTTP 500 (set_source) | Lock 成功但写入 500,传输请求中无对象 → SE09 手动添加对象到请求 → `log/adt-set-source-500.md` |
|
||||||
| DDIC 文本不持久化(NW740) | ADT POST 创建域/数据元素后 DD01T 0 行 / DD04T 占位名 / DD07T 0 行——**ADT create 不写任何文本**。工法:工具报表内 `DDIF_DOMA_GET→改 ddtext/dd07v-ddtext→DDIF_DOMA_PUT→DDIF_DOMA_ACTIVATE`(DTEL 同理 DD04V)。两个坑:①DDIF_DTEL_PUT 签名仅 NAME/DD04V_WA(多传 tpara_wa 运行期转储 500);②GET 返回的 dd07v 行 ddlanguage 为空,PUT 必须补 `ddlanguage='E'` 否则固定值文本静默丢失 |
|
| DDIC 文本不持久化(NW740) | ADT POST 创建域/数据元素后 DD01T 0 行 / DD04T 占位名 / DD07T 0 行——**ADT create 不写任何文本**。工法:工具报表内 `DDIF_DOMA_GET→改 ddtext/dd07v-ddtext→DDIF_DOMA_PUT→DDIF_DOMA_ACTIVATE`(DTEL 同理 DD04V)。坑:①DDIF_DTEL_PUT 签名仅 NAME/DD04V_WA;②GET 返回的 dd07v 行 ddlanguage 为空,PUT 必须补 `ddlanguage='E'`;③dd07v 每行必须带 domname 否则整 PUT 拒收 subrc=2;④TABL/STRUCT 盲 PUT 后 ACTIVATE rc=8 静默失败(新版本停 N),必须先 GET(state='A')→改文本→PUT;⑤string 传 DDIF 的 name 参数须先 `DATA lv_obj TYPE ddobjname`;⑥验证 SELECT 必须 `AS4LOCAL='A'` 过滤(重 PUT 后 N+A 双行);⑦多语言:逐语言 PUT→最后一次激活(混语言单 PUT subrc=6 拒收);⑧TR_TADIR_INTERFACE 在 programrun 上下文返回 OK 但静默不落 TADIR(含 wi_test_modus=' ',两次实证)——TADIR 指派只能 SE11。**泛化工具:ABAP_Integrated/tools/ddic-tool/(engine.template.abap + gen_tool.py + RUNBOOK.md,多语言版全绿实证)** |
|
||||||
| oo/classes 激活 200 空响应 | K/S 型传输请求接不了 CLAS 激活(PROG/DOMA 端点不受限)——POST 200 但对象恒 inactive。判据:日志 `Object still inactive after retry`。出路:SE09 建 W 型工作台请求或 SAP GUI 右键 Activate |
|
| oo/classes 激活 200 空响应 | K/S 型传输请求接不了 CLAS 激活(PROG/DOMA 端点不受限)——POST 200 但对象恒 inactive。判据:日志 `Object still inactive after retry`。出路:SE09 建 W 型工作台请求或 SAP GUI 右键 Activate |
|
||||||
| oo/classes 写入 500 "unknown comments" | IMPLEMENTATION 与 METHOD 之间的 `*"` 块注释不能存储——把类级注释移进 METHOD 体内 |
|
| oo/classes 写入 500 "unknown comments" | IMPLEMENTATION 与 METHOD 之间的 `*"` 块注释不能存储——把类级注释移进 METHOD 体内 |
|
||||||
| PUT 源码后 DD02L 恒 N 态 | DD03L 内部类型名是 STRG 不是 SE11 界面显示的 STRING;comptype:数据元素引用='E'(非 'D')、结构引用='S' |
|
| PUT 源码后 DD02L 恒 N 态 | DD03L 内部类型名是 STRG 不是 SE11 界面显示的 STRING;comptype:数据元素引用='E'(非 'D')、结构引用='S' |
|
||||||
@@ -338,7 +338,7 @@ NW 7.40 specifics:
|
|||||||
- **ABAP syntax limits** — no string templates `\|...\|`, no inline `DATA(...)`, no `WITH EMPTY KEY`.
|
- **ABAP syntax limits** — no string templates `\|...\|`, no inline `DATA(...)`, no `WITH EMPTY KEY`.
|
||||||
- **Open SQL @ 转义一致性** — NW 7.40 要求一处用 `@` 则全 SQL 必须一致(`WHERE field = @lv_var` → `INTO TABLE @lt_data`),混用导致语法检查 2 错误。详见 `log/adt-nw740-open-sql-consistency.md`。
|
- **Open SQL @ 转义一致性** — NW 7.40 要求一处用 `@` 则全 SQL 必须一致(`WHERE field = @lv_var` → `INTO TABLE @lt_data`),混用导致语法检查 2 错误。详见 `log/adt-nw740-open-sql-consistency.md`。
|
||||||
- **set_source HTTP 500(传输请求无对象)** — Lock 成功但写入 500,根因:Lock API 创建锁句柄但未绑定对象到传输请求。NW 7.40 需 SE09 手动添加。详见 `log/adt-set-source-500.md`。
|
- **set_source HTTP 500(传输请求无对象)** — Lock 成功但写入 500,根因:Lock API 创建锁句柄但未绑定对象到传输请求。NW 7.40 需 SE09 手动添加。详见 `log/adt-set-source-500.md`。
|
||||||
- **DDIC 文本不持久化(S4T 实测 2026-09-14)** — ADT POST 创建域/数据元素不落任何文本(DD01T/DD07T 0 行、DD04T 只剩对象名占位),且建对象时无论 XML 是否带 description。sap-cli 侧已补 JSON description 消费(--description > JSON.description > 对象名),但 NW740 服务端仍不落库——批量落 DDIC 文本用「工具报表 + DDIF_*_GET→PUT→ACTIVATE」补写工法(源码样板见 sap-build 之外的 ABAP_Integrated/src/ZINT.package/program/zint_pilot_ddic_tool.prog.abap),注意 DDIF_DTEL_PUT 仅 NAME/DD04V_WA 两参数、DDIF_DOMA_GET 返回的 dd07v 行 ddlanguage 为空需补 'E'。
|
- **DDIC 文本不持久化(S4T 实测 2026-09-14)** — ADT POST 创建域/数据元素不落任何文本(DD01T/DD07T 0 行、DD04T 只剩对象名占位),且建对象时无论 XML 是否带 description。sap-cli 侧已补 JSON description 消费(--description > JSON.description > 对象名),但 NW740 服务端仍不落库——批量落 DDIC 文本用「工具报表 + DDIF_*_GET→PUT→ACTIVATE」补写工法(泛化工具三件套:ABAP_Integrated/tools/ddic-tool/ —— gen_tool.py 渲染 engine.template.abap 生成可上传报表,内嵌 JSON + /UI2/CL_JSON 动态解析(S4T 实证存在且三层嵌套深结构可用)+ 四类对象 PUT/ACTIVATE + 内建取证报告,五步工法与 12 条实证坑见其 RUNBOOK.md)。
|
||||||
- **CSRF token** — all writes require it; sap-cli handles automatically.
|
- **CSRF token** — all writes require it; sap-cli handles automatically.
|
||||||
|
|
||||||
### DDIC 结构/表类型落地方案(NW 7.40 无 ADT 端点时)
|
### DDIC 结构/表类型落地方案(NW 7.40 无 ADT 端点时)
|
||||||
|
|||||||
@@ -915,7 +915,13 @@ def cmd_create(args: argparse.Namespace, client: ADTClient) -> None:
|
|||||||
# 非交互模式:用户通过 --corr_nr 指定
|
# 非交互模式:用户通过 --corr_nr 指定
|
||||||
print(f" ✓ 传输请求(指定): {corr_nr}")
|
print(f" ✓ 传输请求(指定): {corr_nr}")
|
||||||
else:
|
else:
|
||||||
corr_nr = _select_transport_request(client)
|
package_for_transport = getattr(args, "package", None) or "$TMP"
|
||||||
|
if package_for_transport.strip().upper() in ("$TMP", "TMP"):
|
||||||
|
# $TMP = 本地包,对象不进传输;弹交互选择是错的(管道调用会 EOFError)
|
||||||
|
print(" ℹ 目标包为 $TMP(本地对象),跳过传输请求选择")
|
||||||
|
corr_nr = None
|
||||||
|
else:
|
||||||
|
corr_nr = _select_transport_request(client)
|
||||||
|
|
||||||
if obj_type == "function":
|
if obj_type == "function":
|
||||||
group_name = name.split("/", 1)[0]
|
group_name = name.split("/", 1)[0]
|
||||||
|
|||||||
Reference in New Issue
Block a user