config-management
Keeps the theme, UI5 bootstrap source, custom CSS and Content-Security-Policy of an 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 page in database tables instead of in code, with a popup app to edit them.
The settings of an abap2UI5 page usually live in code, so changing the theme or the UI5 bootstrap source means editing the HTTP handler or the user exit. config-management keeps THEME, APP_TITLE, UI5_SRC, DEBUG_MODE, STYLES_CSS and CSP_POLICY in the tables Z2UI5_CONFIG and Z2UI5_THEMES, reads them through z2ui5_cl_config_service with an in-memory cache, and ships the popup app z2ui5_cl_app_icf_config to edit them; UI5_SRC and CSP_POLICY are system-wide and only a master user holding the authorization object Z2UI5_CONF may change them. It does not hook itself into the framework: the README asks the user to implement z2ui5_if_ui5_exit in a class of their own and apply the stored values in set_config_http_get, and a field with nothing stored keeps the abap2UI5 default. It installs with abapGitabapGitA Git client written in ABAP that runs inside the system, so objects are cloned, pulled and pushed without leaving it; with no package manager in ABAP, a cloned repository is how code is distributed.community org, abap next to 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 1.145.0 or later and is written for Standard ABAP 7.50.
Facts
Where it sits
Who is behind it
In the atlas: maintains 21@abap2UI5-addonsmaintainerKarthikeyan RavikumarContributes to this
In the atlas: contributes to 2@kartefactoblomov-devContributes to this
In the atlas: maintains 4, contributes to 44@oblomov-dev2 contributors
Before choosing this
Conditions
PracticalFunctional boundary
APP_TITLE is not applied by the exit: the title field was removed from z2ui5_if_ui5_exit=>ty_s_http_config in abap2UI5 1.145.0, so an app that wants it as its browser tab title sets it while it runs. The live theme preview runs the frontend action THEMING / setTheme and needs UI5 1.118 or later; on an older release a saved theme applies with the next page load. The code is written for ABAP 7.50 and the README states there is no downported 7.02 version, no 702 branch and no workflow that builds one.
What it declares
Every artifact
- Type
- App
- Origin
- By a community org
As an app
- Where it runs
- does not say
- Distributed through
- abapGit
Connections
Per-environment settings without per-environment code
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-addons/config-management under MIT, readconfig-management
Store the settings of the abap2UI5 page in database tables instead of in code. Theme, UI5 bootstrap source, custom CSS and Content-Security-Policy are kept in tables and edited in a popup app; a user exit of your own applies them to every page abap2UI5 serves. For abap2UI5 administrators who want to change those settings at runtime without touching the HTTP handler.
Part of abap2UI5-addons - addons and apps for abap2UI5, installed with abapGit.
Why
The settings of the abap2UI5 page usually live in code. Changing the theme or the UI5 source then means changing the HTTP handler or the user exit. config-management moves them to the database:
- Eliminates need to modify HTTP handler code for configuration changes
- Enables per-user customization (themes, custom CSS, etc.)
- Provides secure admin-only controls for system-level settings
- Maintains framework performance through intelligent caching
- Supports UI5 theme compatibility validation
This enhancement significantly improves the flexibility and maintainability of abap2UI5 installations by moving configuration from code to database, while maintaining full backward compatibility.
Installation
Requirements
- Standard ABAP 7.50 or higher - the code is written for ABAP 7.50 and is syntax-checked at that release on every pull request. There is no downported 7.02 version: no 702 branch, and no workflow that builds one.
- abap2UI5 1.145.0 or later
Steps - with abapGit, in this order:
- abap2UI5
- this repository (branch
main) next to abap2UI5 - the HTTP handler stays as it is - Connect the user exit. abap2UI5 reads the settings of its page from its
user exit,
z2ui5_if_ui5_exit. Implement the interface in a class of your own - abap2UI5 finds the class by the interface, there is nothing to register - and let it apply the stored configuration:
CLASS zcl_my_abap2ui5_exit DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
INTERFACES z2ui5_if_ui5_exit.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS zcl_my_abap2ui5_exit IMPLEMENTATION.
METHOD z2ui5_if_ui5_exit~set_config_http_get.
" cs_config arrives filled with the abap2UI5 defaults - a value is only
" replaced when one is stored, so an empty entry keeps the default
DATA(lv_theme) = z2ui5_cl_config_service=>get_current_theme( ).
IF lv_theme IS NOT INITIAL.
cs_config-theme = lv_theme.
ENDIF.
DATA(lv_src) = z2ui5_cl_config_service=>get_config( `UI5_SRC` ).
IF lv_src IS NOT INITIAL.
cs_config-src = lv_src.
ENDIF.
DATA(lv_styles_css) = z2ui5_cl_config_service=>get_config( `STYLES_CSS` ).
IF lv_styles_css IS NOT INITIAL.
cs_config-styles_css = lv_styles_css.
ENDIF.
" the complete <meta http-equiv="Content-Security-Policy" ...> tag
DATA(lv_csp) = z2ui5_cl_config_service=>get_config( `CSP_POLICY` ).
IF lv_csp IS NOT INITIAL.
cs_config-content_security_policy = lv_csp.
ENDIF.
ENDMETHOD.
METHOD z2ui5_if_ui5_exit~set_config_http_post.
ENDMETHOD.
ENDCLASS.
- abap2UI5 calls one exit only. If your system already has a class implementing
z2ui5_if_ui5_exit, add the lines above to that class instead. set_config_http_getruns for every response, not only for the page request - the response headers come from it too.z2ui5_cl_config_servicecaches the configuration, so that costs one table read per request.- The fields of
z2ui5_if_ui5_exit=>ty_s_http_configaresrc,theme,content_security_policy,styles_css,t_add_configandt_security_header. Thetitlefield is gone (removed in abap2UI5 1.145.0, the page carries a constant<title>), soAPP_TITLEis not applied by the exit. An app that wants it as its browser tab title sets it while it runs:
client->follow_up_action( val = client->cs_event-set_title
t_arg = VALUE #( ( z2ui5_cl_config_service=>get_config( `APP_TITLE` ) ) ) ).
Start - open the configuration app like any abap2UI5 app -
?app_start=z2ui5_cl_app_icf_config on your abap2UI5 ICF path, or its class
name on the abap2UI5 start page. It fills the configuration tables with their
defaults on its first start.
Usage
Configurable parameters
- THEME: UI5 theme with version-specific compatibility
- APP_TITLE: Application title - stored for apps to set as tab title, the exit has no title field (see Installation)
- UI5_SRC: UI5 bootstrap source URL (admin-only, one value for all users)
- DEBUG_MODE: Debug mode toggle
- STYLES_CSS: Custom CSS injection
- CSP_POLICY: Content Security Policy (admin-only, one value for all users) - the complete
<meta http-equiv="Content-Security-Policy" ...>tag
Components
Core Configuration Service
- z2ui5_cl_config_service: Central service for managing application configurations
- User-specific and global configuration support
- In-memory caching for performance
- Authority-based access control (master user vs regular user)
- Automatic fallback to framework defaults
Configuration App
- z2ui5_cl_app_icf_config: The configuration popup
- Theme selection from the themes of the running UI5 release (
Z2UI5_THEMES) - Real-time theme preview with global application, reverted on Cancel
- Form-based editing for all configurable parameters
- Role-based field visibility (admin-only fields)
- Automatic initialization of default configurations
- Theme selection from the themes of the running UI5 release (
User Exit
- your
z2ui5_if_ui5_exitclass (see Installation): Applies the stored configuration to every page abap2UI5 serves- Replaces hard-coded values with dynamic database lookups
- Keeps the abap2UI5 default wherever nothing is stored
Database Objects
- Z2UI5_CONFIG: Main configuration table with user/global scope support
- Z2UI5_THEMES: UI5 theme compatibility matrix by version
- Z2UI5_CONF: Message class for configuration-related messages
- Z2UI5_CX_CONFIG_ERROR: Exception class for configuration errors
Security & Authorization
- Z2UI5_CONF: Authorization object with the fields ACTVT and CONFIG_TYP
- Master user concept for sensitive configurations (UI5_SRC, CSP_POLICY)
- Configuration locking mechanism for system-critical settings
Technical Implementation
- ABAP 7.50: the code uses 7.40 syntax (inline declarations,
NEW,COND,VALUE) and abaplint checks it atv750(abaplint.jsonc) - Efficient caching strategy to minimize database calls
- Theme preview through the whitelisted frontend action
THEMING/setTheme(client->cs_event-control_global) - abap2UI5 no longer runs raw JavaScript such assap.ui.getCore().applyTheme(). It needs UI5 1.118 or later; on an older release the saved theme applies with the next page load - Released abap2UI5 API (
src/02) only: views built withz2ui5_cl_ui5_view_builder, no frozensrc/99classes such asz2ui5_cl_xml_vieworz2ui5_cl_pop_to_select - Transaction-safe with COMMIT WORK AND WAIT and rollback on errors
Development
npm ci
npm run check
npm run check runs what CI runs: abaplint at v750 (abap-standard.yaml).
Contributing
Issues and pull requests are welcome - see CONTRIBUTING.md.
License
MIT - see LICENSE.
Others providing
Compare all 10 on the Configuration page →- abaKabaKA beta library for ABAP constants that lets each program register its own source, a custom table or CSV, XML or JSON content from a URL, standard text, server file or remote system, rather than one shared table.independent, abapLibrary for managing ABAP constants from registered sourcesfrom ABAP
- aqoaqoA library for defining ABAP application options as a structure or class, with change history, transport integration and a maintenance UI generated from that description, instead of SM30 tables or STVARV.independent, abapABAP application options as a structure with a generated editorfrom ABAP
- com.sap.cds:cds-feature-cloudfoundrycom.sap.cds:cds-feature-cloudfoundryA CAP Java feature that reads the environment variables of SAP BTP, Cloud Foundry at start-up and resolves bound service credentials from them, so the other features find their bindings.sap official, capReads bound service credentials on SAP BTP, Cloud Foundry for CAP Javafrom CAP
- com.sap.cds:cds-feature-k8scom.sap.cds:cds-feature-k8sA CAP Java feature that reads the service bindings the SAP BTP Operator writes on Kyma runtime at start-up, replacing the removed cds.environment.k8s property.sap official, capReads SAP BTP Operator service bindings on Kyma for CAP Javafrom CAP
- com.sap.cds:cds-services-bomcom.sap.cds:cds-services-bomThe Maven bill of materials for CAP Java, pinning every com.sap.cds module in a release, from the API and core runtime to the Spring Boot starters and the CQN engine, to the same version.sap official, capMaven bill of materials pinning CAP Java module versionsfrom CAP
- abap-dynamic-assignmentabap-dynamic-assignmentA framework for maintaining runtime parameters, ranges and value mappings in ABAP instead of hard-coded values or TVARVC, checked against data elements and maintained in a RAP Fiori app.independent, abapFramework for runtime parameters, ranges and value mappings in ABAPfrom ABAP
- abap-gencustabap-gencustA generic customizing table pair and reader class for ad hoc configuration parameters in ABAP, replacing a new table, view and access routine per parameter, with values per user or key date.independent, abapGeneric customizing table and reader for ad hoc ABAP parametersfrom ABAP
- abap-tvarvcabap-tvarvcA helper class for reading TVARVC parameters and select-options from ABAP, with one method for a single parameter and two for select-options, raising zcx_core_tvarvc when a read fails.independent, abapHelper class for reading TVARVC parameters and select-optionsfrom ABAP
- @sap/cds@sap/cdsThe CAP Node.js runtime, which compiles the CDS model, serves the services declared in it, answers generic requests before any handler runs, and loads every cds-plugin.sap official, capCAP Node.js runtimefrom CAP
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
abaplint
Flavors
“Standard ABAP 7.50 or higher” — abap2UI5-addons/config-management — README
Contributors
History in the atlas
- First seen.
For your agent
- Ref
artifact:abap2ui5-addons-config-management- JSON
- /artifacts/abap2ui5-addons-config-management.json
- MCP
- Connecting an agent