abap2UI5 protocol
The abap2UI5abap2UI5One ABAP class implementing z2ui5_if_app is the whole app: the browser loads a generic UI5 shell once, and every interaction after that is an HTTP roundtrip back into ABAP.community org, abap roundtrip written down: a versioned specification of the wire between frontends and backends, JSON Schemas for its messages, and two conformance suites that test either side.
abap2UI5abap2UI5One ABAP class implementing z2ui5_if_app is the whole app: the browser loads a generic UI5 shell once, and every interaction after that is an HTTP roundtrip back into ABAP.community org, abap is server-driven UI: the browser sends one JSON roundtrip per user event (the event, the model delta, the draft id) and the backend runs the app's main( ) and answers with the views and the model, with messages and frontend actions queued beside them. Three backends and three frontends spoke that format before anyone wrote it down; this repository writes it down in eight specification files, every MUST and SHOULD naming the ABAP class or JavaScript module it was derived from, beside three view profiles (the full UI5 XML vocabulary, a 61-control portable subset, and the agent snapshot that carries the screen as data) and JSON Schemas 2020-12 for the request, the response, the snapshot and the portable profile. Two suites then test an implementation: abap2ui5-conformance backend plays the frontend over HTTP against conformance apps a backend serves under fixed class names, shipped as ABAP classes and as cap2UI5 twins, and abap2ui5-conformance frontend plays the backend with recorded and synthetic responses through one adapter per frontend. It carries two frontends of its own as well: a prototype mapping a response onto an Adaptive Card 1.5, and abap2ui5-tui, which runs an abap2UI5 app as a keyboard-driven text screen against an SAP system or either reference backend.
Facts
Where it sits
Who is behind it
In the atlas: maintains 18@abap2UI5maintaineroblomov-devContributes to this
In the atlas: maintains 4, contributes to 44@oblomov-dev1 contributor
Before choosing this
Conditions
PracticalFunctional boundary
Neither suite has been run against an ABAP system: the reference backends are the framework transpiled to Node and cap2UI5 on CAP, so what a check does on a real system is open. The portable profile is a subset of 61 controls, filled from a census of 247 core apps of which 64.8 % run unchanged, so an app outside it renders placeholders in the terminal and Adaptive Cards renderers.
What it declares
Every artifact
- Type
- Practice
- Origin
- By a community org
- Use as
- A reference
- Runtime
- Node.js
Connections
Producing a web user interface from ABAP code
UI5 apps written as one ABAP class, rendered by a generic shell
UI5 apps written as one ABAP class, rendered by a generic shell
Git client written in ABAP that runs inside the system
Download
README
quoted from abap2UI5/protocol under MIT, readabap2UI5 protocol
The written, versioned contract between abap2UI5 frontends and backends - with JSON Schemas and conformance suites, so either side can be swapped.
abap2UI5 is server-driven UI ("UI5 over the wire"): the browser frontend
sends one JSON roundtrip per user event - the event, the model delta, the
draft id - and the backend runs the app's main( ) and answers with views,
the model, messages and frontend actions. That protocol is spoken today by
three backends (abap2UI5 on an ABAP system, the same framework transpiled to
Node as @abap2ui5/node-runtime, cap2UI5 on CAP) and three frontends (the
UI5 SPA, the MCP server's agent client, the ABAP frontend simulator). This
repository writes it down.
The layers
profiles/ view profiles - what is inside a view string
ui5 full UI5 XML + the .eB/.eF wire forms + the boot page (the UI5 SPA)
portable a 61-control subset every renderer renders (Web Components, native, ...)
semantic agent snapshot v1 - the screen as data (agents, test drivers)
---------------------------------------------------------------------------------
spec/ the core protocol - mandatory for every frontend and backend
transport one endpoint, GET page / POST roundtrip, headers, CSRF, HEAD, sap-contextid
request S_FRONT, events and their arguments, the model delta (__delta), CONFIG
response S_FRONT, T_SYSTEM / T_CUSTOM, the five view slots, MODEL, processing order
actions follow-up actions, messages
sessions drafts, draft ids as snapshots, expiry, failed roundtrips
navigation app start resolution, app stack, routes, app-state hash, ROUTER action
errors the 500 text body and what a frontend does with it
versioning PROTOCOL 2, compatible changes
schema/ JSON Schemas (2020-12): request, response, snapshot, portable profile
conformance/
backend the backend suite - plays the frontend over HTTP (implemented)
frontend the frontend suite - plays the backend, adapters for (implemented)
the UI5 SPA (Playwright), the agent client, the
Web Components frontend, the Adaptive Cards and the
terminal renderer
apps the conformance apps: ABAP classes + cap2UI5 twins
hosts the two reference backends, started with the apps deployed
renderers/
adaptive-cards a portable renderer without a browser: response -> Adaptive
Card 1.5, Action.Submit -> request (prototype)
terminal an abap2UI5 app in a terminal: keys in, text screen out,
the CLI abap2ui5-tui (node runtime, cap2UI5, SAP systems)
common what both renderers share: view helpers, payload -> request
traffic/ real traffic of both reference backends and three frontends
Start with spec/core.md. Every normative statement cites the source file and method it was derived from (spec/README.md).
Status
- Protocol 2, specification revision 0.3, derived from abap2UI5 1.146.0
(commit
b812079); the maintainer decided the ten open questions (spec/open-questions.md). - Backend suite: 76 checks (62 MUST, 14 SHOULD; 69 core, 7 UI5 profile).
Both reference backends pass every check but
error.no-reflection, new in revision 0.3 (the request URL reflected into the 500 body; fixed in abap2UI5 core, pinned until the runtime release carries it) -node-runtime75/76,cap2ui574/76 with one SHOULD warning (conformance/RESULTS.md). - Schemas validate all 336 recorded requests, 320 responses and 18 agent snapshots, checked by the shipped validator and by ajv.
- Portable profile v1 filled from a census of 247 core apps (73.7 % by controls, 64.8 % run unchanged).
- Frontend suite: 81 checks (66 MUST, 15 SHOULD; 66 core, 8 portable,
4 UI5, 3 semantic), scripted from the recorded traffic. The official UI5
SPA passes every MUST but one - message box details stay empty on OpenUI5
= 1.120 (fix under way); the agent client (mcp-server
a4d9f07), the Adaptive Cards renderer and the terminal renderer pass every check that applies to them (61, 66 and 72 - the terminal's include the router checks); the Web Components frontend 68 of 68, with one intermittent failure (conformance/RESULTS.md). - Adaptive Cards renderer (prototype, renderers/adaptive-cards/):
all 65 portable controls mapped onto Adaptive Cards 1.5, the way back from
an
Action.Submitto the next request, golden cards of recorded traffic. - Terminal renderer (renderers/terminal/):
an abap2UI5 app in a terminal -
npx abap2ui5-tui <url> --app <CLASS>against the node runtime, cap2UI5 or an SAP system (basic auth, cookies, CSRF,sap-contextid), all 65 portable controls as keyboard-driven widgets, a hash history so Back works,--printfor logs, CI and screen readers; pure Node, no dependencies. - Not yet run against an ABAP system.
Run the backend suite
npm ci
# against any backend that serves the conformance apps
npx abap2ui5-conformance backend --url http://localhost:3000/ --profile ui5
# against the reference backends
npm run conformance:node-runtime # transpiles the ABAP apps, serves, runs
npm ci --prefix conformance/hosts/cap2ui5
npm run conformance:cap2ui5
To test your backend: deploy the conformance apps
(abapGit for ABAP; the JS twins for cap2UI5), point --url at the endpoint.
Options, the library API and the check list:
conformance/backend/README.md.
Run the frontend suite
npx abap2ui5-conformance frontend --adapter ui5 # the UI5 SPA (ABAP2UI5_HOME=<abap2UI5 checkout>) in Chromium
npx abap2ui5-conformance frontend --adapter agent # the agent client of abap2UI5/mcp-server
npx abap2ui5-conformance frontend --adapter adaptive-cards # the Adaptive Cards renderer of this package
npx abap2ui5-conformance frontend --adapter terminal # the terminal renderer of this package
Run an app in the terminal
npm run serve:node-runtime & # the conformance apps on http://localhost:3000/
npx abap2ui5-tui http://localhost:3000/ --app Z2UI5_CL_CONF_BIND
npx abap2ui5-tui "https://host/sap/bc/z2ui5?sap-client=100" --app Z2UI5_CL_MY_APP --user ME --print
Keys, options and the control mapping: renderers/terminal/README.md.
Adapters, options and the check list: conformance/frontend/README.md.
Develop
npm test # schemas, traffic, docs, portable profile, CLI, both backends,
# the frontend suite (agent client, Adaptive Cards and terminal
# renderer; UI5 SPA with a checkout + Chromium), the golden
# cards and screens, the terminal against the node runtime
# (PROTOCOL_SKIP_BACKENDS=1 / PROTOCOL_SKIP_BROWSER=1 skip the slow parts)
npm run record # re-record traffic/ from both backends
npm run lint:abap # abaplint over the ABAP conformance apps
npm run generate # regenerate the check lists, the portable-profile sections and
# the Adaptive Cards and terminal mapping tables
npm run demo:adaptive-cards -- slots.popup-destroy 0 1 # a recorded response as card JSON
Node 22 or later. The package has no runtime dependencies; the dev
dependencies are the reference backend (@abap2ui5/node-runtime, the
transpiler, express), abaplint, ajv, and for the UI5 adapter
playwright-core and the @openui5/sap.m source packages (UI5 without a
CDN).
Related
abap2UI5 (backend + UI5 frontend) · cap2UI5 · mcp-server (agent client, snapshot implementation) · headless-frontend · linter
License
MIT
History
Other 6
Notes
First version.
- Specification of protocol 2 (revision 0.1), derived from abap2UI5
1.146.0: core (
spec/core.md), transport, request, response, actions, sessions, navigation, errors, versioning - every normative statement traced to its source. - View profiles: UI5 (
profiles/ui5.md); portable v1 (profiles/portable.md,portable-v1.json,portable-coverage.md) from a census of 247 core apps and 642 samples-controls ports; semantic - agent snapshot v1, moved here from abap2UI5/mcp-server as the normative version. - JSON Schemas (2020-12) for the request, the response, the snapshot and the portable profile.
- Backend conformance suite (
abap2ui5-conformance backend, libraryrunBackendSuite): 75 checks, profilescoreandui5. - Conformance apps
Z2UI5_CL_CONF_*in ABAP (abapGit) and as cap2UI5 apps; reference hosts for@abap2ui5/node-runtimeand cap2UI5. - Recorded traffic of both reference backends (suite, UI5 frontend code,
agent client). Both pass every MUST; cap2UI5 warns on
error.details.
Details
Sources
Sources are graph entities: the same page may back several entries, and an unreachable source flags every row that rests on it.
Compatibility and provenance
Contributors
History in the atlas
- First seen.
For your agent
- Ref
artifact:abap2ui5-protocol- JSON
- /artifacts/abap2ui5-protocol.json
- MCP
- Connecting an agent