abap-code-review-helpe…
Primary correctness and runtime-safety review guidance for ABAP reports, classes, function modules, enhancements, BAPIs,…
Techniques for navigating and finding objects in SAP systems. Use when searching for transactions, programs, FMs, classes, error messages, BAPIs, tables, custom objects, or anything in an unfamiliar SAP system. Teaches the mindset and metadata knowledge a senior ABAP developer
$ npx -y skills add marcellourbani/vscode_abap_remote_fs --skill abap-research --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/abap-researchContext preview
The summary Claude sees to decide when to auto-load this skill.
Techniques for navigating and finding objects in SAP systems. Use when searching for transactions, programs, FMs, classes, error messages, BAPIs, tables, custom objects, or anything in an unfamiliar SAP system. Teaches the mindset and metadata knowledge a senior ABAP developer
name: abap-research description: Techniques for navigating and finding objects in SAP systems. Use when searching for transactions, programs, FMs, classes, error messages, BAPIs, tables, custom objects, or anything in an unfamiliar SAP system. Teaches the mindset and metadata knowledge a senior ABAP developer uses to find anything in any system. Load this skill when the user asks to find something and direct search doesn't work, or when investigating errors, screenshots, or unknown functionality. argument-hint: '[what to find in the SAP system]' user-invocable: true disable-model-invocation: false
You're a senior ABAP developer dropped into an unfamiliar SAP system. You need to find things, understand how they connect, and trace problems to their source. You have two main tools: **object search** (by name/pattern) and **SQL** (query metadata tables). Use both creatively.
**Your mindset:** Be curious. Be a detective. SAP catalogs EVERYTHING in metadata tables. If something exists in the system, there's a table that knows about it. Your job is to figure out which table, read its structure with `get_object_lines`, and then query it.
**CRITICAL:** Never hardcode field names from memory. Always read a table's structure first with `get_object_lines` to see its actual fields before querying it.
**CRITICAL:** Text fields in SAP are often **case-sensitive**. When searching by text, use wildcards aggressively — skip the first letter of words, put `%` between key phrases. `%rticle%aint%` finds "Article Maintenance", "article maint.", but WILL NOT find "ARTICLE MAINTENANCE."
---
These tables are the backbone of SAP's self-documentation. Before querying any of them, **read their structure first** to get correct field names.
| Table | What it catalogs | |-------|-----------------| | **TADIR** | Master directory of ALL development objects — every class, program, FM, table, etc. Links objects to packages, authors, creation dates | | **TRDIR** | Program directory — all ABAP programs with their type (report, include, class pool, function pool, module pool) | | **TRDIRT** | Program short texts (descriptions) |
| Table | What it catalogs | |-------|-----------------| | **TSTC** | Transaction code → program mapping | | **TSTCT** | Transaction code descriptions/titles (language-dependent) |
| Table | What it catalogs | |-------|-----------------| | **T100** | All system messages — message class, number, text (language-dependent and case-sensitive) |
| Table | What it catalogs | |-------|-----------------| | **DD02L** | Table/structure definitions (metadata) | | **DD02T** | Table/structure descriptions (language-dependent) | | **DD03L** | Table field list — every field in every table, with data type, length, key flag | | **DD04L** | Data element definitions | | **DD04T** | Data element descriptions (language-dependent) | | **DD01L** | Domain definitions | | **DD01T** | Domain descriptions | | **DD07L** | Domain fixed values (dropdown values, value ranges) |
| Table | What it catalogs | |-------|-----------------| | **SEOCLASSTX** | Class/interface descriptions (language-dependent) | | **SEOMETAREL** | Interface implementations — which class implements which interface | | **SEOCOMPO** | Class/interface components (methods, attributes, events) |
| Table | What it catalogs | |-------|-----------------| | **TFDIR** | Function module directory | | **TFTIT** | Function module short texts (language-dependent) | | **ENLFDIR** | FM → function group mapping | | **FUPARAREF** | Function module parameters (name, type, direction) |
| Table | What it catalogs | |-------|-----------------| | **E070** | Transport request headers — owner, description, status, type | | **E071** | Transport object list — which objects are in which transport |
| Table | What it catalogs | |-------|-----------------| | **SXS_ATTR** | BAdI definitions | | **SXC_ATTR** | BAdI implementations | | **MODSAP** | Classic enhancement exits (SMOD/CMOD) |
---
These are not step-by-step procedures. They're **ways of thinking** about research problems. Adapt them to the situation.
You have a title or description. **TSTCT** maps descriptions to tcodes. **TSTC** maps tcodes to programs. Chain them: title → tcode → program → now you can read the code.
The message text is your clue. **T100** stores every message in the system with its class and number. Find it there (wildcard aggressively). Then search code for that message class + number to find where it's raised. Read the surrounding code to understand the trigger condition.
BAPIs follow naming conventions: `BAPI_<object>_<action>`. Try the object search tool with patterns like `BAPI_*_CREATE*`, `BAPI_*_GETDETAIL*`, `BAPI_*_GETLIST*`, `BAPI_*_CHANGE*`. Also search **TFTIT** for FM descriptions matching your task.
**Package clustering.** Every development object lives in a package. Query **TADIR** to find the object's package. Then query TADIR again for ALL objects in that same package. You'll discover the classes, tables, FMs, reports, message classes — everything that was built together as a unit.
Reverse lookup via **DD03L**. Query it for the field name to find every table containing that field. This reveals the data model — which are master data tables, which are transaction tables, which are config tables.
**TADIR** has the author of every object. **E070** has transport request owners. **E071** links transp
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…
Investigate SAP ADT REST API endpoints. Use when the user asks about ADT API endpoints, request/response XML formats, content…
Clean ABAP style and maintainability guidance. Use when writing ABAP code or when a review explicitly asks for Clean ABAP style,…