Skip to content
Development
Skill

/sap-where-used-list

Runs SAP's Where-Used List (Verwendungsnachweis, Ctrl+Shift+F3) for any ABAP repository object across SE11, SE38, SE37, SE24, and SE91 — i.e. before deleting an object, find every program / class / FM / DDIC reference. Routes to the right initial screen by OBJECT_TYPE, fills the

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

Context preview

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

Runs SAP's Where-Used List (Verwendungsnachweis, Ctrl+Shift+F3) for any ABAP repository object across SE11, SE38, SE37, SE24, and SE91 — i.e. before deleting an object, find every program / class / FM / DDIC reference. Routes to the right initial screen by OBJECT_TYPE, fills the

SKILL.md

sap-where-used-list.SKILL.md
name: sap-where-used-list
description: |
  Runs SAP's Where-Used List (Verwendungsnachweis, Ctrl+Shift+F3) for any
  ABAP repository object across SE11, SE38, SE37, SE24, and SE91 — i.e.
  before deleting an object, find every program / class / FM / DDIC
  reference. Routes to the right initial screen by OBJECT_TYPE, fills
  the name, sends Ctrl+Shift+F3, ticks every scope on the popup, then
  branches: NOT_FOUND when SAP says no usages, FOUND_LIST when a list is
  rendered and the status bar is clean, SPOOL_CREATED:<num> when called
  with TO_SPOOL=X (so the operator can chain into /sap-sp02 to download
  the list), or INCONCLUSIVE when SAP answers with a message instead of
  a list — which is never reported as a usage verdict in either direction.
  Pure read-only — never modifies the SAP system.
  Prerequisites: Active SAP GUI session (use /sap-login first).
argument-hint: "<OBJECT_TYPE> <OBJECT_NAME> [--to-spool]"

SAP Where-Used List Skill

You run a Where-Used List against an ABAP repository object so the operator can see every reference before deleting / refactoring it. The skill is a thin GUI driver: it picks the right transaction by OBJECT_TYPE, fills the name field, sends `Ctrl+Shift+F3`, ticks "Select all" on the scope popup, and reports NOT_FOUND, FOUND_LIST, SPOOL_CREATED:<num>, or INCONCLUSIVE.

**A rendered screen is not evidence of usages.** Both verdicts this skill can get wrong are expensive: a false NOT_FOUND gets a referenced object deleted, a false FOUND_LIST tells a developer an object is still in use when it is not. So the reader only claims a usage list when the status bar is silent or `S`; every other MessageType is reported as INCONCLUSIVE with SAP's own message attached.

Task: $ARGUMENTS

---

Shared Resources

| File | Token | Purpose | |---|---|---| | `<SAP_DEV_CORE_SHARED_DIR>/rules/skill_operating_rules.md` | *(rule)* | Mandatory operating rules | | `<SAP_DEV_CORE_SHARED_DIR>/rules/language_independence_rules.md` | *(rule)* | GUI-scripting language independence — identify by component ID + DDIC field name, status-bar checks via `MessageType` codes (S/W/E/I/A), VKey instead of menu-text, no branching on `.Text`/`.Tooltip`/window titles | | `<SKILL_DIR>/references/sap_where_used_list.vbs` | many | Multi-txn router + scope popup + optional Print-to-spool branch |

---

Step 0 — Resolve Work Directory

**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 `shared/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`. | Setting | Default if blank | |---|---| | `work_dir` | `C:\sap_dev_work` |

Set `{WORK_TEMP}` = `{work_dir}\temp`. Ensure it exists:

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` / `*_run.vbs` and the `_run.json` state) under `{RUN_TEMP}`; keep `{WORK_TEMP}` (base) only for `Get-SapCurrentSessionPath -WorkTemp`.

---

Step 0.5 — Start Logging

powershell -ExecutionPolicy Bypass -File "<SAP_DEV_CORE_SHARED_DIR>\scripts\sap_log_helper.ps1" -Action start -StateFile "{RUN_TEMP}\sap_where_used_list_run.json" -Skill sap-where-used-list -ParamsJson "{\"object_type\":\"<TYPE>\",\"object_name\":\"<NAME>\"}"

Best-effort.

---

Step 1 — Parse Arguments

| Arg | Required | Notes | |---|---|---| | `OBJECT_TYPE` | yes | One of: `TABLE`, `VIEW`, `DATAELEMENT`, `STRUCTURE`, `TABLETYPE`, `TYPEGROUP`, `DOMAIN`, `SEARCHHELP`, `LOCKOBJECT` (→ SE11), `PROGRAM` (→ SE38), `FM` (→ SE37), `CLASS` / `INTERFACE` (→ SE24), `MESSAGE_CLASS` (→ SE91). | | `OBJECT_NAME` | yes | UPPERCASE repository name. | | `--to-spool` | no | Send the rendered list to a SAP spool so a follow-up `/sap-sp02` can download it. Default: leave the list on screen and just count usages. |

**Map OBJECT_TYPE → TXN.** This determines which initial screen the VBS opens and which name field it fills.

| OBJECT_TYPE | TXN | Name field | |---|---|---| | `TABLE` / `VIEW` / `DATAELEMENT` / `STRUCTURE` / `TABLETYPE` / `TYPEGROUP` / `DOMAIN` / `SEARCHHELP` / `LOCKOBJECT` | `SE11` | `ctxtRSRD1-<radio>_VAL` (radio + name field per type — same map as `/sap-se11` Step 6c) | | `PROGRAM` | `SE38` | `ctxtRS38M-PROGRAMM` | | `FM` | `SE37` | `ctxtRS38L-NAME` | | `CLASS` / `INTERFACE` | `SE24` | `ctxtSEOCLASS-CLSNAME` | | `MESSAGE_CLASS` | `SE91` | `ctxtRSDAG-ARBGB` |

**Trigger phrases:**

  • "where used `<NAME>`" / "where-used list of `<NAME>`"
  • "find references to `<NAME>`" / "who uses `<NAME>`"
  • "check usages of `<NAME>` before delete" / "is `<NAME>` safe to delete"
  • "save where-used to spool for `<NAME>`" → adds `--to-spool`

---

Step 2 — Ensure SAP GUI Session

Run `/sap-login` if no session is active.

---

Step 3 — Generate and Run the VBS

Map the operator's OBJECT_TYPE to the `TXN` token (see table above). For SE11 also set `OBJECT_TYPE` so the VBS picks the right radio. For all other transactions set `OBJECT_TYPE` empty.

Set `TO_SPOOL` to `X` if `--to-spool`, else leave empty.

Write `{RUN_TEMP}\sap_where_used_list_run.ps1`:

$skillDir = '<SKILL_DIR
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.