Skip to content
Business
Skill

/sap-system-personality-report

Generate a comprehensive SAP System Personality Report. Analyzes custom code landscape, functional footprint, development activity, health metrics, and package breakdown. Use when a user asks to characterize a system, understand a system, get a system overview, system report,

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

Context preview

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

Generate a comprehensive SAP System Personality Report. Analyzes custom code landscape, functional footprint, development activity, health metrics, and package breakdown. Use when a user asks to characterize a system, understand a system, get a system overview, system report,

SKILL.md

sap-system-personality-report.SKILL.md
name: sap-system-personality-report
description: Generate a comprehensive SAP System Personality Report. Analyzes custom code landscape, functional footprint, development activity, health metrics, and package breakdown. Use when a user asks to characterize a system, understand a system, get a system overview, system report, system personality, or "what does this system do?" Collects data via SQL queries and presents results in a structured webview.
argument-hint: '[connectionId of the SAP system to analyze]'
user-invocable: true
disable-model-invocation: false

SAP System Personality Report

Generate a rich, structured report that characterizes an SAP system in human-readable terms. You will collect data by running SQL queries, then present the results in a webview table AND provide a narrative AI summary.

**CRITICAL:** Before running ANY query, call `abapfs_get_sql_syntax` to understand ABAP SQL syntax. Use `get_object_lines` to check table structures before running SQL queries.

**CRITICAL:** All queries must use ABAP SQL syntax (e.g., `ORDER BY field DESCENDING` not `DESC`). Use the `abapfs_run_sql_query` tool with `displayMode: "internal"` to collect data, then assemble final results into a `displayMode: "ui"` call.

---

Step 1: System Identity

Get basic system information first. Use the `abapfs_get_sap_system_info` tool — it returns system type (S/4HANA vs ECC), release, timezone, and client details. No SQL needed for this step.

---

Step 2: Custom Code Landscape — Object Counts

Run these queries to count custom objects. Use `displayMode: "internal"` with `rowRange: {start: 0, end: 5}` since we only need counts.

**Run all of these in parallel** (they are independent):

Classes

SELECT COUNT(*) AS CNT FROM SEOCLASS WHERE CLSNAME LIKE 'Z%' OR CLSNAME LIKE 'Y%'

Interfaces

**NOTE:** The `SEOINTERF` table does NOT exist in S/4HANA. Use TADIR instead:

SELECT COUNT(*) AS CNT FROM TADIR WHERE PGMID = 'R3TR' AND OBJECT = 'INTF' AND OBJ_NAME LIKE 'Z%'

Then separately for Y:

SELECT COUNT(*) AS CNT FROM TADIR WHERE PGMID = 'R3TR' AND OBJECT = 'INTF' AND OBJ_NAME LIKE 'Y%'

Sum both counts.

Programs/Reports (by type)

**CRITICAL:** The TRDIR table contains ALL program types (reports, includes, class pools, etc.). Using a raw count is very misleading since includes (SUBC='I') dominate the count. Always break down by SUBC field:

SELECT SUBC, COUNT(*) AS CNT FROM TRDIR WHERE NAME LIKE 'Z%' OR NAME LIKE 'Y%' GROUP BY SUBC ORDER BY CNT DESCENDING

SUBC values: '1'=Executable Reports, 'I'=Includes, 'M'=Module Pools, 'S'=Subroutine Pools, 'K'=Class Pools, 'J'=Interface Pools, 'X'=XSLT Programs.

In the final report, present these as separate line items:

  • **Executable Reports** (SUBC='1') — the actual standalone reports
  • **Module Pools** (SUBC='M') — dialog programs
  • **Includes** (SUBC='I') — sub-objects (generated for classes, FMs, etc.) — show for context but note they are generated
  • **Subroutine Pools** (SUBC='S') — standalone subroutine containers

Omit class pools (K) and interface pools (J) from the report since those are already counted under Classes and Interfaces.

Function Modules

SELECT COUNT(*) AS CNT FROM TFDIR WHERE FUNCNAME LIKE 'Z%' OR FUNCNAME LIKE 'Y%'

Function Groups

SELECT COUNT(*) AS CNT FROM TLIBG WHERE AREA LIKE 'Z%' OR AREA LIKE 'Y%'

Database Tables (transparent tables only)

SELECT COUNT(*) AS CNT FROM DD02L WHERE TABNAME LIKE 'Z%' AND TABCLASS = 'TRANSP' AND AS4LOCAL = 'A'

Then separately for Y:

SELECT COUNT(*) AS CNT FROM DD02L WHERE TABNAME LIKE 'Y%' AND TABCLASS = 'TRANSP' AND AS4LOCAL = 'A'

Sum both counts.

Structures

SELECT COUNT(*) AS CNT FROM DD02L WHERE TABNAME LIKE 'Z%' AND TABCLASS = 'INTTAB' AND AS4LOCAL = 'A'

Then separately for Y and sum.

Data Elements

SELECT COUNT(*) AS CNT FROM DD04L WHERE ROLLNAME LIKE 'Z%' AND AS4LOCAL = 'A'

Then separately for Y and sum.

Domains

SELECT COUNT(*) AS CNT FROM DD01L WHERE DOMNAME LIKE 'Z%' AND AS4LOCAL = 'A'

Then separately for Y and sum.

Table Types

SELECT COUNT(*) AS CNT FROM DD40L WHERE TYPENAME LIKE 'Z%' AND AS4LOCAL = 'A'

Then separately for Y and sum.

CDS Views

SELECT COUNT(*) AS CNT FROM DDDDLSRC WHERE DDLNAME LIKE 'Z%'

Then separately for Y and sum.

Message Classes

SELECT COUNT(*) AS CNT FROM T100A WHERE ARBGB LIKE 'Z%' OR ARBGB LIKE 'Y%'

Custom Transactions

SELECT COUNT(*) AS CNT FROM TSTC WHERE TCODE LIKE 'Z%' OR TCODE LIKE 'Y%'

Enhancement Implementations (BAdIs)

Shows how heavily the system extends SAP standard:

SELECT COUNT(*) AS CNT FROM TADIR WHERE PGMID = 'R3TR' AND OBJECT = 'ENHO' AND (OBJ_NAME LIKE 'Z%' OR OBJ_NAME LIKE 'Y%')

Number Range Objects

SELECT COUNT(*) AS CNT FROM TADIR WHERE PGMID = 'R3TR' AND OBJECT = 'NROB' AND (OBJ_NAME LIKE 'Z%' OR OBJ_NAME LIKE 'Y%')

**NOTE:** Some queries may fail on specific systems (missing tables, authorization). If a query fails, record the count as "N/A" and continue with the rest.

---

Step 3: Package Breakdown

This is the most valuable section. Get object counts per custom package.

**CRITICAL:** The column `OBJECT` is a reserved keyword in ABAP SQL. Do NOT alias it (e.g., `OBJECT AS OBJ_TYPE` will cause a parser error `Unknown column name "O"`). Use the column name `OBJECT` directly without alias.

SELECT DEVCLASS, OBJECT, COUNT(*) AS OBJ_COUNT
FROM TADIR
WHERE DEVCLASS LIKE 'Z%'
  AND PGMID = 'R3TR'
GROUP BY DEVCLASS, OBJECT
ORDER BY DEVCLASS ASCENDING

Use `displayMode: "internal"` with a large enough `rowRange` (start: 0, end: 1000) and `maxRows: 5000`.

Note: We no longer filter by specific OBJECT types in the WHERE clause — instead retrieve all R3TR objects and filter/pivot in post-processing. This avoids issues with long IN() lists and captures all object types.

Then run

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.