Last generated: 2026-07-14 09:00 UTC
This repository is AI-generated. From every official
sap.mUI5 demo kit sample it automatically builds an abap2UI5 app, exposing the functional gaps between what UI5 offers and what abap2UI5 can already express — so they can be closed. Other UI5 libraries follow later.See the result in api.md, or try it live: pull this repo into your ABAP system and start
z2ui5_cl_api_app_overview, which lists every generated sample and launches it right in your system.
A coding agent runs the pipeline:
- Read — clone OpenUI5 and scan every
sap.mdemo kit sample (src/sap.m/test/sap/m/demokit/sample/<Name>/). - Generate — rebuild each sample 1:1 as an abap2UI5 app (
z2ui5_if_app), filed undersrc/01. - Store templates — keep the original UI5 JS/XML templates in
ui5/, one folder per port (named after the port class). - Report — regenerate the coverage tables and the in-system overview app, marking every sample ✅ ported or ❌ missing. The ❌ rows are the backlog.
Reviewed, curated samples graduate to the hand-maintained abap2UI5/samples repository.
Generation prompt (UI5 sample → abap2UI5 app)
You are porting one official UI5 demo kit sample to abap2UI5.
Input: the sample's original files (Component.js, *.view.xml, controller,
manifest.json) from the OpenUI5 checkout.
Output: one ABAP class z2ui5_cl_api_app_<n> implementing z2ui5_if_app, that
rebuilds the sample's UI and behaviour 1:1.
Rules:
- Build the view with the generic builder z2ui5_cl_api_xml, translating the
sample's XML 1:1 (open = descend into a container, leaf = childless
control/stay, shut = ascend). Attributes are added with
a( n = `key` v = `value` ) chained right after the control's open/leaf;
a targets that control, and v is any string expression (literal, a
client->_bind_edit/_event result, a || template). factory( ) returns an empty root
- open the <mvc:View> and declare its xmlns namespaces yourself. Blank line
between controls whose verb differs (open<->leaf, before shut); none between
same-verb controls, none right after a shut, none between a control and its
attrs; the whole view ends in a single ). Booleans: literal
v = `true`/`false`, or v = z2ui5_cl_api_xml=>as_bool( flag ) when fed from an
ABAP boolean variable.
- Structure z2ui5_if_app~main as a dispatcher:
me->client = client.
IF client->check_on_init( ).
data_init( ).
view_display( ).
ELSEIF client->check_on_event( ).
on_event( ).
ENDIF.
Add data_init / on_event only when the app actually has data / events.
- Move the sample's JSON model data into ABAP (VALUE #( ... )) and bind it
with client->_bind_edit (the one-way client->_bind is obsolete - always use
_bind_edit).
- Map controller event handlers to check_on_event( ) branches.
- Use ONLY controls and properties available since UI5 1.71; never use a
deprecated control/property. If the sample needs anything newer or
deprecated, stop and report the gap instead of porting.
- Must pass abaplint for ABAP_STANDARD, ABAP_CLOUD and ABAP_702 (downport).
- Add ABAP Doc above the class (line 1 fixed; line 2 `<entity> - <SampleName>`;
line 3 the OpenUI5 demo kit url on sdk.openui5.org, never the commercial
SAPUI5 host):
"! GENERATED ABAP CODE BASED ON UI5 DEMO KIT SAMPLE
"! <entity> - <SampleName>
"! https://sdk.openui5.org/entity/<entity>/sample/<lib>.sample.<Name>
- Any runtime asset URLs the sample uses (test-resources / resources images)
also point at the OpenUI5 host (sdk.openui5.org), never SAPUI5.
- Set the abapGit <DESCRIPT> to `<entity> - <demo kit description>`.
- Follow all ABAP conventions in AGENTS.md.
The focus is currently on sap.m — all ports live under src/01. Other UI5
libraries are brought back in later.
Every app is ABAP Cloud ready and downportable to 7.02. In detail, every app:
- uses only controls and properties available since UI5 1.71 (16 Jan 2020), none of them deprecated — so it runs on old UI5 versions too;
- runs on SAPUI5 and OpenUI5, including the legacy-free runtime;
- runs on ABAP Cloud and ABAP Standard, and downports to 7.02.
CI enforces this on every change:
| Build | What it does |
|---|---|
ABAP_STANDARD |
abaplint ./abaplint.jsonc (syntax v750) |
ABAP_CLOUD |
abaplint .github/abaplint/abap_cloud.jsonc (syntax Cloud) |
ABAP_702 |
npm run downport → abaplint .github/abaplint/abap_702.jsonc |
Coverage per UI5 library — the share of official demo kit samples that already have an abap2UI5 port.
Overall 34 / 446 demo kit samples ported (7.6 %).
| Module | Samples | Ported | Coverage | |
|---|---|---|---|---|
sap.m |
446 | 34 | 7.6 % | █░░░░░░░░░ |
| Total | 446 | 34 | 7.6 % | █░░░░░░░░░ |
For the full control-level view — one row per sample (Module · Control ·
Sample · JavaScript · UI5 App · ABAP), every link pointing at OpenUI5 — see
api.md, or the in-system overview app z2ui5_cl_api_app_overview,
where the Sample column links the OpenUI5 source (its ↗ opens the live
sample) and the abap2UI5 column links the generated class (its ↗ starts the
app in the system).
The coverage summary and api.md are generated by the generate_result
workflow (scripts/generate-coverage.mjs), and the overview app by
scripts/generate-overview.mjs, both from the latest OpenUI5 demo kit
samples — do not edit them by hand.
For bug reports or feature requests, please open an issue in the abap2UI5 repository.