Skip to content
Development
Skill

/sap-transport-copies

Builds and verifies Transports of Copies (ToC) headlessly over RFC — for teams that test in QA before releasing dev TRs. Creates a type-T request targeted at QA, copies every source TR's (and its tasks') object list into it, and makes the E071 union check — ToC contents == union

From plugin
sap-dev
8123 skills3 agents
Install
$ npx -y skills add sapdev-ai/sap-dev --skill sap-transport-copies --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/sap-transport-copies

Context preview

The summary Claude sees to decide when to auto-load this skill.

Builds and verifies Transports of Copies (ToC) headlessly over RFC — for teams that test in QA before releasing dev TRs. Creates a type-T request targeted at QA, copies every source TR's (and its tasks') object list into it, and makes the E071 union check — ToC contents == union

SKILL.md

sap-transport-copies.SKILL.md
name: sap-transport-copies
description: |
  Builds and verifies Transports of Copies (ToC) headlessly over RFC — for teams that test in
  QA before releasing dev TRs. Creates a type-T request targeted at QA, copies every source TR's
  (and its tasks') object list into it, and makes the E071 union check — ToC contents == union of
  the sources — a HARD GATE before release, which a human in SE01 practically never does. Optional
  `--release` (gated) and `--import` (delegates /sap-stms). Also `verify` (standalone union check),
  `list` (my modifiable ToCs), and `cleanup` (stale ToCs → delegated /sap-se01 delete). Pure RFC:
  reads via RFC_READ_TABLE (E070/E071/E07T), writes via the CTS FMs TR_INSERT_REQUEST_WITH_TASKS /
  TR_COPY_COMM / TR_RELEASE_REQUEST through the dev-init wrapper Z_GENERIC_RFC_WRAPPER_TBL — no GUI,
  no golden-screen recording, one code path on ECC 6 + S/4HANA. Releasing a ToC never closes the
  source TRs, so the risk profile is low. Prerequisites: pinned RFC profile via /sap-login; the
  dev-init wrapper (via /sap-dev-init — never deployed here); SAP NCo 3.1 (32-bit).
argument-hint: "<TR1[,TR2,...]> | --current [--target <SID>] [--desc \"...\"] [--release] [--import] | verify <TOC> --sources <TRs> | list [--user U] | cleanup"

SAP Transport of Copies Skill

You assemble a Transport of Copies from one or more source TRs and **prove the E071 union is complete before release** — never releasing a ToC whose object list doesn't cover its sources.

Task: $ARGUMENTS

---

Shared Resources

| 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 — Steps 3/4 runs `-Action assert` before the write | | `<SKILL_DIR>/references/sap_transport_copies_rfc.ps1` | `-Action create\|include\|verify\|list\|release` | ToC build + E071 union + release (RFC + wrapper) | | `<SAP_DEV_CORE_SHARED_DIR>/scripts/sap_rfc_lib.ps1` | dot-sourced | NCo 3.1 connect/disconnect | | `<SAP_DEV_CORE_SHARED_DIR>/scripts/sap_object_resolver.ps1` | dot-sourced | `Read-SapTableRows` (E070/E071/E07T) | | `<SAP_DEV_CORE_SHARED_DIR>/scripts/sap_artifact_lib.ps1` | dot-sourced | ToC manifest + union-diff registration | | `/sap-login` · `/sap-dev-init` | sub-skills | Pinned profile · deploys the wrapper (this skill never does) | | `/sap-se01` · `/sap-stms` | sub-skills | `cleanup` delete · `--import` (their own gates) |

`--current` resolves the session dev-default TR. `--target` falls back to userConfig `toc_default_target`; blank + no default = hard ERROR (never guess a target).

---

Step 0 — Directories + Logging

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_transport_copies_run.json`). Pure RFC — no GUI session.

Step 1 — Parse & Dispatch

First token = a TR list or `--current` → **build**; else `verify` | `list` | `cleanup`. Resolve `--target` (arg → `toc_default_target` → hard ERROR). Render the description (`toc_desc_template`, placeholders `{SOURCES}/{TARGET}/{YYYYMMDD}/{USER}`, 60-char truncate).

Step 2 — RFC Profile + Sources

Pinned RFC profile required (`/sap-login`) — missing → `RFC_LOGON_FAILED`, STOP. Pre-check each source over RFC (E070 exists, type K/W, same system); enumerate tasks via `STRKORR`. Any miss → hard ERROR naming the bad TR. Echo the build plan (sources, task counts, target, desc).

Step 3 — Build (create → include → verify)

**Rule 0 first** (`safety_policy.md`; build writes: it creates a type-T request and copies object lists into it): `powershell -NoProfile -ExecutionPolicy Bypass -File "<SAP_DEV_CORE_SHARED_DIR>\scripts\sap_safety_gate.ps1" -Action assert -Skill sap-transport-copies` — `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.

# create the type-T request
... sap_transport_copies_rfc.ps1 -Action create -Text "<desc>" -Target "<SID>" -SharedDir "..."   # -> TOC:create toc=<TOC>
# copy each source's (and its tasks') object list in
... -Action include -Toc <TOC> -Sources "<TR1,TR2>"
# HARD GATE: E071 union == union of sources+tasks
... -Action verify -Toc <TOC> -Sources "<TR1,TR2>" -OutTsv "<dir>\toc_union_diff.tsv"

`create` uses `TR_INSERT_REQUEST_WITH_TASKS` (IV_TYPE='T') via the wrapper, parses the new TRKORR from `ES_REQUEST_HEADER`, and re-reads E070 (`TRFUNCTION='T'`) to confirm — else `TOC_CREATE_FAILED`. `include` copies each source via `TR_COPY_COMM` (whole object list, scalar TRKORR→TRKORR) — run it ONCE into a fresh ToC (TR_COPY_COMM appends, so re-including duplicates E071 rows). `verify` set-diffs `(PGMID,OBJECT,OBJ_NAME)`: `MISSING>0` → report every missing object + `TOC_UNION_MISMATCH` and STOP before release.

Step 4 — Release (`--release` only, gated)

**Rule 0 first** (`safety_policy.md`; `--release` only): `powershell -NoProfile -ExecutionPolicy Bypass -File "<SAP_DEV_CORE_SHARED_DIR>\scripts\sap_safety_gate.ps1" -Action assert -Skill sap-transport-copies` — `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 release confirm

Read more
Ships withsap-dev

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.

Get the whole plugin

Other skills on sap-dev.