sap-activate-object
Activates an inactive SAP repository object via SAP GUI Scripting. Routes to the correct transaction by object type: SE38 for reports/programs/function- group…
Answers "why does user U (not) see launchpad content T" and finds broken/dead launchpad references by deterministically cross-joining what the FLP designer, PFCG, and web designers each show only half of: user -> roles (BAPI_USER + AGR_USERS + composite expansion, with validity)
$ npx -y skills add sapdev-ai/sap-dev --skill sap-fiori-flp-audit --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/sap-fiori-flp-auditContext preview
The summary Claude sees to decide when to auto-load this skill.
Answers "why does user U (not) see launchpad content T" and finds broken/dead launchpad references by deterministically cross-joining what the FLP designer, PFCG, and web designers each show only half of: user -> roles (BAPI_USER + AGR_USERS + composite expansion, with validity)
name: sap-fiori-flp-audit description: | Answers "why does user U (not) see launchpad content T" and finds broken/dead launchpad references by deterministically cross-joining what the FLP designer, PFCG, and web designers each show only half of: user -> roles (BAPI_USER + AGR_USERS + composite expansion, with validity) -> each role's Fiori menu references (AGR_HIER/AGR_HIERT/AGR_BUFFI: catalog and group providers with their real IDs, OData services, Web Dynpro apps, and classic transaction targets) -> TSTC validation of every transaction target. RFC-only, read-only, S/4-oriented (a runtime presence probe stops loud with FLP_NOT_PRESENT on a non-FLP box, never an empty-but-green audit). IMPORTANT HONESTY: RFC_READ_TABLE CANNOT read the /UI2 Page Builder persistence (/UI2/PB_C_PAGE/CHIP, /UI2/CHIP_CHDR) — those tables carry STRING columns and RFC_READ_TABLE dies with "ASSIGN CASTING in SAPLSDTX" even for narrow non-string fields (live-proven on S4D) — so the persistence-integrity checks (BROKEN_CHIP_REF, ROLE_REFERENCES_MISSING_CATALOG, EMPTY/UNASSIGNED_CATALOG) are reported COULD_NOT_CHECK with that exact reason and need the wrapper route (v1.5) or an SE16N read; the role-menu-content audit + dead-transaction-target detection are fully delivered. Tri-state honest (COULD_NOT_CHECK never renders green; the verdict caps at PARTIAL). No writes, no Z objects, no GUI. Prerequisites: pinned RFC profile via /sap-login; NCo 3.1 (32-bit). ECC without the UI addon: FLP_NOT_PRESENT (not supported). argument-hint: "user <USER> | broken-tm [--catalog <pat>] | unassigned | full --user <USER> [--include-sap] [--lang L] [--max-rows N]"
You audit classic Fiori Launchpad content from the RFC-readable angle: resolve a user's roles and their Fiori menu references (catalogs, groups, services, transactions), validate transaction targets against TSTC, and report the /UI2 Page-Builder persistence-integrity checks honestly as COULD_NOT_CHECK (RFC_READ_TABLE cannot read those STRING-column tables). Read-only, no writes.
Task: $ARGUMENTS
The facts come from `sap_flp_extract_rfc.ps1` (TSVs + findings); **you** narrate `flp_audit.md` including the per-tile "why chain" — narrating only rows that exist.
---
| File | Token / call | Purpose | |---|---|---| | `<SKILL_DIR>/references/sap_flp_extract_rfc.ps1` | `-Mode user\|broken-tm\|unassigned\|full -User <U>` | The RFC extractor (all readable areas) | | `<SAP_DEV_CORE_SHARED_DIR>/scripts/sap_artifact_lib.ps1` | dot-sourced | `Register-SapArtifact`, scope key | | `/sap-login` | sub-skill | Pinned RFC profile (no GUI session needed) | | `/sap-run-report` | sub-skill | `--flc` (v1.5) `/UI2/FLC` corroboration (Rule-5 confirm) |
---
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)); Write-Output ('RUN_TEMP=' + (Get-SapRunTemp))"powershell -ExecutionPolicy Bypass -File "<SAP_DEV_CORE_SHARED_DIR>\scripts\sap_log_helper.ps1" -Action start -StateFile "{RUN_TEMP}\sap_fiori_flp_audit_run.json" -Skill sap-fiori-flp-audit -ParamsJson "{}"---
Modes: `user <USER>` | `broken-tm` | `unassigned` | `full --user <USER>`. `spaces` -> `MODE_NOT_IMPLEMENTED` (v2). Flags: `--catalog <pat>`, `--include-sap`, `--lang L`, `--max-rows N` (default 50000). `user`/`full` require `<USER>` (uppercased).
Pinned RFC profile via `/sap-login` (no GUI session). Connect failure -> `RFC_LOGON_FAILED`.
`{OUT}` = `Get-SapArtifactDir -ScopeKey <FLP_USER_<U> | FLP_SYSTEM> -Skill sap-fiori-flp-audit`.
C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -File "<SKILL_DIR>\references\sap_flp_extract_rfc.ps1" -Mode <mode> -User <U> -Lang <L> -MaxRows <N> -OutDir "{OUT}" -SharedDir "<SAP_DEV_CORE_SHARED_DIR>"Interpret the last `STATUS:`: `FLP_NOT_PRESENT` -> stop loud (not an FLP box); `FLP_USER_NOT_FOUND` -> stop; `PARTIAL` -> continue carrying the COULD_NOT_CHECK areas; `RFC_ERROR` -> stop. Read the `FLP_PERSISTENCE:` line — when `rfc_readable=NO`, the /UI2 persistence-integrity checks are COULD_NOT_CHECK (surface the reason in Coverage). Each `SECTION:` line carries its per-area coverage.
Read the TSVs (`flp_user_roles.tsv`, `flp_role_content.tsv`, `flp_findings.tsv`) and write `flp_audit.md`: header (system/client/mode/user), executive summary, per-query sections, the per-tile **why chain** for `user` mode ("visible because role R (valid to D) whose menu references catalog C / launches transaction T"), findings table severity-sorted, and a **Coverage** section that states explicitly: the /UI2 Page-Builder persistence integrity is COULD_NOT_CHECK (RFC limitation), user personalization deltas are out of v1 scope. Register:
powershell -ExecutionPolicy Bypass -Command ". '<SAP_DEV_CORE_SHARED_DIR>\scripts\sap_artifact_lib.ps1'; Register-SapArtifact -Skill 'sap-fiori-flp-audit' -ScopeKey '<FLP_USER_<U>|FLP_SYSTEM>' -Kind 'flp-audit' -Format 'md' -Path '{OUT}\flp_audit.md' -Coverage '<CHECKED|PARTIAL>' -Verdict '<CLEAN|FINDINGS|PARTIAL>'"Echo `FLP: mode=<m> roles=<n> menu_nodes=<n> findings=<n> coverage=<...>`.
powershell -ExecutionPolicy Bypass -File "<SAP_DEV_CORE_SHARED_DIR>\scripts\sap_log_helper.ps1" -Action end -StateFile "{RUN_TEMP}\sap_fiori_flp_audit_run.json" -Status SUCCESS -ExitCode 0`FLP_NOT_PRESENT` / `FLP_USER_NOT_FOUND` / `MODE_NOT_IMPLEMENTED` / `RFC_LOGON_FAILED` on failure paths. A PARTIAL run (persistence COULD_NOT_CHECK) is SUCCESS with `coverage=PARTIAL`.
---
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.
Repo: sapdev-ai/sap-dev
Activates an inactive SAP repository object via SAP GUI Scripting. Routes to the correct transaction by object type: SE38 for reports/programs/function- group…
Natural-language SAP API discovery over RFC (no GUI): turn a goal like "create a sales order" or "post a goods movement" into a ranked, trap-annotated,…
Runs the SAP ABAP Test Cockpit (ATC) end-to-end as a quality gate: builds an SCI Object Set scoped to the target object(s), creates an ATC Run Series bound to…
Executes BDC (Batch Data Communication) sessions in SAP via RFC. Reads SHDB recording files from the bdc/ folder, connects via SAP NCo 3.1, calls…
Changes the package (TADIR-DEVCLASS) assignment of an SAP repository object via the "Object Directory Entry" dialog (Goto > Object Directory Entry). Routes by…
Validates ABAP source (report / program / FM / class / include) before deployment — one skill, dimension-dispatched: naming (variable conventions), type (DDIC…