abap2UI5
Version 1.148.0

#7 One Handler for Every App ​

Count what a screen usually costs in backend artifacts. A CDS view or two, a service definition, a service binding, a behavior definition and its implementation, a projection — each one named, transported, reviewed, and each one belonging to exactly one application. Then multiply by the number of screens your team ships in a year.

An abap2UI5 app adds none of them — and there is no SEGW project underneath either. Every app in the system is served by the same generic HTTP handler, and it is generic in a specific way: it does not know the app, the view or the model. It moves two strings.

A service per screen, against one handler that knows none of them.

A service per screen, against one handler that knows none of them.

That is visible from inside, and it is the first thing worth trying in a debugger. Set a breakpoint in an app class and look at the call stack — between the ICF and the app there are only the framework's own two handler classes, a few frames each. No OData runtime, no SADL, no Gateway. The stack fits on a screenshot.

The reason it can be generic is that nothing about the data is agreed in advance. In an OData conversation the metadata comes first and fixes the shape; data follows within that shape for the rest of the session. Here the model travels with every response — #5 — so each response may carry a different one. There is no contract to violate because there is no contract to register.

How Much Handler That Is ​

The communication core of abap2UI5 started as one HTTP handler class, two interfaces and one database table, about 2,300 lines of ABAP. The framework has grown since — most visibly the optional view builder — and the part that carries every request is now a dozen small classes in the core package (handler, action, binding, model, events, draft) behind the same two interfaces and the same one table.

It is small because of what it leaves to the apps. The framework does not build views; apps do. It does not decide program flow; apps do. It does not wrap UI5 controls, so it does not grow when UI5 does. It does not implement a protocol, because the protocol is a POST with two strings.

That has a practical consequence, and it is the one that decides whether a framework gets through a review at all. Something sitting in the request path of a business application sees every input, every response and every user, and a dependency that cannot be read cannot really be reviewed. Here one package holds the logic, and reading it is a few afternoons. The audit answers are short for the same reason: no CDS artifacts, no RAP objects, no generated code, no build step, no transitive package tree. The system footprint is the source in the repository.

What that removes is not effort — the app still decides everything — but artifacts. A screen stops being a set of objects to create, name, transport and govern, and becomes a class.

A handler that knows nothing about the application never has to be written again for the next one.

Edit this page on GitHub ↗ Last updated: