sap-activate-object
Activates an inactive SAP repository object via SAP GUI Scripting. Routes to the correct transaction by object type: SE38 for…
SE63 short-text translation, automated end to end with a mandatory review gate. harvest expands a scope (TR/package/object) and collects every translatable short text — message-class texts (T100), DDIC labels (DD04T data-element DDTEXT/REPTEXT/SCRTEXT_S/M/L, DD02T table, DD03T
Claude Code
$ npx -y skills add sapdev-ai/sap-dev --skill sap-translate --agent claude-code
Codex
$ npx skills add sapdev-ai/sap-dev --skill sap-translate -a codex -y
Cursor
$ npx skills add sapdev-ai/sap-dev --skill sap-translate -a cursor -y
Gemini CLI
$ npx skills add sapdev-ai/sap-dev --skill sap-translate -a gemini-cli -y
GitHub Copilot
$ npx skills add sapdev-ai/sap-dev --skill sap-translate -a github-copilot -y
OpenCode
$ npx skills add sapdev-ai/sap-dev --skill sap-translate -a opencode -y
Windsurf
$ npx skills add sapdev-ai/sap-dev --skill sap-translate -a windsurf -y
name: sap-translate description: | SE63 short-text translation, automated end to end with a mandatory review gate. harvest expands a scope (TR/package/object) and collects every translatable short text — message-class texts (T100), DDIC labels (DD04T data-element DDTEXT/REPTEXT/SCRTEXT_S/M/L, DD02T table, DD03T direct-type field, DD01T domain, DD07T fixed-value) in the from- and to-language — into a review TSV carrying the HARD per-unit length limit (SE63 silently truncates overlong entries) and the current target text, then STOPS so Claude can propose length-checked translations for a human to review. apply loads the reviewed TSV, re-validates every length (hard refusal on overflow), diffs vs the live target, and writes back behind a confirm gate via the SE63 engine FMs (LXE_OBJ_TEXT_PAIR_READ/WRITE, through Z_GENERIC_RFC_WRAPPER_TBL since they are FMODE-blank), with a recorded SE63 GUI flow as the per-type fallback, verified by an authoritative RFC re-read per row. A row whose target equals the object's original language is refused and routed to the owning workbench skill (translation != original-language edit). Pure RFC + wrapper (no new Z object; the wrapper is dev-init's); single code path ECC6 + S/4 (all FMs/tables identical) — SE63 GUI layout is the only release-variant surface. Prerequisites: /sap-dev-init wrapper; pinned /sap-login RFC profile; NCo 3.1 (32-bit). argument-hint: "harvest <MSGCLASS Z.. | DTEL Z.. | TABLE Z.. | DOMAIN Z..> --to <LANG> [--from <LANG>] | apply <review.tsv> [--overwrite]"
You turn the end-of-delivery SE63 grind into: harvest every translatable short text -> propose length-checked translations -> human reviews the TSV -> apply writes them back, verified. harvest is read-only and never chains into apply; apply is confirm-gated and length-enforced.
Task: $ARGUMENTS
---
| File | Token / call | Purpose | |---|---|---| | `<SAP_DEV_CORE_SHARED_DIR>/rules/safety_policy.md` + `<SAP_DEV_CORE_SHARED_DIR>/scripts/sap_safety_gate.ps1` | Rule 0 | Environment guard — Step 4 runs `-Action assert` before the write | | `<SKILL_DIR>/references/sap_translate_harvest.ps1` | `-Object -Type -To` | Harvest translatable texts -> review TSV | | `<SKILL_DIR>/references/translate_length_limits.tsv` | read by harvest | Hard per-unit length limits (DDIC-cross-checked live) | | `<SAP_DEV_CORE_SHARED_DIR>/scripts/sap_object_resolver.ps1` | dot-source / CLI | TR/package scope expansion (`-Expand`) | | `<SAP_DEV_CORE_SHARED_DIR>/scripts/sap_rfc_lib.ps1` · `sap_connection_lib.ps1` | dot-source | RFC connect | | `/sap-se91` · `/sap-se38` · `/sap-se11` · `/sap-transport-request` | sub-skills | Original-language edits (routed) / TR if an SE63 flow records one |
---
Resolve `work_dir` + `{RUN_TEMP}` (canonical one-liner — `sap_connection_lib.ps1` is dot-sourced there — with `Write-Output ('RUN_TEMP=' + (Get-SapRunTemp))` appended). `{RUN_TEMP}` = the per-run scratch dir holding the log state file; mint it once here and reuse (re-minting breaks the `-Action end` state-file lookup). Start logging (`sap_log_helper.ps1`, state `{RUN_TEMP}\sap_translate_run.json`). Pinned RFC profile via `/sap-login`; wrapper FM from `/sap-dev-init` (apply only).
`harvest` (read) | `apply` (write). `--to` (target LANG) required for harvest; `--from` defaults to the object's original language (resolver MASTERLANG) or `E`. `--types` default = all v1 types.
... sap_translate_harvest.ps1 -Object <n> -Type msgclass|dtel|table|domain -From E -To <LANG> -OutDir "{RUN_TEMP}\tr"For a TR/PACKAGE scope, first expand via `sap_object_resolver.ps1 -Expand` and harvest each object. `TR:` lines + `translate_review.tsv` (seq / obj / unit_type / unit_key / src / current_tgt / max_len / status NEW|EXISTS). Empty scope -> `TRANSLATE_EMPTY_SCOPE`.
For every NEW row (and EXISTS rows if the operator wants a re-translation), **you** fill `proposed_text` under `max_len` (shorten-retry; unfittable -> mark `TOO_LONG`, excluded from apply). Write the reviewed TSV. **STOP** — the review gate is mandatory; harvest NEVER auto-applies. Tell the operator to review/edit the TSV then run `apply`.
**Rule 0 first** (`safety_policy.md`; `apply` only — `harvest` skips it): `powershell -NoProfile -ExecutionPolicy Bypass -File "<SAP_DEV_CORE_SHARED_DIR>\scripts\sap_safety_gate.ps1" -Action assert -Skill sap-translate` — `SAFETY: ALLOW` (0) proceed; `TYPED_CONFIRM_REQUIRED` (3) -> the operator types the shown `PROD <SID>/<CLIENT>` token, re-run with `-ConfirmationText '<their verbatim answer>'`, proceed only on `ALLOW_CONFIRMED`; `REFUSED class=<C>` (1) / `ERROR` (2) -> **STOP**, end `FAILED` with `-ErrorClass <C>`, relay the remediation lines — never bypass or work around it manually. The Step 4 confirm below still applies after ALLOW/ALLOW_CONFIRMED.
1. Load the reviewed TSV; re-validate EVERY length (any overflow -> `TRANSLATE_LENGTH_OVERFLOW`, listed, never written); diff vs live target (rows overwriting an existing translation need `--overwrite` else SKIP); a row whose target == the object's original language -> refuse + route to `/sap-se91` (msg) / `/sap-se38` (sel) / `/sap-se11` (DDIC). 2. **CONFIRM gate:** "I will WRITE `<n>` translations (`<counts by type>`) into language `<TL>` on `<SID>/<CLIENT>`, overwriting `<k>` existing texts. Proceed? (yes/no)". On no -> `SKIPPED`. 3. Write per type via the SE63 engine FMs `LXE_OBJ_TEXT_PAIR_READ` -> mutate -> `LXE_OBJ_TEXT_PAIR_WRITE` through `Z_GENERIC_RFC_WRAPPER_TBL` (FMODE-blank -> the asXML wrapper bridge). On wrapper failure or `sap_dev_mode=GUI`, degrade to a recorded SE63 GUI flow — not yet captured (no VBS ships): emit `NEEDS_RECORDING` and record it once per text type via `/sap-gui-probe --record`. 4. **Verify
SAP development automation skills for AI coding assistants. Windows-only — the skills drive SAP GUI for Windows via GUI Scripting (plus optional RFC via SAP NCo); there is no macOS/Linux path.
Activates an inactive SAP repository object via SAP GUI Scripting. Routes to the correct transaction by object type: SE38 for…
Natural-language SAP API discovery over RFC (no GUI): turn a goal like "create a sales order" or "post a goods movement" into a…
Runs the SAP ABAP Test Cockpit (ATC) end-to-end as a quality gate: builds an SCI Object Set scoped to the target object(s),…
Executes BDC (Batch Data Communication) sessions in SAP via RFC. Reads SHDB recording files from the bdc/ folder, connects via…
Changes the package (TADIR-DEVCLASS) assignment of an SAP repository object via the "Object Directory Entry" dialog (Goto >…
Validates ABAP source (report / program / FM / class / include) before deployment — one skill, dimension-dispatched: naming…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.