From 46d7b86dd98438ae241a041839a064da1c01c896 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 24 Apr 2026 15:31:07 +0000 Subject: [PATCH 1/6] Modernize app2 manifest.json - Switch sap.app.i18n to object form with supportedLocales/fallbackLocale - Remove empty dataSources placeholder - Remove unused default JSON model and data.json - Add sap.fiori section (archeType transactional) - Enable handleValidation - Drop redundant async flags (implied by IAsyncContentCreation) https://claude.ai/code/session_01A68Lz4NQgu355krGCPNnD8 --- app2/webapp/manifest.json | 24 ++++++++++++------------ app2/webapp/model/data.json | 6 ------ 2 files changed, 12 insertions(+), 18 deletions(-) delete mode 100644 app2/webapp/model/data.json diff --git a/app2/webapp/manifest.json b/app2/webapp/manifest.json index 1ff538e..1c11ab3 100644 --- a/app2/webapp/manifest.json +++ b/app2/webapp/manifest.json @@ -3,13 +3,16 @@ "sap.app": { "id": "app2", "type": "application", - "i18n": "i18n/i18n.properties", + "i18n": { + "bundleUrl": "i18n/i18n.properties", + "supportedLocales": [""], + "fallbackLocale": "" + }, "title": "{{appTitle}}", "description": "{{appDescription}}", "applicationVersion": { "version": "0.0.1" - }, - "dataSources": {} + } }, "sap.ui": { "technology": "UI5", @@ -19,11 +22,15 @@ "phone": true } }, + "sap.fiori": { + "registrationIds": [], + "archeType": "transactional" + }, "sap.ui5": { + "handleValidation": true, "rootView": { "viewName": "app2.view.App", "type": "XML", - "async": true, "id": "app" }, "dependencies": { @@ -48,12 +55,6 @@ "supportedLocales": [""], "fallbackLocale": "" } - }, - "": { - "type": "sap.ui.model.json.JSONModel", - "settings": {}, - "uri": "model/data.json", - "preload": true } }, "routing": { @@ -63,8 +64,7 @@ "viewType": "XML", "path": "app2.view", "controlId": "app", - "controlAggregation": "pages", - "async": true + "controlAggregation": "pages" }, "routes": [ { diff --git a/app2/webapp/model/data.json b/app2/webapp/model/data.json deleted file mode 100644 index 3e41960..0000000 --- a/app2/webapp/model/data.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "app": { - "name": "app2", - "version": "0.0.1" - } -} From f216cc386d82f32e69c6895e6315830ddcfe9e8e Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 24 Apr 2026 15:34:09 +0000 Subject: [PATCH 2/6] Rename app2 folder to app-v2 Folder and project-level names (package.json, ui5.yaml metadata.name) are updated. The internal UI5 namespace stays "app2" because the sap.app.id schema does not allow hyphens. https://claude.ai/code/session_01A68Lz4NQgu355krGCPNnD8 --- {app2 => app-v2}/.editorconfig | 0 {app2 => app-v2}/.gitignore | 0 {app2 => app-v2}/eslint.config.mjs | 0 {app2 => app-v2}/package.json | 2 +- {app2 => app-v2}/ui5.yaml | 2 +- {app2 => app-v2}/webapp/Component.js | 0 {app2 => app-v2}/webapp/controller/App.controller.js | 0 {app2 => app-v2}/webapp/controller/Main.controller.js | 0 {app2 => app-v2}/webapp/css/style.css | 0 {app2 => app-v2}/webapp/i18n/i18n.properties | 0 {app2 => app-v2}/webapp/index.html | 0 {app2 => app-v2}/webapp/index.js | 0 {app2 => app-v2}/webapp/manifest.json | 0 {app2 => app-v2}/webapp/model/models.js | 0 {app2 => app-v2}/webapp/view/App.view.xml | 0 {app2 => app-v2}/webapp/view/Main.view.xml | 0 16 files changed, 2 insertions(+), 2 deletions(-) rename {app2 => app-v2}/.editorconfig (100%) rename {app2 => app-v2}/.gitignore (100%) rename {app2 => app-v2}/eslint.config.mjs (100%) rename {app2 => app-v2}/package.json (95%) rename {app2 => app-v2}/ui5.yaml (92%) rename {app2 => app-v2}/webapp/Component.js (100%) rename {app2 => app-v2}/webapp/controller/App.controller.js (100%) rename {app2 => app-v2}/webapp/controller/Main.controller.js (100%) rename {app2 => app-v2}/webapp/css/style.css (100%) rename {app2 => app-v2}/webapp/i18n/i18n.properties (100%) rename {app2 => app-v2}/webapp/index.html (100%) rename {app2 => app-v2}/webapp/index.js (100%) rename {app2 => app-v2}/webapp/manifest.json (100%) rename {app2 => app-v2}/webapp/model/models.js (100%) rename {app2 => app-v2}/webapp/view/App.view.xml (100%) rename {app2 => app-v2}/webapp/view/Main.view.xml (100%) diff --git a/app2/.editorconfig b/app-v2/.editorconfig similarity index 100% rename from app2/.editorconfig rename to app-v2/.editorconfig diff --git a/app2/.gitignore b/app-v2/.gitignore similarity index 100% rename from app2/.gitignore rename to app-v2/.gitignore diff --git a/app2/eslint.config.mjs b/app-v2/eslint.config.mjs similarity index 100% rename from app2/eslint.config.mjs rename to app-v2/eslint.config.mjs diff --git a/app2/package.json b/app-v2/package.json similarity index 95% rename from app2/package.json rename to app-v2/package.json index 7f162a2..9e6b0f4 100644 --- a/app2/package.json +++ b/app-v2/package.json @@ -1,5 +1,5 @@ { - "name": "app2", + "name": "app-v2", "version": "0.0.1", "description": "Modern UI5 2.x application (legacy-free)", "private": true, diff --git a/app2/ui5.yaml b/app-v2/ui5.yaml similarity index 92% rename from app2/ui5.yaml rename to app-v2/ui5.yaml index a0d09ed..b4d1383 100644 --- a/app2/ui5.yaml +++ b/app-v2/ui5.yaml @@ -1,6 +1,6 @@ specVersion: "4.0" metadata: - name: app2 + name: app-v2 type: application framework: name: OpenUI5 diff --git a/app2/webapp/Component.js b/app-v2/webapp/Component.js similarity index 100% rename from app2/webapp/Component.js rename to app-v2/webapp/Component.js diff --git a/app2/webapp/controller/App.controller.js b/app-v2/webapp/controller/App.controller.js similarity index 100% rename from app2/webapp/controller/App.controller.js rename to app-v2/webapp/controller/App.controller.js diff --git a/app2/webapp/controller/Main.controller.js b/app-v2/webapp/controller/Main.controller.js similarity index 100% rename from app2/webapp/controller/Main.controller.js rename to app-v2/webapp/controller/Main.controller.js diff --git a/app2/webapp/css/style.css b/app-v2/webapp/css/style.css similarity index 100% rename from app2/webapp/css/style.css rename to app-v2/webapp/css/style.css diff --git a/app2/webapp/i18n/i18n.properties b/app-v2/webapp/i18n/i18n.properties similarity index 100% rename from app2/webapp/i18n/i18n.properties rename to app-v2/webapp/i18n/i18n.properties diff --git a/app2/webapp/index.html b/app-v2/webapp/index.html similarity index 100% rename from app2/webapp/index.html rename to app-v2/webapp/index.html diff --git a/app2/webapp/index.js b/app-v2/webapp/index.js similarity index 100% rename from app2/webapp/index.js rename to app-v2/webapp/index.js diff --git a/app2/webapp/manifest.json b/app-v2/webapp/manifest.json similarity index 100% rename from app2/webapp/manifest.json rename to app-v2/webapp/manifest.json diff --git a/app2/webapp/model/models.js b/app-v2/webapp/model/models.js similarity index 100% rename from app2/webapp/model/models.js rename to app-v2/webapp/model/models.js diff --git a/app2/webapp/view/App.view.xml b/app-v2/webapp/view/App.view.xml similarity index 100% rename from app2/webapp/view/App.view.xml rename to app-v2/webapp/view/App.view.xml diff --git a/app2/webapp/view/Main.view.xml b/app-v2/webapp/view/Main.view.xml similarity index 100% rename from app2/webapp/view/Main.view.xml rename to app-v2/webapp/view/Main.view.xml From b2ab487b17170a104c82e45ca7145822ea15472a Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 24 Apr 2026 15:35:23 +0000 Subject: [PATCH 3/6] Rename app-v2 to ui5_v2 (full namespace rename) Renames the folder, project names and the UI5 namespace used in sap.app.id, resource-roots, module paths, controller/view names and the i18n bundle. https://claude.ai/code/session_01A68Lz4NQgu355krGCPNnD8 --- {app-v2 => ui5_v2}/.editorconfig | 0 {app-v2 => ui5_v2}/.gitignore | 0 {app-v2 => ui5_v2}/eslint.config.mjs | 0 {app-v2 => ui5_v2}/package.json | 2 +- {app-v2 => ui5_v2}/ui5.yaml | 2 +- {app-v2 => ui5_v2}/webapp/Component.js | 4 ++-- {app-v2 => ui5_v2}/webapp/controller/App.controller.js | 2 +- {app-v2 => ui5_v2}/webapp/controller/Main.controller.js | 2 +- {app-v2 => ui5_v2}/webapp/css/style.css | 0 {app-v2 => ui5_v2}/webapp/i18n/i18n.properties | 6 +++--- {app-v2 => ui5_v2}/webapp/index.html | 6 +++--- {app-v2 => ui5_v2}/webapp/index.js | 4 ++-- {app-v2 => ui5_v2}/webapp/manifest.json | 8 ++++---- {app-v2 => ui5_v2}/webapp/model/models.js | 0 {app-v2 => ui5_v2}/webapp/view/App.view.xml | 2 +- {app-v2 => ui5_v2}/webapp/view/Main.view.xml | 2 +- 16 files changed, 20 insertions(+), 20 deletions(-) rename {app-v2 => ui5_v2}/.editorconfig (100%) rename {app-v2 => ui5_v2}/.gitignore (100%) rename {app-v2 => ui5_v2}/eslint.config.mjs (100%) rename {app-v2 => ui5_v2}/package.json (95%) rename {app-v2 => ui5_v2}/ui5.yaml (92%) rename {app-v2 => ui5_v2}/webapp/Component.js (83%) rename {app-v2 => ui5_v2}/webapp/controller/App.controller.js (67%) rename {app-v2 => ui5_v2}/webapp/controller/Main.controller.js (84%) rename {app-v2 => ui5_v2}/webapp/css/style.css (100%) rename {app-v2 => ui5_v2}/webapp/i18n/i18n.properties (85%) rename {app-v2 => ui5_v2}/webapp/index.html (79%) rename {app-v2 => ui5_v2}/webapp/index.js (82%) rename {app-v2 => ui5_v2}/webapp/manifest.json (92%) rename {app-v2 => ui5_v2}/webapp/model/models.js (100%) rename {app-v2 => ui5_v2}/webapp/view/App.view.xml (80%) rename {app-v2 => ui5_v2}/webapp/view/Main.view.xml (96%) diff --git a/app-v2/.editorconfig b/ui5_v2/.editorconfig similarity index 100% rename from app-v2/.editorconfig rename to ui5_v2/.editorconfig diff --git a/app-v2/.gitignore b/ui5_v2/.gitignore similarity index 100% rename from app-v2/.gitignore rename to ui5_v2/.gitignore diff --git a/app-v2/eslint.config.mjs b/ui5_v2/eslint.config.mjs similarity index 100% rename from app-v2/eslint.config.mjs rename to ui5_v2/eslint.config.mjs diff --git a/app-v2/package.json b/ui5_v2/package.json similarity index 95% rename from app-v2/package.json rename to ui5_v2/package.json index 9e6b0f4..8a90024 100644 --- a/app-v2/package.json +++ b/ui5_v2/package.json @@ -1,5 +1,5 @@ { - "name": "app-v2", + "name": "ui5_v2", "version": "0.0.1", "description": "Modern UI5 2.x application (legacy-free)", "private": true, diff --git a/app-v2/ui5.yaml b/ui5_v2/ui5.yaml similarity index 92% rename from app-v2/ui5.yaml rename to ui5_v2/ui5.yaml index b4d1383..dfd7d78 100644 --- a/app-v2/ui5.yaml +++ b/ui5_v2/ui5.yaml @@ -1,6 +1,6 @@ specVersion: "4.0" metadata: - name: app-v2 + name: ui5_v2 type: application framework: name: OpenUI5 diff --git a/app-v2/webapp/Component.js b/ui5_v2/webapp/Component.js similarity index 83% rename from app-v2/webapp/Component.js rename to ui5_v2/webapp/Component.js index e114172..e0fedd7 100644 --- a/app-v2/webapp/Component.js +++ b/ui5_v2/webapp/Component.js @@ -1,11 +1,11 @@ sap.ui.define([ "sap/ui/core/UIComponent", "sap/ui/Device", - "app2/model/models", + "ui5_v2/model/models", ], (UIComponent, Device, models) => { "use strict"; - return UIComponent.extend("app2.Component", { + return UIComponent.extend("ui5_v2.Component", { metadata: { manifest: "json", interfaces: ["sap.ui.core.IAsyncContentCreation"], diff --git a/app-v2/webapp/controller/App.controller.js b/ui5_v2/webapp/controller/App.controller.js similarity index 67% rename from app-v2/webapp/controller/App.controller.js rename to ui5_v2/webapp/controller/App.controller.js index 95508bf..34d8efe 100644 --- a/app-v2/webapp/controller/App.controller.js +++ b/ui5_v2/webapp/controller/App.controller.js @@ -3,7 +3,7 @@ sap.ui.define([ ], (Controller) => { "use strict"; - return Controller.extend("app2.controller.App", { + return Controller.extend("ui5_v2.controller.App", { onInit() { }, }); diff --git a/app-v2/webapp/controller/Main.controller.js b/ui5_v2/webapp/controller/Main.controller.js similarity index 84% rename from app-v2/webapp/controller/Main.controller.js rename to ui5_v2/webapp/controller/Main.controller.js index aa6009e..0390135 100644 --- a/app-v2/webapp/controller/Main.controller.js +++ b/ui5_v2/webapp/controller/Main.controller.js @@ -4,7 +4,7 @@ sap.ui.define([ ], (Controller, MessageToast) => { "use strict"; - return Controller.extend("app2.controller.Main", { + return Controller.extend("ui5_v2.controller.Main", { onInit() { }, diff --git a/app-v2/webapp/css/style.css b/ui5_v2/webapp/css/style.css similarity index 100% rename from app-v2/webapp/css/style.css rename to ui5_v2/webapp/css/style.css diff --git a/app-v2/webapp/i18n/i18n.properties b/ui5_v2/webapp/i18n/i18n.properties similarity index 85% rename from app-v2/webapp/i18n/i18n.properties rename to ui5_v2/webapp/i18n/i18n.properties index 15bc8c2..20179f7 100644 --- a/app-v2/webapp/i18n/i18n.properties +++ b/ui5_v2/webapp/i18n/i18n.properties @@ -1,9 +1,9 @@ # Application Descriptors -appTitle=App2 +appTitle=UI5 v2 appDescription=Modern UI5 2.x application built with legacy-free standards # Main View -welcomeTitle=Welcome to App2 +welcomeTitle=Welcome to UI5 v2 welcomeText=This application is built on OpenUI5 2.x using the latest legacy-free standards: asynchronous content creation, Horizon theme, manifest-first routing, and ES module style definitions. # Device Info @@ -14,4 +14,4 @@ devicePhone=Running on phone # Actions sayHelloButton=Say Hello -helloMessage=Hello from App2 ✨ +helloMessage=Hello from UI5 v2 ✨ diff --git a/app-v2/webapp/index.html b/ui5_v2/webapp/index.html similarity index 79% rename from app-v2/webapp/index.html rename to ui5_v2/webapp/index.html index cbf88a4..398804c 100644 --- a/app-v2/webapp/index.html +++ b/ui5_v2/webapp/index.html @@ -4,14 +4,14 @@ - App2 + UI5 v2 diff --git a/app-v2/webapp/index.js b/ui5_v2/webapp/index.js similarity index 82% rename from app-v2/webapp/index.js rename to ui5_v2/webapp/index.js index 911aa62..9eb942d 100644 --- a/app-v2/webapp/index.js +++ b/ui5_v2/webapp/index.js @@ -4,8 +4,8 @@ sap.ui.define([ "use strict"; new ComponentContainer({ - id: "app2Container", - name: "app2", + id: "ui5_v2Container", + name: "ui5_v2", async: true, manifest: true, height: "100%", diff --git a/app-v2/webapp/manifest.json b/ui5_v2/webapp/manifest.json similarity index 92% rename from app-v2/webapp/manifest.json rename to ui5_v2/webapp/manifest.json index 1c11ab3..e0a7e66 100644 --- a/app-v2/webapp/manifest.json +++ b/ui5_v2/webapp/manifest.json @@ -1,7 +1,7 @@ { "_version": "1.65.0", "sap.app": { - "id": "app2", + "id": "ui5_v2", "type": "application", "i18n": { "bundleUrl": "i18n/i18n.properties", @@ -29,7 +29,7 @@ "sap.ui5": { "handleValidation": true, "rootView": { - "viewName": "app2.view.App", + "viewName": "ui5_v2.view.App", "type": "XML", "id": "app" }, @@ -51,7 +51,7 @@ "i18n": { "type": "sap.ui.model.resource.ResourceModel", "settings": { - "bundleName": "app2.i18n.i18n", + "bundleName": "ui5_v2.i18n.i18n", "supportedLocales": [""], "fallbackLocale": "" } @@ -62,7 +62,7 @@ "routerClass": "sap.m.routing.Router", "type": "View", "viewType": "XML", - "path": "app2.view", + "path": "ui5_v2.view", "controlId": "app", "controlAggregation": "pages" }, diff --git a/app-v2/webapp/model/models.js b/ui5_v2/webapp/model/models.js similarity index 100% rename from app-v2/webapp/model/models.js rename to ui5_v2/webapp/model/models.js diff --git a/app-v2/webapp/view/App.view.xml b/ui5_v2/webapp/view/App.view.xml similarity index 80% rename from app-v2/webapp/view/App.view.xml rename to ui5_v2/webapp/view/App.view.xml index ed73fcc..083982d 100644 --- a/app-v2/webapp/view/App.view.xml +++ b/ui5_v2/webapp/view/App.view.xml @@ -1,5 +1,5 @@ diff --git a/app-v2/webapp/view/Main.view.xml b/ui5_v2/webapp/view/Main.view.xml similarity index 96% rename from app-v2/webapp/view/Main.view.xml rename to ui5_v2/webapp/view/Main.view.xml index f9b4416..bbdadc3 100644 --- a/app-v2/webapp/view/Main.view.xml +++ b/ui5_v2/webapp/view/Main.view.xml @@ -1,5 +1,5 @@ From bc984872f13c14fa56588937d6549a178168f176 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 24 Apr 2026 15:36:01 +0000 Subject: [PATCH 4/6] Wire UI5 linter into ui5_v2 npm scripts Add lint:ui5 (ui5lint) and lint:eslint scripts and make the top-level lint task run both. The @ui5/linter dependency was already declared. https://claude.ai/code/session_01A68Lz4NQgu355krGCPNnD8 --- ui5_v2/package.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ui5_v2/package.json b/ui5_v2/package.json index 8a90024..5611c60 100644 --- a/ui5_v2/package.json +++ b/ui5_v2/package.json @@ -6,7 +6,9 @@ "scripts": { "start": "ui5 serve --open index.html", "build": "ui5 build --clean-dest", - "lint": "eslint webapp" + "lint": "npm run lint:eslint && npm run lint:ui5", + "lint:eslint": "eslint webapp", + "lint:ui5": "ui5lint" }, "devDependencies": { "@eslint/js": "^9.17.0", From 3f66ed7667736a2487365e8d289520c3d2e3a2bb Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 24 Apr 2026 15:37:26 +0000 Subject: [PATCH 5/6] Add GitHub Action that lints ui5_v2 on every PR Runs ESLint and @ui5/linter on pull_request events. Also allows manual triggering via workflow_dispatch. https://claude.ai/code/session_01A68Lz4NQgu355krGCPNnD8 --- .github/workflows/lint-ui5_v2.yml | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 .github/workflows/lint-ui5_v2.yml diff --git a/.github/workflows/lint-ui5_v2.yml b/.github/workflows/lint-ui5_v2.yml new file mode 100644 index 0000000..ec2428c --- /dev/null +++ b/.github/workflows/lint-ui5_v2.yml @@ -0,0 +1,29 @@ +name: Lint ui5_v2 + +on: + pull_request: + workflow_dispatch: + +jobs: + lint: + runs-on: ubuntu-latest + defaults: + run: + working-directory: ui5_v2 + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: "20" + + - name: Install dependencies + run: npm install --no-audit --no-fund + + - name: Run ESLint + run: npm run lint:eslint + + - name: Run UI5 linter + run: npm run lint:ui5 From 632bdacc9724fa14665d416878ae09d2bf7dc39b Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 24 Apr 2026 15:41:20 +0000 Subject: [PATCH 6/6] Remove obsolete 1.x bootstrap flags from ui5_v2 index.html data-sap-ui-async and data-sap-ui-compat-version have no effect in OpenUI5 2.x (async is the only mode and the compatibility layer is gone), so they are dropped. https://claude.ai/code/session_01A68Lz4NQgu355krGCPNnD8 --- ui5_v2/webapp/index.html | 2 -- 1 file changed, 2 deletions(-) diff --git a/ui5_v2/webapp/index.html b/ui5_v2/webapp/index.html index 398804c..980cfdd 100644 --- a/ui5_v2/webapp/index.html +++ b/ui5_v2/webapp/index.html @@ -12,8 +12,6 @@ data-sap-ui-theme="sap_horizon" data-sap-ui-resource-roots='{"ui5_v2": "./"}' data-sap-ui-on-init="module:ui5_v2/index" - data-sap-ui-async="true" - data-sap-ui-compat-version="edge" >