Skip to content
Development
Skill

/sap-sm30

Maintains standard customizing views/tables via SM30 — the functional consultant's core write the suite couldn't do (/sap-update-addon covers only Y/Z tables and refuses table-control layouts). show resolves the maintenance object over RFC (TVDIR dialog registration incl.

From plugin
sap-dev
8123 skills3 agents
Install
$ npx -y skills add sapdev-ai/sap-dev --skill sap-sm30 --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-sm30

Context preview

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

Maintains standard customizing views/tables via SM30 — the functional consultant's core write the suite couldn't do (/sap-update-addon covers only Y/Z tables and refuses table-control layouts). show resolves the maintenance object over RFC (TVDIR dialog registration incl.

SKILL.md

sap-sm30.SKILL.md
name: sap-sm30
description: |
  Maintains standard customizing views/tables via SM30 — the functional consultant's core write
  the suite couldn't do (/sap-update-addon covers only Y/Z tables and refuses table-control
  layouts). show resolves the maintenance object over RFC (TVDIR dialog registration incl.
  one-step vs two-step type + generated function group, DD25L view class, DD26S base tables ->
  primary, DD27S view-field -> base-field + key flags, TDDAT auth group, T000 client
  modifiability) and pre-reads the current rows, so you see the DDIC shape + data before any
  write. add (New Entries) and update (Position+edit) drive SM30's own generated maintenance
  dialog through a generic GuiTableControl driver (columns mapped by the DD27S field names in the
  cell IDs, not hardcoded — the per-view screens are generated), behind a confirm-gated preview
  diff, with the Customizing TR resolved via /sap-transport-request --type customizing, and
  verified by an authoritative RFC re-read (a write that the re-read doesn't confirm is
  SM30_VERIFY_MISMATCH). v1 = one-step views only (two-step refused loud); delete is never offered.
  RFC reads are direct (no wrapper, no dev-init); the only write channel is SM30's sanctioned
  dialog (no SQL on standard tables). Single code path ECC6 + S/4 (SAPMSVMA on both). Prerequisites:
  pinned /sap-login RFC profile; a live GUI session for add/update; NCo 3.1 (32-bit).
argument-hint: "show <VIEW|TABLE> [--where \"F=V,...\"] | add <VIEW> --data rows.tsv | update <VIEW> (--data rows.tsv | --key K=V --set F=V)"

SAP SM30 View Maintenance Skill

You maintain a standard customizing view: `show` resolves + pre-reads (read-only); `add`/`update` drive SM30's generated dialog behind a preview diff + confirm gate + Customizing TR, verified by an RFC re-read. v1 is one-step views only; delete is refused.

Task: $ARGUMENTS

---

Shared Resources

| File | Token / call | Purpose | |---|---|---| | `<SKILL_DIR>/references/sap_sm30_read.ps1` | `-Action resolve\|preread` | RFC resolve + pre-read + verify | | `<SKILL_DIR>/references/sap_sm30_maintain.vbs` | GUI (`%%SESSION_PATH%%`·`%%ATTACH_LIB_VBS%%`·`%%SESSION_LOCK_VBS%%`·`%%PARAMS_FILE%%`·`%%OUTPUT_FILE%%`) | Generic table-control driver (add / update) — recorded + live-verified on S4D (S/4HANA 1909) 2026-07-12 | | `<SAP_DEV_CORE_SHARED_DIR>/scripts/sap_rfc_lib.ps1` · `sap_attach_lib.vbs` · `sap_session_lock.vbs` | libs | RFC + Tier-3 attach + write lock | | `<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 confirm gate on add/update | | `/sap-transport-request` (`--type customizing`) · `/sap-doctor` · `/sap-se16n` | sub-skills | Customizing TR / srv+auth preflight / wide-view export |

---

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_sm30_run.json`). Pinned RFC profile; GUI session for add/update.

Step 1 — Parse & Dispatch

`show` (read) | `add` | `update` (write). `delete` -> refuse `SM30_DELETE_UNSUPPORTED` (pointer to manual SM30). Validate the `--data` TSV header against the DD27S field list early.

Step 2 — Resolve (always)

... sap_sm30_read.ps1 -Action resolve -Object <V> -OutDir "{RUN_TEMP}\sm30"

`SM30INFO:` lines (kind / maint_type / function_group / primary_table / fields / keys / auth_group / client_category) + `SM30: VERDICT`. Refuse loud on: no TVDIR entry (`SM30_NO_MAINT_DIALOG`), `maint_type=2` (`SM30_TWO_STEP_UNSUPPORTED`, v1), client not modifiable (`SM30_CLIENT_NOT_MODIFIABLE` from T000). `show` -> also `preread` (below) then STOP.

Step 3 — Pre-read + preview diff (add/update)

`sap_sm30_read.ps1 -Action preread` snapshots the current rows (projected to the view's base fields, `--where`-filtered). Build the change set from the `--data` TSV / `--set`; render the preview diff (ADD n / CHANGE m, old->new per field). Reject an add whose key exists or an update whose key is absent — no silent upsert.

Step 4 — CONFIRM gate + TR

**Rule 0 first** (`safety_policy.md`; write modes only — `show` skips it): `powershell -NoProfile -ExecutionPolicy Bypass -File "<SAP_DEV_CORE_SHARED_DIR>\scripts\sap_safety_gate.ps1" -Action assert -Skill sap-sm30` — `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 drive SM30 manually instead. The skill-level confirm below still applies after an ALLOW/ALLOW_CONFIRMED (Rule 0 adds to, never replaces, the owning skill's gate).

**CONFIRM** (yes/no on dev/QA; typed `MAINTAIN <VIEW> ON <SID>/<CLIENT>` when T000 marks the client production-grade). On no -> `SKIPPED`. Resolve the Customizing TR via `/sap-transport-request --type customizing` (never prompt, never a Workbench TR; a blank TR at the KO008 popup aborts).

Step 5 — Drive SM30 + verify

The generic table-control driver `sap_sm30_maintain.vbs` is **recorded + live-verified on S4D (S/4HANA 1909) 2026-07-12** (no longer `NEEDS_RECORDING`). Its per-run parameters ride a `PARAMS_FILE` (KEY=VALUE: `VIEW` / `MODE=add|update` / `DATA_FILE` / `TRKORR`), so the run-time VBS carries only the Tier-3 + IO tokens. `DATA_FILE` = the TSV whose header row = DD27S FIELDNAMEs (**key fields first**, in key order) and each later row = one entry; MANDT/CLIENT are auto and skipped. Substitute the attach + lock + IO tok

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.