Skip to content

Commit 469dd33

Browse files
committed
feat(ui5-modernization): Expand migration skills with deprecation guide content
- Expand core-api-replacements.md with full Core facade, Configuration API, and non-auto-fixable jQuery.sap entries - Expand fix-deprecated-controls with 35+ control entries across sap.m, sap.f, sap.ui.table, sap.ui.unified, sap.ui.layout, sap.ui.comp, sap.ui.mdc, plus VariantManagement and Deprecated Core Classes - Create fix-fiori-elements-extensions skill for registerControllerExtensions migration - Update fix-manifest-json with 5 additional deprecated libraries, manifest v2 strictness notes - Update fix-bootstrap-params with 3 deprecated themes and 5 libraries - Add IAsyncContentCreation vs manifest v2 clarification to fix-component-async - Add fix-fiori-elements-extensions to modernize-ui5 orchestrator
1 parent 35de6ca commit 469dd33

10 files changed

Lines changed: 948 additions & 290 deletions

File tree

plugins/ui5-modernization/skills/fix-bootstrap-params/SKILL.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,9 @@ Replace with modern theme:
103103
- `sap_belize_hcb``sap_horizon_hcb`
104104
- `sap_belize_hcw``sap_horizon_hcw`
105105
- `sap_hcb``sap_horizon_hcb`
106+
- `sap_ux``sap_horizon`
107+
- `sap_platinum``sap_horizon`
108+
- `sap_goldreflection``sap_horizon`
106109

107110
#### `no-deprecated-library` - Deprecated Libraries
108111

@@ -112,6 +115,11 @@ Remove deprecated libraries from `data-sap-ui-libs`:
112115
- `sap.makit`
113116
- `sap.me`
114117
- `sap.ca.ui`
118+
- `sap.sac.grid`
119+
- `sap.ui.suite`
120+
- `sap.zen.commons`
121+
- `sap.zen.crosstab`
122+
- `sap.zen.dsh`
115123

116124
## Implementation Steps
117125

