Skip to content

Embed control in production: authorization, upgrades, sessions; fix the service-level authorization example - #379

Merged
oblomov-dev merged 1 commit into
mainfrom
claude/quirky-keller-0vmwwd
Oct 20, 2026
Merged

oblomov-dev merged 1 commit into
mainfrom
claude/quirky-keller-0vmwwd

Conversation

@oblomov-dev

Copy link
Copy Markdown
Member

What

The questions a customer's security and architecture teams ask before an embedded abap2UI5 section goes live, which came up as a comment on the SAP Community post about the embed control. The answers now live in the documentation, not just in a comment thread.

advanced/fiori.md: new section "Running it in production"

  • Who may start which class: the class name and the parameters come from the browser. The framework checks the type (z2ui5_if_app), not the user, and drafts are bound to their owner. The ICF node (S_ICF, a dedicated node via the control's endpoint) decides who reaches abap2UI5 at all. An AUTHORITY-CHECK in main( ) decides who may run the app. Startup parameters are user input too, so the app checks the object (a CDS view with access control, EML authorization control), not only the app.
  • Upgrades: nothing changes by itself; an upgrade is a pull plus a transport. Pin a release and test on QAS (search the host apps for z2ui5:Container, OPA5/wdi5). The bundle's ETag means browser and server never run different versions. To freeze the embedded sections, use a second, renamed installation behind endpoint.
  • Sessions and load: stateless by default, so one draft row per container, not one open session. A table lists the requests per page. Measure with the roundtrip monitor. No set_session_stateful( ) in an embedded section.

configuration/authorization.md: fix

The service-level example refused requests based on get_form_field( `app_start` ). That parameter is only on the URL of the first page request:

  • POSTs carry the class name in the body (and the launchpad and the embed control never put it in the URL).
  • Roundtrips after the start carry no class name.
  • nav_app_call( ) switches apps without the client naming one.

So that handler either broke every roundtrip or checked nothing. The handler now only guards the node (with a 403), a warning box explains the pitfall, App-Level is the recommended per-app check, and there is a new section, "Startup Parameters Are User Input".

configuration/productive_usage.md

One paragraph that points to the upgrade guidance for embedded apps.

Checks

These ran locally and passed: test, docs:build, check:examples, check:conventions, check:line-length, check:vocabulary, check:playground and check:api-names. The rest of the gates were not run locally; CI covers them.


Generated by Claude Code

…e-level authorization example

fiori.md gets a "Running it in production" section: who may start which
class (node vs. class, startup parameters are user input), what an upgrade
does to embedded sections and how to test or freeze it, and what several
containers on one page cost (stateless drafts, requests per page, the
monitor, no stateful sessions in a section).

authorization.md: the service-level example refused on
get_form_field( `app_start` ), which is only on the URL of the first page
request - POSTs carry the class in the body, later roundtrips and
nav_app_call( ) carry none, so the handler broke every roundtrip or checked
nothing. The handler now gates the node; which app may run is the app's,
and startup parameters get a section of their own.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01T3yR8gBhBYzXdEND7gLSqx
@oblomov-dev
oblomov-dev merged commit e79bb7d into main Oct 20, 2026
1 check failed
@oblomov-dev
oblomov-dev deleted the claude/quirky-keller-0vmwwd branch October 20, 2026 13:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants