Skip to content
Business
Skill

/sap-customizing

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

BOOST
From plugin
vscode-abap-remote-fs
40326 skills23 agents
Install
$ npx -y skills add marcellourbani/vscode_abap_remote_fs --skill sap-customizing --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-customizing

Context 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

SKILL.md

sap-customizing.SKILL.md
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

SAP Customizing — Tracing SPRO to Data

Critical Warning

**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.

---

Metadata Tables

IMG Activity Layer (SPRO tree → activity)

| 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` |

Customizing Activity Layer (activity → objects)

| 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 |

View Cluster Resolution

| 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.

View → Base Table Resolution

| 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.

Transaction Resolution

| 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.

SPRO Tree Hierarchy

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

Read more
Ships withvscode-abap-remote-fs

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?"

Get the whole plugin

Other skills on vscode-abap-remote-fs.