abap-code-review-helpe…
Primary correctness and runtime-safety review guidance for ABAP reports, classes, function modules, enhancements, BAPIs,…
Navigate and understand SAP Customizing (SPRO/IMG). Use when the user asks about customizing settings, SPRO activities, configuration tables, maintenance views, view clusters, or needs to read/understand any customizing data. This skill teaches how to systematically trace from
$ npx -y skills add marcellourbani/vscode_abap_remote_fs --skill sap-customizing --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/sap-customizingContext preview
The summary Claude sees to decide when to auto-load this skill.
Navigate and understand SAP Customizing (SPRO/IMG). Use when the user asks about customizing settings, SPRO activities, configuration tables, maintenance views, view clusters, or needs to read/understand any customizing data. This skill teaches how to systematically trace from
name: sap-customizing description: Navigate and understand SAP Customizing (SPRO/IMG). Use when the user asks about customizing settings, SPRO activities, configuration tables, maintenance views, view clusters, or needs to read/understand any customizing data. This skill teaches how to systematically trace from an SPRO activity to the actual tables where config data is stored, and how to find the SPRO menu path for any activity. Load this skill whenever customizing, SPRO, IMG, configuration, or settings maintenance is involved. argument-hint: '[customizing topic or SPRO activity to investigate]' user-invocable: true disable-model-invocation: false
**Your training data about SAP customizing is almost certainly wrong.** Do NOT guess which tables store which customizing data. Follow the lookup procedures below to discover the truth from the system itself.
**Always read table structures with `get_object_lines` before querying.** Never hardcode field names from memory.
**Text fields are case-sensitive.** Use aggressive wildcards: `%aterial%ype%` finds "Material Types", "material type", etc.
**Minimize SQL round-trips.** Use JOINs to combine lookups into single queries.
**Present only useful information to the user.** Internal IDs like activity IDs (`SIMG_CFMENUOLMSOMS2`), tree GUIDs (`368DDFAB...`), and node IDs are technical plumbing — never include them in your answer. Only show the user: SPRO menu path, table names, view/cluster names, transaction codes, and descriptions.
---
| Table | Purpose | Key Fields | |-------|---------|------------| | **CUS_IMGACH** | IMG activity header | `activity`, `c_activity` (links to CUS_ACTH), `tcode` | | **CUS_IMGACT** | IMG activity texts (language-dependent) | `spras`, `activity`, `text` |
| Table | Purpose | Key Fields | |-------|---------|------------| | **CUS_ACTH** | Activity header | `act_id`, `act_type`, `tcode` | | **CUS_ACTT** | Activity texts (language-dependent) | `spras`, `act_id`, `text` | | **CUS_ACTOBJ** | **Core** — links activities to maintenance objects | `act_id`, `objecttype`, `objectname`, `tcode` |
**CUS_ACTH.act_type:** `C` = customizing (most common), `E` = BAdI definition, `I` = BAdI implementation. Note: filtering by `act_type = 'E'` is unreliable — many BAdI activities use `act_type = 'C'`. To find BAdIs, search CUS_IMGACT text for `%BAdI%` or `%Business Add-In%`. This mainly works for IS solutions (IS-Retail, IS-Utilities, HR). Core modules (MM, FI, SD, PP) often do not register BAdIs in the IMG at all — for those, use SE18 directly with patterns like `MB_*`, `ME_*`, `MM_*`.
**CUS_ACTOBJ.objecttype** (domain OB_TYP):
| Value | Meaning | What `objectname` contains | |-------|---------|---------------------------| | `V` | **View** | Maintenance view name (e.g., `V_T001W`). Via SM30 or dedicated tcode | | `C` | **View Cluster** | Cluster name (e.g., `MTART`). Via SM34 or dedicated tcode | | `S` | **Table with Text Table** | Table name directly. Via SM30 | | `T` | **Individual Transaction** | Logical object (often `SNUM`). The `tcode` field has the transaction | | `L` | **Logical Transport Object** | Transport object type. The `tcode` field has the transaction | | `D` | **Dummy Object** | Usually `IMGDUMMY`. The `tcode` field has the transaction |
| Table | Purpose | Key Fields | |-------|---------|------------| | **VCLDIR** | Cluster directory | `vclname`, `exitprog` | | **VCLSTRUC** | Cluster structure — views inside a cluster | `vclname`, `object`, `objpos`, `dependency`, `startobj` |
**VCLSTRUC.dependency** (domain OBJDEP): `R` = root/header, `S` = dependent on one parent, `M` = dependent on multiple parents. **startobj** `X` = initial object shown.
| Table | Purpose | Key Fields | |-------|---------|------------| | **DD26S** | View base tables | `viewname`, `tabname`, `as4local` (use `A`), `tabpos` (1 = primary) |
ABAP FS cannot read view structures, but can read tables. Always resolve views to their base tables via DD26S, then use `get_object_lines` on the table.
| Table | Purpose | Key Fields | |-------|---------|------------| | **TSTC** | Tcode → program | `tcode`, `pgmna` | | **TSTCT** | Tcode descriptions | `sprsl`, `tcode`, `ttext` | | **TSTCP** | Tcode parameters | `tcode`, `param` |
**TSTCP.param** for SM30 wrappers: `/*SM30 VIEWNAME=<view>;UPDATE=X;` — extract `VIEWNAME` to find the maintained view.
The SPRO tree is stored across multiple linked sub-trees:
| Table | Purpose | Key Fields | |-------|---------|------------| | **TNODEIMG** | Tree nodes (folders + activity leaves) | `tree_id`, `node_id`, `parent_id`, `node_type`, `reftree_id` | | **TNODEIMGT** | Node texts — holds **folder/section names**, NOT activity names | `tree_id`, `node_id`, `spras`, `text` | | **TNODEIMGR** | Node references — links leaf nodes to IMG activities | `node_id`, `ext_key`, `ref_type`, `ref_object` |
**CRITICAL:** TNODEIMGR has **NO `tree_id` column** — it only has `node_id`, `ext_key`, `ref_type`, `ref_object`. Never try to JOIN it with TNODEIMG/TNODEIMGT on tree_id.
**CRITICAL:** TNODEIMGT contains **folder labels** ("Material Types", "Basic Settings"), NOT activity names ("Define Attributes of Material Types"). Activity names live in CUS_IMGACT. To find a leaf node for a known activity, use TNODEIMGR (see Procedure 3).
**node_type values:** `IMG0` = folder node, `IMG` = activity leaf (text in CUS_IMGACT, not TNODEIMGT), `REF` = reference to a sub-tree (follow `reftree_id`).
**TNODEIMGR.ref_type:** `COBJ` = customizing activity ID (matches CUS_ACTOBJ.act_id), `ACTI` = IMG activity ID (matches CUS_IMGACH.activity, prefixed with `SIMG`).
Main SPRO tree ID is `368DDFAB3AB96CCFE10000009B38F976` ("SAP Customizing Im
A VS Code extension that gives AI assistants real, live access to your SAP system — reads actual code, queries live tables, runs tests, debugs, and understands your custom objects. Ask "How does BAPI_USER_GET_DETAIL work?"
Primary correctness and runtime-safety review guidance for ABAP reports, classes, function modules, enhancements, BAPIs,…
Structured process for building ABAP solutions. Use BEFORE writing any ABAP code — reports, classes, function modules,…
ABAP performance best practices for ECC / traditional database systems (Oracle, DB2,MSSQL, MaxDB). Use when writing or reviewing…
ABAP performance best practices for S/4HANA and HANA database systems.Use when writing or reviewing ABAP code on HANA-based…
Techniques for navigating and finding objects in SAP systems. Use when searching for transactions, programs, FMs, classes, error…
Investigate SAP ADT REST API endpoints. Use when the user asks about ADT API endpoints, request/response XML formats, content…