plugins/ui5-modernization/skills/fix-component-async/SKILL.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,7 @@ sap.ui.define([
228228
- The interface makes `async: true` flags redundant - they can be safely removed
229229
- Components that extend UIComponent (not just Component) can use IAsyncContentCreation
230230
- If the component inherits from a custom base component that already implements IAsyncContentCreation, no changes are needed
231+
- **`IAsyncContentCreation` vs manifest v2**: These are independent concerns. Updating manifest `_version` to `"2.0.0"` does NOT automatically enable async content creation — `IAsyncContentCreation` must still be explicitly implemented in Component.js. Conversely, adding `IAsyncContentCreation` does not require manifest v2.
231232

232233
## Related Skills
233234

plugins/ui5-modernization/skills/fix-deprecated-controls/SKILL.md

Lines changed: 73 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,6 @@ sap.ui.define([
9494
|------------------|-------------|
9595
| `sap.ui.commons.*` | `sap.m.*` equivalents |
9696
| `sap.ui.ux3.*` | `sap.m.*` or `sap.f.*` |
97-
| `sap.m.DateTimeInput` | `sap.m.DatePicker` + `sap.m.TimePicker` |
9897
| `sap.ui.commons.TextField` | `sap.m.Input` |
9998
| `sap.ui.commons.Button` | `sap.m.Button` |
10099
| `sap.ui.commons.Label` | `sap.m.Label` |
@@ -104,6 +103,69 @@ sap.ui.define([
104103
| `sap.m.MessagePage` | `sap.m.IllustratedMessage` (see section 8) |
105104
| `sap.viz.ui5.controls.VizFrame` (old) | Check `sap.viz` documentation |
106105

106+
**sap.m Deprecated Controls:**
107+
108+
| Deprecated Class | Replacement | Notes |
109+
|---|---|---|
110+
| `sap.m.UploadCollection` | `sap.m.upload.UploadSet` or `sap.m.plugins.UploadSetwithTable` | UploadSetwithTable for table-based layouts |
111+
| `sap.m.TablePersoDialog` | `sap.m.p13n.*` | Use p13n personalization framework |
112+
| `sap.m.TablePersoController` | `sap.m.p13n.*` | Use p13n personalization framework |
113+
| `sap.m.TablePersoProvider` | `sap.m.p13n.*` | Use p13n personalization framework |
114+
| `sap.m.P13nDialog` | `sap.m.p13n.Popup` | Use p13n framework |
115+
| `sap.m.P13nColumnsPanel` | `sap.m.p13n.SelectionPanel` | Use p13n framework |
116+
| `sap.m.P13nSortPanel` | `sap.m.p13n.SortPanel` | Use p13n framework |
117+
| `sap.m.P13nGroupPanel` | `sap.m.p13n.GroupPanel` | Use p13n framework |
118+
| `sap.m.P13nFilterPanel` | `sap.m.p13n.FilterPanel` | Use p13n framework |
119+
| `sap.m.DateTimeInput` | `sap.m.DatePicker` + `sap.m.TimePicker` | Split into separate controls |
120+
| `sap.m.MultiEditField` || No direct replacement, custom implementation required |
121+
| `sap.m.RouteMatchedHandler` | `sap.m.routing.RouteMatchedHandler` | Use the routing module |
122+
123+
**sap.f Deprecated Controls:**
124+
125+
| Deprecated Class | Replacement | Notes |
126+
|---|---|---|
127+
| `sap.f.Avatar` | `sap.m.Avatar` | Moved to sap.m |
128+
| `sap.f.IllustratedMessage` | `sap.m.IllustratedMessage` | Moved to sap.m |
129+
| `sap.f.Illustration` | `sap.m.Illustration` | Moved to sap.m |
130+
131+
**sap.ui.table Deprecated Controls:**
132+
133+
| Deprecated Class | Replacement | Notes |
134+
|---|---|---|
135+
| `sap.ui.table.ColumnMenu` | `sap.m.table.columnmenu.Menu` | New column menu framework |
136+
| `sap.ui.table.AnalyticalColumnMenu` | `sap.m.table.columnmenu.Menu` | New column menu framework |
137+
| `sap.ui.table.TablePersoController` | `sap.m.p13n.*` | Use p13n personalization framework |
138+
139+
**sap.ui.unified Deprecated Controls:**
140+
141+
| Deprecated Class | Replacement | Notes |
142+
|---|---|---|
143+
| `sap.ui.unified.Shell` || No replacement — redesign using `sap.f.ShellBar` or `sap.tnt.ToolPage` |
144+
| `sap.ui.unified.ShellOverlay` || No replacement |
145+
| `sap.ui.unified.ShellLayout` || No replacement |
146+
| `sap.ui.unified.SplitContainer` | `sap.m.SplitContainer` or `sap.f.FlexibleColumnLayout` | Use responsive layout |
147+
| `sap.ui.unified.ContentSwitcher` || No replacement — use `NavContainer` or custom logic |
148+
149+
**sap.ui.layout Deprecated Controls:**
150+
151+
| Deprecated Class | Replacement | Notes |
152+
|---|---|---|
153+
| `sap.ui.layout.form.GridLayout` | `sap.ui.layout.form.ColumnLayout` or `sap.ui.layout.form.ResponsiveGridLayout` | GridLayout was removed |
154+
155+
**sap.ui.comp Deprecated Controls:**
156+
157+
| Deprecated Class | Replacement | Notes |
158+
|---|---|---|
159+
| `sap.ui.comp.variants.VariantManagement` | `sap.m.VariantManagement` | See section 9 for property mapping |
160+
161+
**sap.ui.mdc Deprecated/Changed APIs:**
162+
163+
| Deprecated | Replacement | Notes |
164+
|---|---|---|
165+
| `sap.ui.mdc.enum.*` enums | `sap.ui.mdc.enums.*` | Namespace renamed (enum → enums) |
166+
| `sap.ui.mdc.FilterBar` old API | `sap.ui.mdc.FilterBar` refactored | Check API for changed properties |
167+
| `sap.ui.mdc.Link` FLP integration | Decoupled from FLP | Check new API for direct usage |
168+
107169
### 2. Deprecated Property in Constructor
108170

109171
**Problem**: Using a deprecated property when creating a control.
@@ -269,76 +331,21 @@ metadata: {
269331

270332
### 8. sap.m.MessagePage → sap.m.IllustratedMessage
271333

272-
**Problem**: `sap.m.MessagePage` is deprecated in favor of `sap.m.IllustratedMessage`.
334+
`sap.m.MessagePage` is deprecated in favor of `sap.m.IllustratedMessage`. Key changes: `text`+`description` → single `description`, `icon``illustrationType` enum, `showNavButton`/`navButtonPress``Button` in `additionalContent` aggregation.
273335

274-
**Property and Aggregation Mapping:**
336+
For the full property mapping table, XML/JS examples, and illustration type list, read `references/control-migration-details.md`.
275337

276-
| Old `MessagePage` | New `IllustratedMessage` | Rule |
277-
|---|---|---|
278-
| `title` | `title` | Direct transfer |
279-
| `text` and `description` | `description` | Combine with `\n` separator, or use single value if only one present |
280-
| `icon` | `illustrationType` | Semantic mapping: use `sap.m.IllustratedMessageType` enum (e.g., `"sapIllus-PageNotFound"`, `"sapIllus-NoData"`, `"sapIllus-UnableToLoad"`) |
281-
| `titleLevel` | (none) | Remove — no equivalent |
282-
| `showNavButton` / `navButtonPress` | `additionalContent` | Create `sap.m.Button` in `additionalContent` aggregation with the handler |
283-
| `buttons`, `customText`, `customDescription` | `additionalContent` | Move all child controls into `additionalContent` |
338+
### 9. sap.ui.comp.variants.VariantManagement → sap.m.VariantManagement
284339

285-
**XML View Example:**
340+
Key changes: `variantItems``items`, `VariantItem.text``.title`, `showExecuteOnSelection``supportApplyAutomatically`, `showShare``supportPublic`. The standard variant must be explicitly created with `rename="false"` and `remove="false"`.
286341

287-
```xml
288-
<!-- Before -->
289-
<MessagePage
290-
title="{i18n>notFoundTitle}"
291-
text="{i18n>notFoundText}"
292-
description="{i18n>notFoundDescription}"
293-
icon="sap-icon://error"
294-
showNavButton="true"
295-
navButtonPress=".onNavBack" />
296-
297-
<!-- After -->
298-
<IllustratedMessage
299-
title="{i18n>notFoundTitle}"
300-
description="{i18n>notFoundText} {i18n>notFoundDescription}"
301-
illustrationType="sapIllus-PageNotFound">
302-
<additionalContent>
303-
<Button text="{i18n>backButtonText}" press=".onNavBack" />
304-
</additionalContent>
305-
</IllustratedMessage>
306-
```
342+
For the full property mapping table and standard variant XML example, read `references/control-migration-details.md`.
307343

308-
**JavaScript Example:**
344+
### 10. Deprecated Core Classes
309345

310-
```javascript
311-
// Before
312-
sap.ui.define(["sap/m/MessagePage"], function(MessagePage) {
313-
var oPage = new MessagePage({
314-
title: "Error",
315-
text: "Page not found",
316-
icon: "sap-icon://error",
317-
showNavButton: true,
318-
navButtonPress: this.onNavBack.bind(this)
319-
});
320-
});
321-
322-
// After
323-
sap.ui.define([
324-
"sap/m/IllustratedMessage",
325-
"sap/m/Button",
326-
"sap/m/library"
327-
], function(IllustratedMessage, Button, mobileLibrary) {
328-
var IllustratedMessageType = mobileLibrary.IllustratedMessageType;
329-
var oMessage = new IllustratedMessage({
330-
title: "Error",
331-
description: "Page not found",
332-
illustrationType: IllustratedMessageType.PageNotFound
333-
});
334-
oMessage.addAdditionalContent(new Button({
335-
text: "Back",
336-
press: this.onNavBack.bind(this)
337-
}));
338-
});
339-
```
346+
Key replacements: `MessageManager``sap/ui/core/Messaging`, `Export*``sap/ui/export/Spreadsheet`, `LocalBusyIndicator``Control.setBusy(true)`. `SearchProvider`, `OpenSearchProvider`, and `ScrollBar` have no replacement.
340347

341-
**Common illustration types**: `NoData`, `NoEntries`, `PageNotFound`, `UnableToLoad`, `NoSearchResults`. Check `sap.m.IllustratedMessageType` API reference for full list.
348+
For the full table and MessageManager→Messaging code example, read `references/control-migration-details.md`.
342349

343350
## Implementation Steps
344351

@@ -434,6 +441,8 @@ sap.ui.define([
434441
- When replacing deprecated libraries (sap.ui.commons, sap.ui.ux3), the replacement controls may have different APIs
435442
- Property replacements may have inverted logic (e.g., `blocked: true``enabled: false`)
436443
- Consider using `npx @ui5/linter --details` to get direct links to migration documentation
444+
- `sap.f.IllustratedMessage` and `sap.f.Illustration` are deprecated in favor of `sap.m.IllustratedMessage` and `sap.m.Illustration` — this is a simple namespace move with the same API
445+
- When migrating `sap.ui.comp.variants.VariantManagement`, the standard variant must be explicitly created (see section 9)
437446

438447
## Related Skills
439448

Lines changed: 163 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
# Control Migration Details
2+
3+
Detailed migration guides for specific deprecated controls that require property/aggregation mapping or structural changes.
4+
5+
## Table of Contents
6+
7+
1. [MessagePage to IllustratedMessage](#1-sapmessagepage--sapmillustratedmessage)
8+
2. [VariantManagement Migration](#2-sapuicompvariantsvariantmanagement--sapmvariantmanagement)
9+
3. [Deprecated Core Classes](#3-deprecated-core-classes)
10+
11+
---
12+
13+
## 1. sap.m.MessagePage → sap.m.IllustratedMessage
14+
15+
**Property and Aggregation Mapping:**
16+
17+
| Old `MessagePage` | New `IllustratedMessage` | Rule |
18+
|---|---|---|
19+
| `title` | `title` | Direct transfer |
20+
| `text` and `description` | `description` | Combine with `\n` separator, or use single value if only one present |
21+
| `icon` | `illustrationType` | Semantic mapping: use `sap.m.IllustratedMessageType` enum (e.g., `"sapIllus-PageNotFound"`, `"sapIllus-NoData"`, `"sapIllus-UnableToLoad"`) |
22+
| `titleLevel` | (none) | Remove — no equivalent |
23+
| `showNavButton` / `navButtonPress` | `additionalContent` | Create `sap.m.Button` in `additionalContent` aggregation with the handler |
24+
| `buttons`, `customText`, `customDescription` | `additionalContent` | Move all child controls into `additionalContent` |
25+
26+
**XML View Example:**
27+
28+
```xml
29+
<!-- Before -->
30+
<MessagePage
31+
title="{i18n>notFoundTitle}"
32+
text="{i18n>notFoundText}"
33+
description="{i18n>notFoundDescription}"
34+
icon="sap-icon://error"
35+
showNavButton="true"
36+
navButtonPress=".onNavBack" />
37+
38+
<!-- After -->
39+
<IllustratedMessage
40+
title="{i18n>notFoundTitle}"
41+
description="{i18n>notFoundText} {i18n>notFoundDescription}"
42+
illustrationType="sapIllus-PageNotFound">
43+
<additionalContent>
44+
<Button text="{i18n>backButtonText}" press=".onNavBack" />
45+
</additionalContent>
46+
</IllustratedMessage>
47+
```
48+
49+
**JavaScript Example:**
50+
51+
```javascript
52+
// Before
53+
sap.ui.define(["sap/m/MessagePage"], function(MessagePage) {
54+
var oPage = new MessagePage({
55+
title: "Error",
56+
text: "Page not found",
57+
icon: "sap-icon://error",
58+
showNavButton: true,
59+
navButtonPress: this.onNavBack.bind(this)
60+
});
61+
});
62+
63+
// After
64+
sap.ui.define([
65+
"sap/m/IllustratedMessage",
66+
"sap/m/Button",
67+
"sap/m/library"
68+
], function(IllustratedMessage, Button, mobileLibrary) {
69+
var IllustratedMessageType = mobileLibrary.IllustratedMessageType;
70+
var oMessage = new IllustratedMessage({
71+
title: "Error",
72+
description: "Page not found",
73+
illustrationType: IllustratedMessageType.PageNotFound
74+
});
75+
oMessage.addAdditionalContent(new Button({
76+
text: "Back",
77+
press: this.onNavBack.bind(this)
78+
}));
79+
});
80+
```
81+
82+
**Common illustration types**: `NoData`, `NoEntries`, `PageNotFound`, `UnableToLoad`, `NoSearchResults`. Check `sap.m.IllustratedMessageType` API reference for full list.
83+
84+
---
85+
86+
## 2. sap.ui.comp.variants.VariantManagement → sap.m.VariantManagement
87+
88+
**Property and Aggregation Mapping:**
89+
90+
| Old (`sap.ui.comp.variants.VariantManagement`) | New (`sap.m.VariantManagement`) | Notes |
91+
|---|---|---|
92+
| `variantItems` (aggregation) | `items` (aggregation) | Rename aggregation |
93+
| `VariantItem.text` | `VariantItem.title` | Property renamed |
94+
| `showExecuteOnSelection` | `supportApplyAutomatically` | Property renamed |
95+
| `showShare` | `supportPublic` | Property renamed |
96+
| `showSetAsDefault` | `supportDefault` | Property renamed |
97+
| `showFavorites` | `supportFavorites` | Property renamed |
98+
| `lifecycleTransportInfo` || Removed |
99+
| `lifecyclePackage` || Removed |
100+
| `industrySolutionMode` || Removed |
101+
| `vendorLayer` || Removed |
102+
103+
**Standard Variant Handling:**
104+
105+
The old control auto-created a "Standard" variant. In `sap.m.VariantManagement`, you must explicitly create the standard variant:
106+
107+
```xml
108+
<!-- After -->
109+
<vm:VariantManagement id="vm1"
110+
titleStyle="H4"
111+
selectedKey="Standard"
112+
defaultKey="Standard">
113+
<vm:items>
114+
<vm:VariantItem key="Standard"
115+
title="{i18n>STANDARD}"
116+
rename="false"
117+
remove="false" />
118+
</vm:items>
119+
</vm:VariantManagement>
120+
```
121+
122+
**Key differences:**
123+
- Must set `titleStyle="H4"` for proper heading level
124+
- Must set `selectedKey` and `defaultKey` explicitly
125+
- Standard variant must have `rename="false"` and `remove="false"`
126+
- Standard variant should be the first item (position 0)
127+
128+
---
129+
130+
## 3. Deprecated Core Classes
131+
132+
These deprecated classes should be replaced with their modular equivalents:
133+
134+
| Deprecated Class | Replacement Module | Replacement | Notes |
135+
|---|---|---|---|
136+
| `sap.ui.core.message.MessageManager` | `sap/ui/core/Messaging` | `Messaging` module directly | Use `Messaging.registerObject()`, `Messaging.getMessageModel()` |
137+
| `sap.ui.core.search.SearchProvider` || No replacement | Removed in UI5 2.x |
138+
| `sap.ui.core.search.OpenSearchProvider` || No replacement | Removed in UI5 2.x |
139+
| `sap.ui.core.LocalBusyIndicator` | `sap/ui/core/Control` | `Control.setBusy(true)` | Use control's built-in busy indicator |
140+
| `sap.ui.core.ScrollBar` || No replacement | Use CSS `overflow: auto` or `sap.m.ScrollContainer` |
141+
| `sap.ui.core.util.Export` / `ExportCell` / `ExportColumn` / `ExportRow` / `ExportType` / `ExportTypeCSV` | `sap/ui/export/Spreadsheet` | `new Spreadsheet(settings)` | Async API, returns Promise |
142+
| `sap.ui.core.format.DateFormatTimezoneDisplay` (enum) || `DateFormat.getDateTimeWithTimezoneInstance()` options | Use `showDate`, `showTime`, `showTimezone` options instead of enum |
143+
144+
**MessageManager → Messaging Example:**
145+
146+
```javascript
147+
// Before
148+
sap.ui.define([
149+
"sap/ui/core/message/MessageManager"
150+
], function(MessageManager) {
151+
var oMessageManager = sap.ui.getCore().getMessageManager();
152+
oMessageManager.registerObject(oView, true);
153+
var oMessageModel = oMessageManager.getMessageModel();
154+
});
155+
156+
// After
157+
sap.ui.define([
158+
"sap/ui/core/Messaging"
159+
], function(Messaging) {
160+
Messaging.registerObject(oView, true);
161+
var oMessageModel = Messaging.getMessageModel();
162+
});
163+
```

0 commit comments

Comments
 (0)