abap-cli-edit
/abap-cli-edit
Zmienia obiekty SAP przez abap-cli: pobiera i wysyła kod, sprawdza składnię, tworzy, aktywuje i publikuje usługi.
- Autor
- chunrichi ↗
- Repozytorium
- abap-cli ↗
- Licencja
- MIT
- Ostatnia zmiana repozytorium
- 12.11.2026
Ocena i bezpieczeństwo
- Pliki w paczce
- 28
- Skrypty
- 0
- Komentarze HTML
- 0
- Adresy URL w SKILL.md
- 5
Brak sygnałów. Repozytorium zmienione 12.11.2026, bez odwołań do wycofanych modeli i API.
MIT, otwarta: można używać i zmieniać, z zachowaniem informacji o autorze.
Co robi i kiedy
Zmienia obiekty SAP przez abap-cli: pobiera i wysyła kod, sprawdza składnię, tworzy, aktywuje i publikuje usługi.
Oryginalny opis (EN)
abap-cli 写路径 — 拉(`pull`)/ 推(`push`)/ 语法检查(`check`)/ 创建(`create` / `create local`)/ 激活(`activate`)/ 删除(`delete`)/ 列举(`list`)/ 服务绑定发布(`publish` / `unpublish`)/ MIME Repository CRUD(`mime create` / `mime delete` / `mime push`)/ AFF 校验(`validate:aff`),含 DDIC CRUD(DOMA / DTEL / TABL / STRU)与 ICF/SICF 服务节点(类型码 `HTTP`),经 `pull --type` / `create --file` / `push *.json`。use when asking how to change a SAP object / download an ABAP class / push a local file / run syntax check / create or delete an object / activate inactive parts / publish or unpublish an OData service binding endpoint / audit a package
Jak działa
- 代码质量
- 何时用
- 决策树
- 支持的对象类型(权威列表)
- TABL vs STRU(DDL 注解差异)
- 推送前 checklist
- 错误恢复(本 skill 专属错误码)
- push 失败环节(data.stage)
- 注入安全(DDIC)
- 通用规则
Podgląd SKILL.md
---
name: abap-cli-edit
description: abap-cli 写路径 — 拉(`pull`)/ 推(`push`)/ 语法检查(`check`)/ 创建(`create` / `create local`)/ 激活(`activate`)/ 删除(`delete`)/ 列举(`list`)/ 服务绑定发布(`publish` / `unpublish`)/ MIME Repository CRUD(`mime create` / `mime delete` / `mime push`)/ AFF 校验(`validate:aff`),含 DDIC CRUD(DOMA / DTEL / TABL / STRU)与 ICF/SICF 服务节点(类型码 `HTTP`),经 `pull --type` / `create --file` / `push *.json`。use when asking how to change a SAP object / download an ABAP class / push a local file / run syntax check / create or delete an object / activate inactive parts / publish or unpublish an OData service binding endpoint / audit a package for scratch work / edit a DDIC definition / create or edit an ICF SICF HTTP service node / upload or delete MIME resources in SE80 / validate an AFF canonical JSON before pushing / which object types the CLI supports.
metadata:
version: "2.7.0"
scope: sap
commands: [pull, push, check, create, activate, publish, unpublish, "create local", mime, "validate:aff", delete, list]
tags: [write, lock, transport, ddic, http, sicf, srvb, publish, mime, aff, cleanup, audit]
---
# abap-cli-edit — 写路径(含 DDIC + MIME + AFF 校验)
`sap scope` — 6 个写命令集合 + 2 个写辅助。`mime` 走自建 ICF handler `dispatch_mime`(依赖 `deploy`),`validate:aff` 是纯本地(ajv + Draft 2020-12)写盘前 gate(**不进 SAP**)。DDIC 定义(DOMA / DTEL / TABL / STRU)的 CRUD 与源码 CLAS/INTF/PROG 共用同一组 `pull` / `create` / `push` 命令(DDIC 走 ICF 旁路而非 ADT),归此 skill 的同一棵决策树。
## 代码质量
本 skill 只覆盖 CLI 写路径;写代码前的领域规范与推送前自审由仓库本地技能与用户规则决定。仓库开发时可按需加载 `.agents/skills/abap-style`;用户机器上不存在则跳过。
## 何时用
- 首次进入项目,把已有对象(CLAS / PROG / INTF / FUGR / TABL)拉到本地编辑
- 创建新 ABAP 对象(class / interface / program / function group / table / structure / domain / data element)
- 编辑本地 `.abap` / `.json` 文件后推回 SAP(带 transport / 锁 / 激活)
- 推送前做语法检查 / 内容检查 / ATC 检查
- 对象激活状态对不上(`push` 报 activated 但实际未激活)时用 `inspect --activation` 诊断 + `activate` 修复
- 比较本地与 SAP 差异(`diff` / `status`)后再决定 pull 或 push——`diff` / `status` 在 `abap-cli-search`,本 skill 关注"差异确定后的拉/推动作"
- 显式编排 status → pull → push——CI 友好
- 离线起一份草稿(`create local`)再 push
- DDIC 定义 CRUD:`pull <name> --type DOMA|DTEL|TABL|STRU`、`create <type> <name> --file <json>`、`push <name>.<type>.json`。TABL/STRU 现在遵循 abap-file-format 三件套(`--file` 指向 main `.tabl.json` + 同目录 `.tabl.ddic` + 可选 `.tabl.settings.json`);只有 main JSON 时回落 legacy wire-flat(详见 workflow.md 变体 2)。**写新 TABL/STRU 时直接 `cp` [assets/tabl-templates](./assets/tabl-templates/README.md) 里的 DDL 骨架**(5 个场景:透明表 / include / 货币金额 / 数量单位 / STRU),别凭空写 `@AbapCatalog.*` 注释
- 上传 UI 资产(JavaScript / CSS / 图片 / 模板)到 SAP MIME Repository(SE80)→ `mime create / push`;删 MIME 目录走 `mime delete --recursive`
- 写盘前用官方 AFF schema 严格校验本地 JSON(CLAS / INTF / PROG / FUGR / TABL / STRU / DOMA / DTEL / HTTP / TRAN / TTYP / MSAG / DDLS / APLO / CHDO / EVTB / SMBC / ENHO / ENHS)→ `validate:aff <file-or-dir> --json`(纯本地 ajv + Draft 2020-12,**不进 SAP**;CI / pretest gate)。退出码即结论:`0` 通过(含 WARN)、`2` 参数/路径错误、`7` 校验失败(`error.details.files[]` 列出每个失败文件与 `missingCompanions`)
- 发布/取消发布 OData 服务绑定(SRVB)的本地 endpoint:`abap publish <SRVB>` / `abap unpublish <SRVB>`(ADT publish/unpublish job;版本从绑定元数据推导)
- 清理或审计 SAP 上的对象:列出包内对象用 `list --package <pkg> [--type <type>]`(只读);删除单个对象用 `delete <name> --type <type> [--tr <req>] --yes`(lock → delete → unlock,必传 `--yes`,非本地包(`$` 前缀之外)必传 `--tr`,与 `push` 语义一致)。常用于删除一次性探针类 / $TMP 草稿清理 / 批量接管前先看包
## 决策树
```
动一个 SAP 对象?
├── 已有 → [abap-cli-search] search → 必要时 where-used 评估冲击 → pull → 编辑 → check syntax → push
│ ├── push 报 activated 但未真激活?→ inspect --activation([abap-cli-search])→ activate --yes
│ └── 多文件?→ push --atomic
├── 新建 → [abap-cli-search] search 确认不存在 → create <type> <name> --package ... --tr ...
│ └── 离线草稿?→ create local → 编辑 → create ... --no-pull → push
├── 批量 → search --package → pull --package
│ └── 链式?→ status → pull → push
└── 拉 transport 内全部对象(跨开发同步 / 接手别人工作)→ pull --tr <request>
└── 一次性按 transport 详情 + 嵌套 task 去重拉取,按 type 路由;单对象失败不中断(data.partial: true)
├── 清理 / 审计 → [本 skill] list --package <pkg> [--type <type>] # 列出包内对象(只读)
│ └── 删除单个 → delete <name> --type <type> [--tr <req>] --yes
│ └── 本地包($ 前缀)对象可裸删;其它包必传 --tr;删除走 lock → delete → unlock 闭环
DDIC 定义?
├── TABL/STRU 拉 → pull <name> --type TABL|STRU # 落三件套 (.tabl.json + .tabl.ddic [+ .tabl.settings.json])
├── TABL/STRU 改 → 编辑 .tabl.ddic(DDL 源真值);设置编辑 .tabl.settings.json
├── TABL/STRU 建 → write 三件套 → create <type> <name> --file <name>.tabl.json --package ... --tr ...
├── TABL/STRU 推 → push <name>.tabl.json --tr <tr> # main 文件即可;同目录三件套一起推
├── DOMA/DTEL 拉 → pull <name> --type DOMA|DTEL # 落单文件 wire-flat
├── DOMA/DTEL 改 → 编辑 <name>.<type>.json(顶层 name / dataType / length / description / domain)
└── DOMA/DTEL 推 → push <name>.<type>.json --tr <tr>
ICF / SICF 服务节点?→ 类型码是 HTTP,不是 SICF
├── 拉 → pull <name> --type HTTP # 落 http/<name>.http.json
├── 建 → 写 .http.json → create HTTP <name> --file <path> --package ... --tr ...
└── 推 → push <name>.http.json --tr <tr>
MIME Repository(SE80 / UI 资产)?
├── 建目录 → mime create /<path> --package '$TMP' --yes # 非 TTY 必填 --yes
├── 传文件 → mime push ./dist --root /zntf_ui/assets --tr <request> --yes
└── 删目录 → mime delete /<path> [--recursive] --tr <request> --yes
AFF 写盘前 gate(纯本地,不进 SAP)
├── 单文件 → validate:aff <file>.tabl.json --json
├── 目录递归 → validate:aff src/ --json
└── 多路径 → validate:aff src/ --wire tmp/s4h/wire/ --json # 同时扫 AFF 目录 + wire 目录
```
## 支持的对象类型(权威列表)
写命令支持的类型以 `src/abap_cli/types/registry.ts` 为准(当前 **51 个注册类型码**;`DEVC` 有 create/pull/delete 无 push,`SRVB` 有 create/pull/delete 无 push,`SUCU` 只删除本地包授权组,`ENHO` / `ENHS` 只读仅 pull),CDS/RAP 有子集限制。完整类型表见 [abap-cli wiki object-types](https://github.com/chunrichi/abap-cli/blob/main/wiki/object-types.md);本节只列**写路径能力**。
| 类型码 | 对象 | 路由 | `create` | `pull` | `push` | `create local` |
|---|---|---|---|---|---|---|
| `CLAS` / `INTF` / `PROG` / `FUGR` | 源对象 | ADT | ✅ | ✅ | ✅ | ✅ |
| `TABL` / `STRU` | 表 / 结构 | ICF | ✅ | ✅ | ✅ | ❌(`TYPE_NOT_SUPPORTED`) |
| `DOMA` / `DTEL` | 域 / 数据元素 | ICF | ✅ | ✅ | ✅ | ❌(`TYPE_NOT_SUPPORTED`) |
| `TTYP` | 表类型 | ADT(ECC EHP6 走 ICF fallback) | ✅ | ✅ | ✅ | ❌(`TYPE_NOT_SUPPORTED`) |
| `MSAG` | 消息类 | ADT(ECC EHP6 走 ICF fallback) | ✅ | ✅ | ✅ | ❌(`TYPE_NOT_SUPPORTED`) |
| `DDLS` | CDS 视图源 | ADT(仅) | ✅ | ✅ | ✅ | ❌(`TYPE_NOT_SUPPORTED`) |
| `HTTP` | **ICF / SICF 节点** | ICF | ✅(须 `--file`) | ✅ | ✅ | ❌(`TYPE_NOT_SUPPORTED`) |
| `TRAN` | 事务码 (SE93) | ICF | ✅(须 `--file`) | ✅ | ✅ | ❌(`TYPE_NOT_SUPPORTED`) |
| `ENQU` / `NROB` | 锁对象 / 号段对象 | ICF(`NROB` 的 `pull` 为 ADT 主路径 + ICF fallback) | ✅(须 `--file`) | ✅ | ✅ | ❌(`TYPE_NOT_SUPPORTED`) |
| `CHKC` / `CHKO` / `CHKV` | ATC 检查类别 / 检查 / 检查变体 | ADT(仅) | ✅(须 `--file`) | ✅ | ✅ | ❌(`TYPE_NOT_SUPPORTED`) |
| `DTDC` / `DTEB` / `DSFD` | 动态缓存 / 实体缓冲 / 标量函数定义 | ADT(仅) | ✅(须 `--file`) | ✅ | ✅ | ❌(`TYPE_NOT_SUPPORTED`) |
| `DSFI` | 标量函数实现引用 | ADT(仅) | ✅(须 `--file`) | ✅ | ✅ | ❌(`TYPE_NOT_SUPPORTED`) |
| `DRTY` | CDS 简单类型 | ADT(仅) | ✅(须 `--file`) | ✅ | ✅ | ❌(`TYPE_NOT_SUPPORTED`) |
| `TYPE` | 类型池(TYPE-POOL) | ADT(仅) | ✅(须 `--file`) | ✅ | ✅ | ❌(`TYPE_NOT_SUPPORTED`) |
| `SAJC` / `SAJT` | 应用作业目录条目 / 模板 | ADT(仅) | ✅(须 `--file`) | ✅ | ✅ | ❌(`TYPE_NOT_SUPPORTED`) |
| `JOBD` | 应用作业定义(SM36) | ICF(仅) | ✅(须 `--file`) | ✅ | ✅ | ❌(`TYPE_NOT_SUPPORTED`) |
| `APLO` / `CHDO` / `EVTB` / `SMBC` | 应用日志 / 更改凭证 / 事件绑定 / 业务配置维护对象 | ADT blueSource(`source/main` 即官方 AFF JSON) | ✅(须 `--file`) | ✅ | ✅ | ❌(`TYPE_NOT_SUPPORTED`) |
| `ENHO` / `ENHS` | 增强实现 / 增强点(仅 BAdI) | ICF `/aff`(**只读,仅 pull**) | ❌(只读) | ✅ | ❌(只读) | ❌(`TYPE_NOT_SUPPORTED`) |
> `SAJC` / `SAJT` 的写入即保存激活(SAP 侧无 inactive 版本):不要传 `--no-activate`(会报 `VALIDATION_ERROR`);`create --check-only` 只做本地校验。名称上限 40 字符(其他类型通用上限 30)。
>
> `create` 的 `--file` 是 **registry 数据驱动**的必填项(`ObjectTypeEntry.requiresFile`),对 `TABL` / `STRU` / `DOMA` / `DTEL` / `ENQU` / `JOBD` / `NROB` / `HTTP` / `TRAN` / `TTYP` / `MSAG` / `DDLS` / `SRVB` / `SRVD` / `BDEF` / `DCLS` / `DDLX` / `DDLA` / `CHKC` / `CHKO` / `CHKV` / `TYPE` / `SAJC` / `SAJT` / `APLO` / `CHDO` / `EVTB` / `SMBC` 都适用;缺 `--file` 报 `USAGE`(exit 2),且该检查在写确认提示**之前**。`HTTP` 已没有"无 `--file` 落本地骨架"的旧路径(旧的无 --file 落本地骨架路径已删除)。 `ENHO` / `ENHS` 是只读类型,没有 create 路径(只能 pull)。
>
> `create local` 只支持 **`CLAS` / `INTF` / `PROG` / `FUGR`**(`formats/templates.ts` 只有这四类模板),其余类型一律 `TYPE_NOT_SUPPORTED`(exit 7)。`TTYP` / `MSAG` / `DDLS` 要起草稿就手写(或 `pull` 一份)AFF JSON 后走 `create --file`,别指望 `create local`。
### 无 push(有 create / pull / delete)
| 类型码 | 对象 | 路由 | 备注 |
|---|---|---|---|
| `SRVB` | Service Binding metadata | ADT | `create --file` 后激活,`--publish` 可发布;AFF 文档对 ADT binding 有损,push/update 不支持 |
| `DEVC` | 包(Package) | ADT | ADT 无包更新端点,不能 push;create / pull / delete 可用 |
### CDS / RAP 扩展(写路径能力与 FUGR 一致;走 child-lock + activate)
`SRVD` / `DCLS` / `DDLX` / `DDLA` — 这四类支持 `create / pull / push`(`create` 走 `--file` 必填 + companion `.acds` sidecar,pull/push 文件布局与 FUGR 平行:child-lock + parent activate)。**`create local` 不支持**(同样 `TYPE_NOT_SUPPORTED`)。**`BDEF` 支持 `create / pull / push / delete`**:`create` 读取 `.bdef.json` + 同目录 `.bdef.abdl` 源码并激活。详细见 [abap-cli wiki object-types](https://github.com/chunrichi/abap-cli/blob/main/wiki/object-types.md) 与各命令 schema。
### 关键说明
- **ICF 通道类型**(`TABL` / `STRU` / `DOMA` / `DTEL` / `ENQU` / `NROB` / `HTTP` / `TRAN`,以及只读 AFF 端点上的 `ENHO` / `ENHS` pull)依赖内置 ICF 服务已部署——失败先跳 `abap-cli-setup` 跑 `deploy status`。`TTYP` / `MSAG` 在旧内核(ECC EHP5/6)也降级走同一 ICF 服务;`DDLS` 无兜底。
- **AFF 对象按能力分通道**:`APLO` / `CHDO` / `EVTB` / `SMBC` 走 ADT blueSource(`source/main` 直接是官方 AFF JSON,lock / 保存即激活 / transport 由 ADT 承担,**不需要** `abap deploy`);`ENHO` / `ENHS` 只读,仅能 `abap pull`(走 ICF,需 `abap deploy`),写/删不支持。
- **`TTYP` / `MSAG` / `DDLS`**(双通道降级):envelope 多 `data.channel: 'adt' | 'icf'` 与 `data.fallbackReason`(`'ECC_EHP6_NO_ADT_TABLETYPE'` / `'ECC_EHP6_NO_ADT_MESSAGECLASS'`;TTYP / MSAG 在现代内核上缺 ADT 端点时为 `'ADT_ENDPOINT_UNAVAILABLE'`);ECC EHP5/6 自动降级 ICF;`DDLS` ECC 旧内核硬错 `DDLS_NOT_SUPPORTED_ON_ECC`(exit 64),不静默降级。
- **DDIC 三件套(TABL/STRU)**:`--file` 指向 main `.tabl.json`,CLI 自动读同目录 `.tabl.ddic`(DDL 真值)与可选 `.tabl.settings.json`;详见下方 TABL vs STRU 注解差异。
- **`create` 的未知类型报错已由 registry 驱动**:会列出全部 51 个注册类型码,无需再记住"哪些没被列进文案"。真正受限的是 `create local`(只 CLAS/INTF/PROG/FUGR)。
### 错误码全集(本 skill 涉及)
| 错误 | 触发场景 | 修复 |
|---|---|---|
| `DDIC_NOT_SUPPORTED` (exit 7) | 类型未注册,或该类型不支持 create | 看 [GitHub wiki/object-types.md](https://github.com/chunrichi/abap-cli/blob/main/wiki/object-types.md) 类型表 |
| `DDLS_NOT_SUPPORTED_ON_ECC` (exit 64) | DDLS 在 ECC EHP5/6 | 不可降级;需升级到 ECC EHP7+ 或 S/4HANA |
| `CHANNEL_DETECTION_FAILED` (exit 65) | profile 缺 systemVersion,channel-detect 拿不到 release | 跑 `profile test` 重读 release |
| `TYPE_NOT_SUPPORTED` (exit 7) | 类型未注册,或该类型不支持 create | 看 [GitHub wiki/object-types.md](https://github.com/chunrichi/abap-cli/blob/main/wiki/object-types.md) 类型表 |
| `OBJECT_NOT_FOUND` (exit 8) | 类型码传错(如 `--type SICF` 应为 `HTTP`) | 改用 `HTTP` 类型码;1.0.0 起不再接受 `SICF` |
HTTP 服务(SICF 节点)的文件契约与完整示例见 [references/workflow.md](references/workflow.md) 变体 12。
## TABL vs STRU(DDL 注解差异)
`@AbapCatalog.*` 注释里**只有 TABL 适用**——给 STRU 写会过 DDL 解析但语义无意义,AGENTS / 测试不会拦。下列差异在 DDL 写错时常撞上:
| 注解 / 字段 | TABL | STRU |
|---|---|---|
| `define` 关键字 | `define table <name>` | `define structure <name>` |
| `@AbapCatalog.deliveryClass : #A/C/L/...` | ✅ 必填 | ❌ 写了无意义 |
| `@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE` | ✅ 通常写 | ❌ |
| `@AbapCatalog.tableCategory : #TRANSPARENT` | ✅ 必填 | ❌ |
| `@AbapCatalog.dataMaintenance : #RESTRICTED` | ✅ 通常写 | ❌ |
| `.tabl.settings.json` | 可选 | ❌ 不要写(SAP 不为 STRU 产生 settings) |
| `key client : abap.clnt not null;` | ✅ 业务主键 | ❌ 不需要 key |
| `key <business_field>` | 主键 | 不需要 |
| `@Semantics.*` | 适用 | 适用(语义注解同样有效) |
CLI 解析器([tabl-artifact.ts:parseTablDdic](https://github.com/chunrichi/abap-cli/blob/main/src/abap_cli/formats/ddic/tabl-artifact.ts))按 `define table|structure` 自动分流;不会强制检查上述「TABL-only 注解出现在 STRU」的反模式,所以**写错是 silent 的**。直接 cp [assets/tabl-templates/structure-basic](./assets/tabl-templates/structure-basic/README.md) 骨架最稳。
## 推送前 checklist
`push` 是写操作。每次推送前:
1. **`check syntax`**:语法错会被激活拒绝
2. **transport 解析**:已绑定 / 本地包(`$` 前缀,如 `$TMP`)无需 `--tr`;其余必填 `--tr` 或跳 `abap-cli-setup` 用 `transport` 解析脚本
3. **`--atomic`** 多文件必加:任一失败零写入
4. **`--dry-run`** 大改动前先看 plan
5. **`--json`**:解析信封,失败时看 `error.code`
## 错误恢复(本 skill 专属错误码)
| 错误 | 动作 |
|---|---|
| `OBJECT_NOT_FOUND` (exit 8) | `search <name>` 校对;`push` 不自动创建(创建走 `create`)。**也可能是类型码写错**(如 `--type SICF` 应为 `HTTP`)——未知类型会被静默降级成这个错 |
| `OBJECT_EXISTS` (exit 2) | 改用 `pull` + `push`;不要重复 `create` |
| `LOCK_FAILED` (exit 9) | `inspect <obj> --locks`([abap-cli-search])查持有者;SE03 手动释放 |
| `ACTIVATION_FAILED` (exit 7) | `data.errors` 含行号;修复后重推。HTTP 200 + `activationExecuted=false`(silent no-op)也报此码,看 `details.silentNoop` |
| `SYNTAX_ERROR` (exit 7) | `data.errors[]` 含 `{line, offset, severity, text}` |
| `NO_TRANSPORT` (exit 7) | 跳 `abap-cli-setup`:`transport list` / `transport create` → `--tr` 重试 |
| `DDIC_NOT_SUPPORTED` (exit 7) | 类型不在白名单(DOMA/DTEL/TABL/STRU 之外);看上方类型表 |
| `FILE_EXISTS` (exit 2) | `pull --overwrite` 或 `--skip-existing` |
| `TYPE_NOT_SUPPORTED` (exit 7) | 以上方类型表为准;未知类型的报错已列出全部 51 个注册类型。`create local` 只支持 CLAS/INTF/PROG/FUGR |
| `PUSH_FAILED` (exit 7) | `data.stage` 指示失败环节(lock/write/activate/unlock) |
| `READONLY_METADATA` (exit 7) | 推的是源码对象的元数据 `.json`;改推 `.abap` / `.acds` 源码文件(`validate:aff` 只校验元数据) |
| `HTTP_CREATE_FAILED` (exit 6) | HTTP 服务(SICF 节点)写失败;看 `error.details`,校对 handlerClass / servicePath / 父节点是否存在 |
| `OBJECT_NOT_ACTIVE` (exit 6) | `inspect --activation`([abap-cli-search])诊断 → `activate --yes` 修复 |
| `INVALID_ARGUMENT` (exit 2) | 看 `error.nextSteps` / `error.references` |
## push 失败环节(`data.stage`)
| stage | 含义 | 典型错误 |
|---|---|---|
| `lock` | 获取编辑锁 | `LOCK_FAILED` |
| `write` | 写源码 | `SAP_ERROR` |
| `check` | 语法检查 | `SYNTAX_ERROR` |
| `activate` | 激活 | `ACTIVATION_FAILED` |
| `unlock` | 释放锁 | `UNLOCK_WARNING`(仅 `meta.warnings`,不阻断) |
| `ddic-icf` | 所有 ICF/通道 JSON 推送的统一进入 stage(DDIC / HTTP / TRAN / TTYP / MSAG / DDLS;`--dry-run` 的 `plan` 也含它) | 视类型而定(DDIC: `INVALID_FIELD` / `VALIDATION_ERROR`;HTTP: `HTTP_CREATE_FAILED`;TRAN: `TRAN_CREATE_FAILED`;TTYP/MSAG: `LOCK_FAILED` 等透传) |
| `textpool-adt` / `textpool-icf` | textpool 写(混合模式) | 视 mode 而定 |
| `channel-adt` / `channel-icf` | TTYP/MSAG/DDLS 通道检测 | `CHANNEL_DETECTION_FAILED` / `DDLS_NOT_SUPPORTED_ON_ECC` |
| `read` | textpool 读(混合模式 pre-stage) | 通常不报错 |
> ⚠️ **textpool 写受 SAP release 限制**:只有 ADT text-elements 写端点可用的系统才能写文本元素;`adtTextpool.write: false` 的系统(vhcala4hci / A4H 实测)走 ICF POST,无条件报 `TEXTPOOL_WRITE_UNSUPPORTED`。textpool **读**始终可用;写不可用时选择屏幕标签改用 `SELECTION-SCREEN COMMENT <pos>(<len>) lbl_xxx` + `INITIALIZATION` 赋值。详见 [references/workflow.md 变体 8](./references/workflow.md)。
## 注入安全(DDIC)
1. **DDIC JSON 结构校验**:客户端走 `validateDdicObject`;命名空间 `Z`/`Y` 开头
2. **字段名白名单**:DDIC 字段先对照 `DD03L` 校验并大写归一化(复用 [abap-cli-search] 的同款校验)
3. **值绑定**:值经解析后声明为 ABAP 变量,**值永远不进 SQL / 写入文本**
## 通用规则
1. **永远 `--json`**:`status` / `error.code` 分支
2. **`check syntax` 默认对 SAP**:无副作用,可反复跑
3. **`--atomic` 防雪崩**:多文件必加
4. **`push` 报 activated 还要 `inspect --activation`([abap-cli-search])复核**:method / OSI 层级是真机经验
5. **跨 skill**:`transport` 切到 `abap-cli-setup`;`search / inspect / diff / status` 切到 `abap-cli-search`
## references(按需加载)
- [references/commands-quick.md](./references/commands-quick.md) — 10 命令完整速查(含 `create local` 子命令)
- [references/errors.md](./references/errors.md) — 本 skill 错误码全表
- [references/workflow.md](./references/workflow.md) — DDIC / FUGR / textpool / stale 激活详细变体
Pliki w paczce (28)
- SKILL.md 21 KB
- assets/.abapignore.template 1 KB
- assets/tabl-templates/README.md 3 KB
- assets/tabl-templates/schemas/README.md 4 KB
- assets/tabl-templates/schemas/tabl-v1.json 2 KB
- assets/tabl-templates/schemas/tabt-v1.json 6 KB
- assets/tabl-templates/structure-basic/README.md 2 KB
- assets/tabl-templates/structure-basic/zsample.stru.ddic 1 KB
- assets/tabl-templates/structure-basic/zsample.stru.json 1 KB
- assets/tabl-templates/transparent-currency-amount/README.md 2 KB
- assets/tabl-templates/transparent-currency-amount/zsample.tabl.ddic 1 KB
- assets/tabl-templates/transparent-currency-amount/zsample.tabl.json 1 KB
- assets/tabl-templates/transparent-currency-amount/zsample.tabl.settings.json 1 KB
- assets/tabl-templates/transparent-key/README.md 2 KB
- assets/tabl-templates/transparent-key/zsample.tabl.ddic 1 KB
- assets/tabl-templates/transparent-key/zsample.tabl.json 1 KB
- assets/tabl-templates/transparent-key/zsample.tabl.settings.json 1 KB
- assets/tabl-templates/transparent-quantity-unit/README.md 2 KB
- assets/tabl-templates/transparent-quantity-unit/zsample.tabl.ddic 1 KB
- assets/tabl-templates/transparent-quantity-unit/zsample.tabl.json 1 KB
- assets/tabl-templates/transparent-quantity-unit/zsample.tabl.settings.json 1 KB
- assets/tabl-templates/transparent-with-include/README.md 2 KB
- assets/tabl-templates/transparent-with-include/zsample.tabl.ddic 1 KB
- assets/tabl-templates/transparent-with-include/zsample.tabl.json 1 KB
- assets/tabl-templates/transparent-with-include/zsample.tabl.settings.json 1 KB
- references/commands-quick.md 9 KB
- references/errors.md 4 KB
- references/workflow.md 13 KB
Wersje
| Repozytorium | Wynik | Licencja |
|---|---|---|
| Ta strona · chunrichi/abap-cli | 100 | MIT |
| chunrichi/abap_cli_demo | 100 | MIT |
Migawka bazy z 13.11.2026 · wersja paczki dba1d393ec96 (skrót SHA-256 całej paczki)
Pobrania w ostatnich 30 dniach: 0 · ranking
Zgłoś problem z tym skillem: szkodliwa treść, błędny opis albo prośba autora o usunięcie.
Podobne skille
- 89sap-se11
Tworzy, aktualizuje, aktywuje i usuwa obiekty słownika ABAP w SE11 przez SAP GUI Scripting, na podstawie plików definicji. - 89sap-se24
Wdraża klasy i interfejsy ABAP w SE24 przez SAP GUI: sprawdza istnienie, wgrywa kod, zapisuje, aktywuje i naprawia błędy składni. - 100abap-cli-data
Odczytuje dane SAP z abap-cli: zapytania do tabel, listę pól, uruchamianie klas, raportów i testów jednostkowych ABAP. - 100abap-cli-setup
Konfiguruje połączenie abap-cli z SAP: profil, diagnozę środowiska, transporty, usługi ICF i sesje. - 100sap-adt-cli
Czyta i zapisuje żywy kod ABAP, metadane DDIC i zlecenia transportowe przez CLI sap-adt: wyszukiwanie, testy i zrzuty błędów. Przydaje się, gdy trzeba zbadać błąd ABAP lub OData. - 100abap-cli-setup
Konfiguruje abap-cli: profil i obszar roboczy, diagnozę środowiska, transporty oraz usługi ICF po stronie SAP.