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.
Others providing
Compare all 17 on the UI written in ABAP page →- abap2UI5-localabap2UI5-localThe whole abap2UI5 framework folded into the local classes of one HTTP handler, so an app runs without the framework installed as a package.community org, abapabap2UI5 folded into the local classes of one HTTP handlerfrom ABAP
- 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, abapUI5 apps written as one ABAP class, rendered by a generic shellfrom ABAP
- abap-cloud-guiabap-cloud-guiA report-style programming model for abap2UI5: one class produces a selection screen with a WRITE list or an ALV grid, running as a UI5 app on ABAP Cloud as well as on NetWeaver 7.02.independent, abapReport-style programming model for abap2UI5 on ABAP Cloudfrom ABAP
- custom-controlscustom-controlsThirteen custom controls for abap2UI5, a signature pad and a scanner that reads several barcodes at once among them, each one an ABAP builder class with a single render( ) method and all of them shipped in a BSP of their own.community org, abapThirteen custom UI5 controls for abap2UI5 appsfrom ABAP
- http-connectorhttp-connectorAn add-on that makes the abap2UI5 apps of one ABAP system reachable through another: a thin ICF handler on the consumer system forwards every roundtrip to the source system through an SM59 destination.community org, abapForwards abap2UI5 roundtrips to another system over HTTPfrom ABAP
- layout-managementlayout-managementAn abap2UI5 addon that renders an internal table or a structure as a UI5 table or form with a settings popup, where the user lays it out and saves the result as a layout variant.independent, abapTable and form layouts with saved variants for abap2UI5from ABAP
- abap2UI5 for Excelabap2UI5 for ExcelAn Office add-in that runs an abap2UI5 app in Excel's task pane, where the app reads and writes the workbook through the z2ui5.cc.ExcelBridge control.community org, abapOffice add-in running an abap2UI5 app in Excel's task panefrom ABAP
- abap2UI5-addons/popupsabap2UI5-addons/popupsReady-made dialogs for an abap2UI5 app: confirm, inform, select from a list, file up- and download, table, text edit, PDF, HTML, messages, range, value help and search help, each opened with one factory( ) call.community org, abapReady-made dialogs for abap2UI5 appsfrom ABAP
- rap-extrap-extFloorplan classes that read a CDS entity's UI annotations at runtime and render a list report, worklist, tree, object page, overview page, value help or action dialog as an abap2UI5 app.community org, abapFloorplans rendered from CDS UI annotations as abap2UI5 appsfrom ABAP
- selection-screenselection-screenSelect-options with saved variants for an abap2UI5 app, built from a database table name or from an internal table the app passes in.independent, abapSelect-options with saved variants for abap2UI5 appsfrom ABAP
- abap2UI5 frontend-webcomponentabap2UI5 frontend-webcomponentAn alternative abap2UI5 frontend: one ES module registering <abap2ui5-app>, which renders the views an unchanged abap2UI5 app class sends with UI5 Web Components and no UI5 core.community org, abapabap2UI5 frontend rendering with UI5 Web Componentsfrom ABAP
- abap2UI5 frontendabap2UI5 frontendThe abap2UI5 frontend as installable ABAP artefacts: per system type one generated branch carrying the BSP or HTTP service with its handler, pulled into the system with abapGit.community org, abapabap2UI5 frontend as ABAP artefacts installed with abapGitfrom ABAP
- abap2UI5 Layout Editorabap2UI5 Layout EditorA browser editor that lays out a UI5 view by drag and drop and writes it out as one abap2UI5 app class, pulled into the system with abapGit.community org, abapDrag-and-drop UI5 view editor that writes an abap2UI5 app classfrom ABAP
- ZFPM_TOOLSZFPM_TOOLSA report that shows the development objects of an FPM hierarchy in one view and edits, copies, deletes, imports and exports the hierarchy as a whole rather than one object at a time.independent, abapEdits, copies and transports a whole FPM hierarchy at oncefrom ABAP
- ZWD_CALENDAR_VHZWD_CALENDAR_VHA value help for date fields in Web Dynpro ABAP screens that shows a calendar view, so the user picks a day from it instead of typing the date.independent, abapWeb Dynpro ABAP calendar value help for date fieldsfrom ABAP
- abap_mustacheabap_mustacheA Mustache template engine for ABAP, rendering logic-less templates into HTML or any other text from a structure or table of any type, with partials and a separate Steampunk-compatible branch.independent, abapMustache template engine for ABAPfrom ABAP
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