From b4a89b33ac62fc0e19ff4a70499b5a1e3afce7c1 Mon Sep 17 00:00:00 2001 From: Johannes Gluch Date: Mon, 3 Aug 2026 13:52:24 +0200 Subject: [PATCH 01/11] docs(tutorials): fix broken SDK doc links in navigation README The "Downloading Code for a Tutorial Step" and "Get Started" links used the non-hash SDK URL form (/topic/...), which returns 404. The SDK uses hash routing, so point both at the working /#/topic/... form (consistent with the adjacent /#/entity/... link in the same section). --- packages/navigation/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/navigation/README.md b/packages/navigation/README.md index 6a8646500..a1cbbbbcc 100644 --- a/packages/navigation/README.md +++ b/packages/navigation/README.md @@ -32,7 +32,7 @@ Throughout this tutorial we will add features for navigating to pages and bookma > > You can view and download the files for all steps in the Demo Kit at [Navigation and Routing](https://sdk.openui5.org/#/entity/sap.ui.core.tutorial.navigation). Copy the code to your workspace and make sure that the application runs by calling the `webapp/index.html` file. Depending on your development environment you might have to adjust resource paths and configuration entries. > -> For more information check the [Downloading Code for a Tutorial Step](https://sdk.openui5.org/topic/8b49fc198bf04b2d9800fc37fecbb218.html#loio8b49fc198bf04b2d9800fc37fecbb218/tutorials_download) section of the tutorials overview page [Get Started: Setup, Tutorials, and Demo Apps](https://sdk.openui5.org/topic/8b49fc198bf04b2d9800fc37fecbb218). +> For more information check the [Downloading Code for a Tutorial Step](https://sdk.openui5.org/#/topic/8b49fc198bf04b2d9800fc37fecbb218) section of the tutorials overview page [Get Started: Setup, Tutorials, and Demo Apps](https://sdk.openui5.org/#/topic/8b49fc198bf04b2d9800fc37fecbb218). *** From c95f0e691482090dcead26250f1bcd107d2e9da6 Mon Sep 17 00:00:00 2001 From: Johannes Gluch Date: Mon, 3 Aug 2026 14:10:45 +0200 Subject: [PATCH 02/11] docs(navigation): align step 02 Component.ts snippet with source The TS snippet omitted `interfaces: ["sap.ui.core.IAsyncContentCreation"]`, which the real webapp/Component.ts and the adjacent JS snippet both contain. Add the line so the shown code matches the actual step file. --- packages/navigation/steps/02/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/navigation/steps/02/README.md b/packages/navigation/steps/02/README.md index d7bba447d..04bb5fb73 100644 --- a/packages/navigation/steps/02/README.md +++ b/packages/navigation/steps/02/README.md @@ -124,6 +124,7 @@ import UIComponent from "sap/ui/core/UIComponent"; export default class Component extends UIComponent { public static metadata = { + interfaces: ["sap.ui.core.IAsyncContentCreation"], manifest: "json" }; From 2c10c445128ba846f082b85e901b6274a9d44144 Mon Sep 17 00:00:00 2001 From: Johannes Gluch Date: Mon, 3 Aug 2026 14:23:51 +0200 Subject: [PATCH 03/11] docs(navigation): fix step 11 filter snippet to match source MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The TS snippet used leftover Hungarian notation (`aFilters`/`oFilter`) while declaring `const filters` — inconsistent and non-compiling as shown. Align it with the real EmployeeOverviewContent.controller.ts (`filters`/`filter`) and correct the `sortDescending` JSDoc type to `{string | boolean}`. --- packages/navigation/steps/11/README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/navigation/steps/11/README.md b/packages/navigation/steps/11/README.md index ad275e703..1c2f03e29 100644 --- a/packages/navigation/steps/11/README.md +++ b/packages/navigation/steps/11/README.md @@ -386,20 +386,20 @@ export default class EmployeeOverviewContent extends BaseController { if (searchQuery?.length > 0) { const filters: Filter[] = []; - aFilters.push(new Filter("FirstName", FilterOperator.Contains, searchQuery)); - aFilters.push(new Filter("LastName", FilterOperator.Contains, searchQuery)); - oFilter = new Filter({ filters: aFilters, and: false }); // OR filter + filters.push(new Filter("FirstName", FilterOperator.Contains, searchQuery)); + filters.push(new Filter("LastName", FilterOperator.Contains, searchQuery)); + filter = new Filter({ filters: filters, and: false }); // OR filter } // update list binding const binding = ( this.table.getBinding("items")); - binding.filter(oFilter, "Application"); + binding.filter(filter, "Application"); } /** * Applies sorting on our table control. * @param {string} fieldName the name of the field used for sorting - * @param {string} sortDescending true or false as a string or boolean value to specify a descending sorting + * @param {string | boolean} sortDescending true or false as a string or boolean value to specify a descending sorting * @private */ private _applySorter(fieldName: string, sortDescending: string | boolean): void { From f2c3217b11d852f1a201db64ee9d2592c22fd652 Mon Sep 17 00:00:00 2001 From: Johannes Gluch Date: Mon, 3 Aug 2026 14:24:44 +0200 Subject: [PATCH 04/11] docs(navigation): fix step 14 path-comment convention The heading and the ts/js fence path-comments used `/controller/.../EmployeeOverviewContent.controller.ts` (leading slash, no `webapp/` prefix), diverging from every other step. Align with the repo convention `webapp/controller/.../EmployeeOverviewContent.controller.ts/.js`. --- packages/navigation/steps/14/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/navigation/steps/14/README.md b/packages/navigation/steps/14/README.md index 8426b8fdf..d38ceb905 100644 --- a/packages/navigation/steps/14/README.md +++ b/packages/navigation/steps/14/README.md @@ -14,10 +14,10 @@ You can view this step live: [🔗 Live Preview of Step 14](https://ui5.github.i You can download the solution for this step here: [📥 Download step 14](https://ui5.github.io/tutorials/navigation/navigation-step-14.zip) (TS)[📥 Download step 14](https://ui5.github.io/tutorials/navigation/navigation-step-14-js.zip) (JS). -## /controller/employee/overview/EmployeeOverviewContent.controller.ts +## `webapp/controller/employee/overview/EmployeeOverviewContent.controller.ts/.js` ```ts -// /controller/employee/overview/EmployeeOverviewContent.controller.ts +// webapp/controller/employee/overview/EmployeeOverviewContent.controller.ts import SearchField, { SearchField$SearchEvent } from "sap/m/SearchField"; import Table from "sap/m/Table"; import ViewSettingsDialog, { ViewSettingsDialog$ConfirmEvent, ViewSettingsDialog$CancelEvent } from "sap/m/ViewSettingsDialog"; @@ -83,7 +83,7 @@ export default class EmployeeOverviewContent extends BaseController { ``` ```js -// /controller/employee/overview/EmployeeOverviewContent.controller.js +// webapp/controller/employee/overview/EmployeeOverviewContent.controller.js sap.ui.define(["sap/m/ViewSettingsDialog", "sap/m/ViewSettingsItem", "ui5/tutorial/navigation/controller/BaseController", "sap/ui/model/Filter", "sap/ui/model/FilterOperator", "sap/ui/model/Sorter"], function (ViewSettingsDialog, ViewSettingsItem, BaseController, Filter, FilterOperator, Sorter) { "use strict"; From a8d8b6de0a27c784337cf812cd761ca79fd23bc3 Mon Sep 17 00:00:00 2001 From: Johannes Gluch Date: Mon, 3 Aug 2026 14:37:36 +0200 Subject: [PATCH 05/11] docs(navigation): remove stray comment in step 08 initMockServer.ts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The comment `// initialize the mock server` appears only in step 08 — steps 07 and 09-17 carry the same file without it. The comment merely restates the following `mockserver.init()` call and adds no value. Remove it so all step versions of initMockServer.ts are identical. --- packages/navigation/steps/08/webapp/initMockServer.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/navigation/steps/08/webapp/initMockServer.ts b/packages/navigation/steps/08/webapp/initMockServer.ts index ab3be0548..66e2bfadd 100644 --- a/packages/navigation/steps/08/webapp/initMockServer.ts +++ b/packages/navigation/steps/08/webapp/initMockServer.ts @@ -1,7 +1,6 @@ import mockserver from "ui5/tutorial/navigation/localService/mockserver"; import MessageBox from "sap/m/MessageBox"; -// initialize the mock server mockserver.init().catch((error: Error) => { MessageBox.error(error.message); }).finally(() => { From dc39038956ebca48f44583d0fda9d15ba1eba7e8 Mon Sep 17 00:00:00 2001 From: Johannes Gluch Date: Mon, 3 Aug 2026 15:43:31 +0200 Subject: [PATCH 06/11] fix(navigation): correct employeeOverview route to plural in steps 12-17 The employeeOverview route pattern was `employee/overview` (singular) from step 12 onward, but step 11 and every README example use `employees/overview` (plural, matching the sibling `employees` list route). This broke every bookmarkable-URL example the tutorial gives in steps 12-14 (e.g. `#/employees/overview?search=an` returned Not Found). Align all six manifests to the plural pattern the docs describe. Verified: the search deep-link now restores the filtered overview. --- packages/navigation/steps/12/webapp/manifest.json | 2 +- packages/navigation/steps/13/webapp/manifest.json | 2 +- packages/navigation/steps/14/webapp/manifest.json | 2 +- packages/navigation/steps/15/webapp/manifest.json | 2 +- packages/navigation/steps/16/webapp/manifest.json | 2 +- packages/navigation/steps/17/webapp/manifest.json | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/navigation/steps/12/webapp/manifest.json b/packages/navigation/steps/12/webapp/manifest.json index 587251842..b35eb389f 100644 --- a/packages/navigation/steps/12/webapp/manifest.json +++ b/packages/navigation/steps/12/webapp/manifest.json @@ -95,7 +95,7 @@ "target": "employees" }, { - "pattern": "employee/overview:?query:", + "pattern": "employees/overview:?query:", "name": "employeeOverview", "target": [ "EmployeeOverviewTop", diff --git a/packages/navigation/steps/13/webapp/manifest.json b/packages/navigation/steps/13/webapp/manifest.json index 587251842..b35eb389f 100644 --- a/packages/navigation/steps/13/webapp/manifest.json +++ b/packages/navigation/steps/13/webapp/manifest.json @@ -95,7 +95,7 @@ "target": "employees" }, { - "pattern": "employee/overview:?query:", + "pattern": "employees/overview:?query:", "name": "employeeOverview", "target": [ "EmployeeOverviewTop", diff --git a/packages/navigation/steps/14/webapp/manifest.json b/packages/navigation/steps/14/webapp/manifest.json index 587251842..b35eb389f 100644 --- a/packages/navigation/steps/14/webapp/manifest.json +++ b/packages/navigation/steps/14/webapp/manifest.json @@ -95,7 +95,7 @@ "target": "employees" }, { - "pattern": "employee/overview:?query:", + "pattern": "employees/overview:?query:", "name": "employeeOverview", "target": [ "EmployeeOverviewTop", diff --git a/packages/navigation/steps/15/webapp/manifest.json b/packages/navigation/steps/15/webapp/manifest.json index 587251842..b35eb389f 100644 --- a/packages/navigation/steps/15/webapp/manifest.json +++ b/packages/navigation/steps/15/webapp/manifest.json @@ -95,7 +95,7 @@ "target": "employees" }, { - "pattern": "employee/overview:?query:", + "pattern": "employees/overview:?query:", "name": "employeeOverview", "target": [ "EmployeeOverviewTop", diff --git a/packages/navigation/steps/16/webapp/manifest.json b/packages/navigation/steps/16/webapp/manifest.json index 587251842..b35eb389f 100644 --- a/packages/navigation/steps/16/webapp/manifest.json +++ b/packages/navigation/steps/16/webapp/manifest.json @@ -95,7 +95,7 @@ "target": "employees" }, { - "pattern": "employee/overview:?query:", + "pattern": "employees/overview:?query:", "name": "employeeOverview", "target": [ "EmployeeOverviewTop", diff --git a/packages/navigation/steps/17/webapp/manifest.json b/packages/navigation/steps/17/webapp/manifest.json index 587251842..b35eb389f 100644 --- a/packages/navigation/steps/17/webapp/manifest.json +++ b/packages/navigation/steps/17/webapp/manifest.json @@ -95,7 +95,7 @@ "target": "employees" }, { - "pattern": "employee/overview:?query:", + "pattern": "employees/overview:?query:", "name": "employeeOverview", "target": [ "EmployeeOverviewTop", From 94d4428fbfc106485087c6ce093f26e0137b0a61 Mon Sep 17 00:00:00 2001 From: Johannes Gluch Date: Mon, 3 Aug 2026 16:31:16 +0200 Subject: [PATCH 07/11] fix(navigation): use evergreen CDN path for OpenUI5 1.148 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace the pinned version `1.148.1` with the patch-less `1.148` path in all 17 step index-cdn.html files. The patch-less URL always resolves to the latest patch of 1.148, so the tutorial stays current without manual version bumps. minUI5Version in manifest.json already uses the patch-less form — this aligns the CDN URL to match. --- packages/navigation/steps/01/webapp/index-cdn.html | 2 +- packages/navigation/steps/02/webapp/index-cdn.html | 2 +- packages/navigation/steps/03/webapp/index-cdn.html | 2 +- packages/navigation/steps/04/webapp/index-cdn.html | 2 +- packages/navigation/steps/05/webapp/index-cdn.html | 2 +- packages/navigation/steps/06/webapp/index-cdn.html | 2 +- packages/navigation/steps/07/webapp/index-cdn.html | 2 +- packages/navigation/steps/08/webapp/index-cdn.html | 2 +- packages/navigation/steps/09/webapp/index-cdn.html | 2 +- packages/navigation/steps/10/webapp/index-cdn.html | 2 +- packages/navigation/steps/11/webapp/index-cdn.html | 2 +- packages/navigation/steps/12/webapp/index-cdn.html | 2 +- packages/navigation/steps/13/webapp/index-cdn.html | 2 +- packages/navigation/steps/14/webapp/index-cdn.html | 2 +- packages/navigation/steps/15/webapp/index-cdn.html | 2 +- packages/navigation/steps/16/webapp/index-cdn.html | 2 +- packages/navigation/steps/17/webapp/index-cdn.html | 2 +- 17 files changed, 17 insertions(+), 17 deletions(-) diff --git a/packages/navigation/steps/01/webapp/index-cdn.html b/packages/navigation/steps/01/webapp/index-cdn.html index f012c70af..13ff8d777 100644 --- a/packages/navigation/steps/01/webapp/index-cdn.html +++ b/packages/navigation/steps/01/webapp/index-cdn.html @@ -5,7 +5,7 @@ Navigation and Routing Tutorial