sap-activate-object
Activates an inactive SAP repository object via SAP GUI Scripting. Routes to the correct transaction by object type: SE38 for reports/programs/function- group…
Reaches non-RFC-callable ABAP code from outside the system (e.g. SAP NCo 3.1), in two modes: `fm` CALLS a non-RFC-enabled function module via the generic wrapper Z_GENERIC_RFC_WRAPPER_TBL (reads the FM interface, builds asXML, invokes it over RFC, returns the deserialized
$ npx -y skills add sapdev-ai/sap-dev --skill sap-rfc-wrapper --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/sap-rfc-wrapperContext preview
The summary Claude sees to decide when to auto-load this skill.
Reaches non-RFC-callable ABAP code from outside the system (e.g. SAP NCo 3.1), in two modes: `fm` CALLS a non-RFC-enabled function module via the generic wrapper Z_GENERIC_RFC_WRAPPER_TBL (reads the FM interface, builds asXML, invokes it over RFC, returns the deserialized
name: sap-rfc-wrapper description: | Reaches non-RFC-callable ABAP code from outside the system (e.g. SAP NCo 3.1), in two modes: `fm` CALLS a non-RFC-enabled function module via the generic wrapper Z_GENERIC_RFC_WRAPPER_TBL (reads the FM interface, builds asXML, invokes it over RFC, returns the deserialized outputs); `class` GENERATES + deploys a dedicated RFC wrapper FM for a non-RFC-callable class method (reads the method interface, emits Z_CLSWRP_<CLASS>_<METHOD>, deploys via /sap-se37). The modes compose: `class` builds a wrapper FM, `fm` then calls any FM. Replaces the former /sap-rfc-wrapper-fm and /sap-rfc-wrapper-class. Prerequisites: SAP profile via /sap-login (RFC password); SAP NCo 3.1 (32-bit) in GAC. `fm` needs Z_GENERIC_RFC_WRAPPER_TBL (deploy via /sap-dev-init); `class` needs an active SAP GUI session for the /sap-se37 deploy. argument-hint: "<mode> ... fm <function-module> [param=value ...] | class <class-name> <method-name> [function-group] [package] [transport]"
You reach non-RFC-callable ABAP code from outside the system, in two modes:
`Z_GENERIC_RFC_WRAPPER_TBL`, which executes the target FM dynamically and serializes all parameters as asXML.
calls an ABAP class method, so a non-RFC-callable method becomes RFC-invocable.
Task: $ARGUMENTS
---
| File | Token | Purpose | |---|---|---| | `<SAP_DEV_CORE_SHARED_DIR>/rules/safety_policy.md` | *(rule)* | **Rule 0 (highest priority)** — environment guard; enforced by Step 0.6 via `sap_safety_gate.ps1` | | `<SAP_DEV_CORE_SHARED_DIR>/rules/skill_operating_rules.md` | *(rule)* | Mandatory operating rules | | `<SAP_DEV_CORE_SHARED_DIR>/rules/tr_resolution.md` | *(rule)* | TR resolution flow — `class` mode deploys the generated wrapper via `/sap-se37`, which delegates to `/sap-transport-request` | | `<SAP_DEV_CORE_SHARED_DIR>/rules/language_independence_rules.md` | *(rule)* | GUI-scripting language independence — applies to the GUI-driven `/sap-se37` deploy step (`class` mode) | | `<SAP_DEV_CORE_SHARED_DIR>/rules/abap_code_quality_rules.md` | *(rule)* | ABAP code-quality rules — the wrapper FM signature interpretation (`fm`) and the generated RFC wrapper source (`class`) must honor modern syntax, type safety, and quality conventions | | `<SKILL_DIR>/references/sap_rfc_read_fm_params.ps1` | — | (`fm`) Reads FM interface via RPY_FUNCTIONMODULE_READ_NEW | | `<SKILL_DIR>/references/sap_rfc_wrapper_fm.ps1` | — | (`fm`) Calls Z_GENERIC_RFC_WRAPPER_TBL with a params file | | `<SKILL_DIR>/references/sap_rfc_read_class_method.ps1` | — | (`class`) Reads class-method interface from the OO repository tables | | `<SKILL_DIR>/references/Z_GENERIC_RFC_WRAPPER_TBL.abap` + `*.def` | — | The generic wrapper FM source + DDIC type defs (deployed by `/sap-dev-init`) |
---
**Resolve `work_dir` via the env-aware helper** — do NOT take `work_dir` from a direct `settings.json` read (that ignores the `SAPDEV_AI_WORK_DIR` env var and `userconfig.json`). Use the `WORK_DIR=` value printed by:
powershell -NoProfile -ExecutionPolicy Bypass -Command ". '<SAP_DEV_CORE_SHARED_DIR>\scripts\sap_settings_lib.ps1'; . '<SAP_DEV_CORE_SHARED_DIR>\scripts\sap_connection_lib.ps1'; Write-Output ('WORK_DIR=' + (Get-SapWorkDir))"The settings note below still applies to the OTHER keys.
**Settings reads/writes follow `<SAP_DEV_CORE_SHARED_DIR>/rules/settings_lookup.md`** — merge per-key on the `.value` field (env var → `settings.local.json` → `userconfig.json` → `settings.json`); non-per-connection writes go to `userconfig.json`. Resolve sap-dev-core paths: 2 levels up from `<SKILL_DIR>` to the plugin root, then `settings.json` and (if present) `settings.local.json`.
| Setting | Default if blank | |---|---| | `work_dir` | `C:\sap_dev_work` | | `sap_dev_function_group` | `ZZSAPDEVFMGAI` *(class mode)* | | `sap_dev_package` | *(blank = local $TMP)* *(class mode)* | | `sap_dev_transport_request` | *(blank = local $TMP)* *(class mode)* |
Set `{WORK_TEMP}` = `{work_dir}\temp`
cmd /c if not exist "{WORK_TEMP}" mkdir "{WORK_TEMP}"Set `{RUN_TEMP}` = the per-run scratch dir (`Get-SapRunTemp` mints + creates `{work_dir}\temp\run_<id>`):
powershell -NoProfile -ExecutionPolicy Bypass -Command ". '<SAP_DEV_CORE_SHARED_DIR>\scripts\sap_connection_lib.ps1'; Write-Output ('RUN_TEMP=' + (Get-SapRunTemp))"Per the CLAUDE.md "Two-bucket temp model" write this skill's generated scratch (`*_run.ps1` and the `_run.json` state) under `{RUN_TEMP}`; keep `{WORK_TEMP}` (base) only for `Get-SapCurrentSessionPath -WorkTemp` and the generated `.abap` (class mode).
---
Start a structured log run. State file: `{RUN_TEMP}\sap_rfc_wrapper_run.json`. Best-effort.
powershell -ExecutionPolicy Bypass -File "<SAP_DEV_CORE_SHARED_DIR>\scripts\sap_log_helper.ps1" -Action start -StateFile "{RUN_TEMP}\sap_rfc_wrapper_run.json" -Skill sap-rfc-wrapper -ParamsJson "{\"mode\":\"<MODE>\"}"---
Both modes can mutate the SAP system: `class` deploys a wrapper FM, and `fm` executes an arbitrary function module that cannot be proven read-only. Run the environment gate before any SAP-side step:
powershell -NoProfile -ExecutionPolicy Bypass -File "<SAP_DEV_CORE_SHARED_DIR>\scripts\sap_safety_gate.ps1" -Action assert -Skill sap-rfc-wrapper
| Verdict (last line) | Exit | Action | |---|---|---| | `SAFETY: ALLOW ...` | 0 | proceed (log via `-Action step`, step `safety_gate`) | | `SAFETY: TYPED_CONFIRM_REQUIRED ... expect="PROD <SID>/<CLIENT>"` | 3 | the operator must **type** the shown token; re-run assert with `-ConfirmationText '<their verbatim answer>'`; proceed only on `ALLOW_CONFIRM
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.
Repo: sapdev-ai/sap-dev
Activates an inactive SAP repository object via SAP GUI Scripting. Routes to the correct transaction by object type: SE38 for reports/programs/function- group…
Natural-language SAP API discovery over RFC (no GUI): turn a goal like "create a sales order" or "post a goods movement" into a ranked, trap-annotated,…
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), creates an ATC Run Series bound to…
Executes BDC (Batch Data Communication) sessions in SAP via RFC. Reads SHDB recording files from the bdc/ folder, connects via SAP NCo 3.1, calls…
Changes the package (TADIR-DEVCLASS) assignment of an SAP repository object via the "Object Directory Entry" dialog (Goto > Object Directory Entry). Routes by…
Validates ABAP source (report / program / FM / class / include) before deployment — one skill, dimension-dispatched: naming (variable conventions), type (DDIC…