@sapui5/sap.ushell_abap 1.152.1 → 1.154.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/main/js/sap/ushell_abap/.library +1 -1
- package/src/main/js/sap/ushell_abap/adapters/abap/AppStateAdapter.js +53 -63
- package/src/main/js/sap/ushell_abap/adapters/abap/ClientSideTargetResolutionAdapter.js +1 -1
- package/src/main/js/sap/ushell_abap/adapters/abap/CommonDataModelAdapter.js +1 -1
- package/src/main/js/sap/ushell_abap/adapters/abap/ConfigurationDefaultsAdapter.js +1 -1
- package/src/main/js/sap/ushell_abap/adapters/abap/ContainerAdapter.js +1 -1
- package/src/main/js/sap/ushell_abap/adapters/abap/FlpLaunchPageAdapter.js +62 -4
- package/src/main/js/sap/ushell_abap/adapters/abap/LaunchPageAdapter.js +1 -1
- package/src/main/js/sap/ushell_abap/adapters/abap/NavTargetResolutionAdapter.js +1 -1
- package/src/main/js/sap/ushell_abap/adapters/abap/NavTargetResolutionInternalAdapter.js +1 -1
- package/src/main/js/sap/ushell_abap/adapters/abap/PageBuildingAdapter.js +1 -1
- package/src/main/js/sap/ushell_abap/adapters/abap/PagePersistenceAdapter.js +8 -8
- package/src/main/js/sap/ushell_abap/adapters/abap/PersonalizationAdapter.js +1 -1
- package/src/main/js/sap/ushell_abap/adapters/abap/PersonalizationV2Adapter.js +1 -1
- package/src/main/js/sap/ushell_abap/adapters/abap/SearchAdapter.js +1 -1
- package/src/main/js/sap/ushell_abap/adapters/abap/SupportTicketAdapter.js +1 -1
- package/src/main/js/sap/ushell_abap/adapters/abap/Ui5ComponentLoaderAdapter.js +1 -1
- package/src/main/js/sap/ushell_abap/adapters/abap/UserInfoAdapter.js +11 -11
- package/src/main/js/sap/ushell_abap/adapters/abap/VisualizationInstantiationAdapter.js +76 -0
- package/src/main/js/sap/ushell_abap/adapters/hana/ContainerAdapter.js +1 -1
- package/src/main/js/sap/ushell_abap/adapters/local/ClientSideTargetResolutionAdapter.js +123 -0
- package/src/main/js/sap/ushell_abap/adapters/local/FlpLaunchPageAdapter.js +115 -0
- package/src/main/js/sap/ushell_abap/adapters/local/MenuAdapter.js +92 -0
- package/src/main/js/sap/ushell_abap/adapters/local/PageBuildingAdapter.js +242 -0
- package/src/main/js/sap/ushell_abap/adapters/local/PagePersistenceAdapter.js +308 -0
- package/src/main/js/sap/ushell_abap/api/S4MyHome.js +58 -0
- package/src/main/js/sap/ushell_abap/bootstrap/DirectAppStart.js +28 -15
- package/src/main/js/sap/ushell_abap/bootstrap/LoadLaunchpad/CreateRenderer.js +4 -2
- package/src/main/js/sap/ushell_abap/bootstrap/LoadLaunchpad/RequestPages.js +2 -6
- package/src/main/js/sap/ushell_abap/bootstrap/PlatformConfig.js +5 -5
- package/src/main/js/sap/ushell_abap/bootstrap/XhrLogonEventHandler.js +6 -7
- package/src/main/js/sap/ushell_abap/bootstrap/abapConstants.js +30 -0
- package/src/main/js/sap/ushell_abap/components/SideNavigation/modules/Favorites.js +549 -0
- package/src/main/js/sap/ushell_abap/components/SideNavigation/modules/GenericNavigationListProvider.js +241 -0
- package/src/main/js/sap/ushell_abap/components/cards/Card.controller.js +117 -0
- package/src/main/js/sap/ushell_abap/components/cards/Card.view.xml +11 -0
- package/src/main/js/sap/ushell_abap/components/cards/Configuration.controller.js +280 -0
- package/src/main/js/sap/ushell_abap/components/cards/Configuration.view.xml +27 -0
- package/src/main/js/sap/ushell_abap/components/cards/ManifestPropertyHelper.js +298 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/Component.js +90 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/TransactionCode.controller.js +110 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/TransactionCode.view.xml +16 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n.properties +17 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_ar.properties +10 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_bg.properties +10 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_ca.properties +10 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_cnr.properties +10 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_cs.properties +10 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_cy.properties +10 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_da.properties +10 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_de.properties +10 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_el.properties +10 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_en.properties +10 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_en_GB.properties +10 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_en_US_sappsd.properties +10 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_en_US_saprigi.properties +10 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_en_US_saptrc.properties +10 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_es.properties +10 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_es_MX.properties +10 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_et.properties +10 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_fi.properties +10 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_fr.properties +10 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_fr_CA.properties +10 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_hi.properties +10 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_hr.properties +10 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_hu.properties +10 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_id.properties +10 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_it.properties +10 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_iw.properties +10 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_ja.properties +10 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_kk.properties +10 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_ko.properties +10 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_lt.properties +10 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_lv.properties +10 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_mk.properties +10 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_ms.properties +10 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_nl.properties +10 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_no.properties +10 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_pl.properties +10 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_pt.properties +10 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_pt_PT.properties +10 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_ro.properties +10 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_ru.properties +10 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_sh.properties +10 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_sk.properties +10 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_sl.properties +10 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_sr.properties +10 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_sv.properties +10 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_th.properties +10 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_tr.properties +10 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_uk.properties +10 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_vi.properties +10 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_zh_CN.properties +10 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_zh_TW.properties +10 -0
- package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/manifest.json +96 -0
- package/src/main/js/sap/ushell_abap/components/tiles/action/ActionTile.controller.js +189 -0
- package/src/main/js/sap/ushell_abap/components/tiles/action/ActionTile.view.xml +13 -0
- package/src/main/js/sap/ushell_abap/components/tiles/action/Configuration.controller.js +193 -0
- package/src/main/js/sap/ushell_abap/components/tiles/action/Configuration.view.xml +333 -0
- package/src/main/js/sap/ushell_abap/components/tiles/applauncher/Component.js +41 -0
- package/src/main/js/sap/ushell_abap/components/tiles/applauncher/Configuration.controller.js +114 -0
- package/src/main/js/sap/ushell_abap/components/tiles/applauncher/Configuration.view.xml +208 -0
- package/src/main/js/sap/ushell_abap/components/tiles/applauncher/StaticTile.controller.js +497 -0
- package/src/main/js/sap/ushell_abap/components/tiles/applauncher/StaticTile.view.js +61 -0
- package/src/main/js/sap/ushell_abap/components/tiles/applauncherdynamic/Component.js +45 -0
- package/src/main/js/sap/ushell_abap/components/tiles/applauncherdynamic/Configuration.controller.js +113 -0
- package/src/main/js/sap/ushell_abap/components/tiles/applauncherdynamic/Configuration.view.xml +231 -0
- package/src/main/js/sap/ushell_abap/components/tiles/applauncherdynamic/DynamicTile.controller.js +729 -0
- package/src/main/js/sap/ushell_abap/components/tiles/applauncherdynamic/DynamicTile.view.js +106 -0
- package/src/main/js/sap/ushell_abap/library.js +12 -1
- package/src/main/js/sap/ushell_abap/messagebundle.properties +6 -2
- package/src/main/js/sap/ushell_abap/pbServices/ui2/Chip.js +7 -3
- package/src/main/js/sap/ushell_abap/pbServices/ui2/ODataWrapper.js +3 -5
- package/src/main/js/sap/ushell_abap/pbServices/ui2/contracts/configuration.js +54 -4
- package/src/main/js/sap/ushell_abap/services/NavigationDataProvider.js +4 -4
- package/src/main/js/sap/ushell_abap/ui/VisualizationInstantiation/ChipInstanceWrapper.js +248 -0
- package/src/main/js/sap/ushell_abap/ui/VisualizationInstantiation/VizInstanceAbap.js +134 -0
- package/src/main/js/sap/ushell_abap/ui/VisualizationInstantiation/VizInstanceAbapLink.js +145 -0
- package/src/main/js/sap/ushell_abap/utils/UserPersonalization.js +127 -0
- package/ui5.yaml +21 -3
|
@@ -0,0 +1,497 @@
|
|
|
1
|
+
// Copyright (c) 2009-2026 SAP SE, All Rights Reserved
|
|
2
|
+
|
|
3
|
+
sap.ui.define([
|
|
4
|
+
"sap/ui/core/mvc/Controller",
|
|
5
|
+
"sap/ushell_abap/utils/UserPersonalization",
|
|
6
|
+
"sap/ushell/components/tiles/utils",
|
|
7
|
+
"sap/ushell/Config",
|
|
8
|
+
"sap/ushell/utils/WindowUtils",
|
|
9
|
+
"sap/m/library",
|
|
10
|
+
"sap/ushell/library",
|
|
11
|
+
"sap/ui/model/json/JSONModel",
|
|
12
|
+
"sap/base/Log",
|
|
13
|
+
"sap/ushell/base/UrlParsing",
|
|
14
|
+
"sap/ushell/EventHub",
|
|
15
|
+
"sap/ushell/Container",
|
|
16
|
+
"sap/ushell/utils/LaunchpadError"
|
|
17
|
+
], (
|
|
18
|
+
Controller,
|
|
19
|
+
UserPersonalization,
|
|
20
|
+
tileUtils,
|
|
21
|
+
Config,
|
|
22
|
+
WindowUtils,
|
|
23
|
+
mobileLibrary,
|
|
24
|
+
ushellLibrary,
|
|
25
|
+
JSONModel,
|
|
26
|
+
Log,
|
|
27
|
+
UrlParsing,
|
|
28
|
+
EventHub,
|
|
29
|
+
Container,
|
|
30
|
+
LaunchpadError
|
|
31
|
+
) => {
|
|
32
|
+
"use strict";
|
|
33
|
+
|
|
34
|
+
// shortcut for sap.m.GenericTileScope
|
|
35
|
+
const GenericTileScope = mobileLibrary.GenericTileScope;
|
|
36
|
+
|
|
37
|
+
// shortcut for sap.m.GenericTileMode
|
|
38
|
+
const GenericTileMode = mobileLibrary.GenericTileMode;
|
|
39
|
+
|
|
40
|
+
// shortcut for sap.ushell.AppType
|
|
41
|
+
const AppType = ushellLibrary.AppType;
|
|
42
|
+
|
|
43
|
+
// shortcut for sap.m.FrameType
|
|
44
|
+
const FrameType = mobileLibrary.FrameType;
|
|
45
|
+
|
|
46
|
+
/* global hasher */
|
|
47
|
+
|
|
48
|
+
return Controller.extend("sap.ushell_abap.components.tiles.applauncher.StaticTile", {
|
|
49
|
+
_aDoables: [],
|
|
50
|
+
|
|
51
|
+
onInit: function () {
|
|
52
|
+
this._aDoables = [];
|
|
53
|
+
const oView = this.getView();
|
|
54
|
+
const oViewData = oView.getViewData();
|
|
55
|
+
const oTileApi = oViewData.chip; // instance specific CHIP API
|
|
56
|
+
const oConfig = tileUtils.getAppLauncherConfig(oTileApi, oTileApi.configurationUi.isEnabled(), false);
|
|
57
|
+
const that = this;
|
|
58
|
+
let sNavigationTargetUrl = oConfig.navigation_target_url;
|
|
59
|
+
let oParsedHash;
|
|
60
|
+
|
|
61
|
+
const sSystem = oTileApi.url.getApplicationSystem();
|
|
62
|
+
if (sSystem) { // propagate system to target application
|
|
63
|
+
// when the navigation url is hash we want to make sure system parameter is in the parameters part
|
|
64
|
+
if (UrlParsing.isIntentUrl(sNavigationTargetUrl)) {
|
|
65
|
+
oParsedHash = UrlParsing.parseShellHash(sNavigationTargetUrl);
|
|
66
|
+
if (!oParsedHash.params) {
|
|
67
|
+
oParsedHash.params = {};
|
|
68
|
+
}
|
|
69
|
+
oParsedHash.params["sap-system"] = sSystem;
|
|
70
|
+
sNavigationTargetUrl = `#${UrlParsing.constructShellHash(oParsedHash)}`;
|
|
71
|
+
} else {
|
|
72
|
+
sNavigationTargetUrl += `${(sNavigationTargetUrl.indexOf("?") < 0) ? "?" : "&"}sap-system=${sSystem}`;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
this.navigationTargetUrl = sNavigationTargetUrl;
|
|
76
|
+
|
|
77
|
+
const oModel = new JSONModel({
|
|
78
|
+
sizeBehavior: Config.last("/core/home/sizeBehavior"),
|
|
79
|
+
wrappingType: Config.last("/core/home/wrappingType"),
|
|
80
|
+
config: oConfig,
|
|
81
|
+
// These initial values are overwritten by the types contract
|
|
82
|
+
mode: oConfig.display_mode,
|
|
83
|
+
frameType: FrameType.OneByOne,
|
|
84
|
+
nav: { navigation_target_url: (oTileApi.configurationUi && oTileApi.configurationUi.isEnabled() ? "" : sNavigationTargetUrl) },
|
|
85
|
+
search: { display_highlight_terms: [] }
|
|
86
|
+
});
|
|
87
|
+
oView.setModel(oModel);
|
|
88
|
+
// listen for changes of the size behavior, as the end user can change it in the settings (if enabled)
|
|
89
|
+
this._aDoables.push(Config.on("/core/home/sizeBehavior").do((sSizeBehavior) => {
|
|
90
|
+
oModel.setProperty("/sizeBehavior", sSizeBehavior);
|
|
91
|
+
}));
|
|
92
|
+
|
|
93
|
+
// implement types contact
|
|
94
|
+
// default is Tile
|
|
95
|
+
if (oTileApi.types) {
|
|
96
|
+
oTileApi.types.attachSetType((sType) => {
|
|
97
|
+
if (that.tileType === sType) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
let sMode = oModel.getProperty("/config/display_mode");
|
|
101
|
+
let sFrameType;
|
|
102
|
+
switch (sType) {
|
|
103
|
+
case "tilewide":
|
|
104
|
+
sMode ||= GenericTileMode.ContentMode;
|
|
105
|
+
sFrameType = FrameType.TwoByOne;
|
|
106
|
+
break;
|
|
107
|
+
case "flat":
|
|
108
|
+
sMode ||= GenericTileMode.ContentMode;
|
|
109
|
+
sFrameType = FrameType.OneByHalf;
|
|
110
|
+
break;
|
|
111
|
+
case "flatwide":
|
|
112
|
+
sMode ||= GenericTileMode.ContentMode;
|
|
113
|
+
sFrameType = FrameType.TwoByHalf;
|
|
114
|
+
break;
|
|
115
|
+
case "link":
|
|
116
|
+
sMode = GenericTileMode.LineMode;
|
|
117
|
+
sFrameType = FrameType.OneByOne;
|
|
118
|
+
break;
|
|
119
|
+
|
|
120
|
+
case "tile":
|
|
121
|
+
default:
|
|
122
|
+
sMode ||= GenericTileMode.ContentMode;
|
|
123
|
+
sFrameType = FrameType.OneByOne;
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
126
|
+
oModel.setProperty("/mode", sMode);
|
|
127
|
+
oModel.setProperty("/frameType", sFrameType);
|
|
128
|
+
|
|
129
|
+
that.tileType = sType;
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
if (!this.tileType) {
|
|
134
|
+
this.tileType = "tile";
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// implement search contract
|
|
138
|
+
if (oTileApi.search) {
|
|
139
|
+
// split and clean keyword string (may be comma + space delimited)
|
|
140
|
+
const sKeywords = oView.getModel().getProperty("/config/display_search_keywords");
|
|
141
|
+
const aKeywords = sKeywords
|
|
142
|
+
.split(/[, ]+/)
|
|
143
|
+
.filter((n) => { return n && n !== ""; });
|
|
144
|
+
|
|
145
|
+
// add title and subtitle (if present) to keywords for better FLP searching
|
|
146
|
+
if (oConfig.display_title_text && oConfig.display_title_text !== "" &&
|
|
147
|
+
aKeywords.indexOf(oConfig.display_title_text) === -1) {
|
|
148
|
+
aKeywords.push(oConfig.display_title_text);
|
|
149
|
+
}
|
|
150
|
+
if (oConfig.display_subtitle_text && oConfig.display_subtitle_text !== "" &&
|
|
151
|
+
aKeywords.indexOf(oConfig.display_subtitle_text) === -1) {
|
|
152
|
+
aKeywords.push(oConfig.display_subtitle_text);
|
|
153
|
+
}
|
|
154
|
+
if (oConfig.display_info_text && oConfig.display_info_text !== "" &&
|
|
155
|
+
aKeywords.indexOf(oConfig.display_info_text) === -1) {
|
|
156
|
+
aKeywords.push(oConfig.display_info_text);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// defined in search contract:
|
|
160
|
+
oTileApi.search.setKeywords(aKeywords);
|
|
161
|
+
oTileApi.search.attachHighlight(
|
|
162
|
+
(aHighlightWords) => {
|
|
163
|
+
oView.getModel().setProperty("/search/display_highlight_terms", aHighlightWords);
|
|
164
|
+
}
|
|
165
|
+
);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// implement bag update handler
|
|
169
|
+
if (oTileApi.bag && oTileApi.bag.attachBagsUpdated) {
|
|
170
|
+
// is only called by the FLP for bookmark tiles which have been updated via bookmark service
|
|
171
|
+
oTileApi.bag.attachBagsUpdated((aUpdatedBagIds) => {
|
|
172
|
+
if (aUpdatedBagIds.indexOf("tileProperties") > -1) {
|
|
173
|
+
tileUtils._updateTilePropertiesTexts(oView, oTileApi.bag.getBag("tileProperties"));
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
// implement configuration update handler
|
|
179
|
+
if (oTileApi.configuration) {
|
|
180
|
+
oTileApi.configuration.getTransactionCode().then((sEffective) => {
|
|
181
|
+
this.getView().getModel().setProperty("/config/display_transaction_code_effective", sEffective);
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
if (oTileApi.configuration.attachConfigurationUpdated) {
|
|
185
|
+
// is only called by the FLP for bookmark tiles which have been updated via bookmark service
|
|
186
|
+
oTileApi.configuration.attachConfigurationUpdated((aUpdatedConfigKeys) => {
|
|
187
|
+
if (aUpdatedConfigKeys.indexOf("tileConfiguration") > -1) {
|
|
188
|
+
tileUtils._updateTileConfiguration(oView, oTileApi.configuration.getParameterValueAsString("tileConfiguration"));
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
oTileApi.configuration.getTransactionCode().then((sEffective) => {
|
|
192
|
+
this.getView().getModel().setProperty("/config/display_transaction_code_effective", sEffective);
|
|
193
|
+
});
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
// implement preview contract
|
|
199
|
+
if (oTileApi.preview) {
|
|
200
|
+
oTileApi.preview.setTargetUrl(sNavigationTargetUrl);
|
|
201
|
+
oTileApi.preview.setPreviewIcon(oConfig.display_icon_url);
|
|
202
|
+
oTileApi.preview.setPreviewTitle(oConfig.display_title_text);
|
|
203
|
+
if (oTileApi.preview.setPreviewSubtitle && typeof oTileApi.preview.setPreviewSubtitle === "function") {
|
|
204
|
+
oTileApi.preview.setPreviewSubtitle(oConfig.display_subtitle_text);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
// implement configurationUi contract: setup configuration UI
|
|
209
|
+
if (oTileApi.configurationUi.isEnabled()) {
|
|
210
|
+
oTileApi.configurationUi.setAsyncUiProvider(() => {
|
|
211
|
+
return tileUtils.getConfigurationUi(oView, "sap.ushell_abap.components.tiles.applauncher.Configuration")
|
|
212
|
+
.then((oConfigurationUi) => {
|
|
213
|
+
oTileApi.configurationUi.attachCancel(that.onCancelConfiguration.bind(null, oConfigurationUi));
|
|
214
|
+
oTileApi.configurationUi.attachSave(that.onSaveConfiguration.bind(null, oConfigurationUi));
|
|
215
|
+
return oConfigurationUi;
|
|
216
|
+
});
|
|
217
|
+
});
|
|
218
|
+
this.getView().getContent()[0].setTooltip(
|
|
219
|
+
tileUtils.getResourceBundle().getText("edit_configuration.tooltip")
|
|
220
|
+
);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
// attach the tile actions provider for the actions contract
|
|
224
|
+
if (oTileApi.actions) {
|
|
225
|
+
let aExtendedActions = [];
|
|
226
|
+
const aActions = oConfig.actions;
|
|
227
|
+
if (aActions) {
|
|
228
|
+
aExtendedActions = aActions.slice();
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
if (Config.last("/core/shell/enablePersonalization")) {
|
|
232
|
+
const sType = (oModel.getProperty("/mode") === GenericTileMode.LineMode) ? "link" : "tile";
|
|
233
|
+
const tileSettingsAction = tileUtils.getTileSettingsAction(oModel, this.onSaveRuntimeSettings.bind(this), sType);
|
|
234
|
+
aExtendedActions.push(tileSettingsAction);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
oTileApi.actions.setActionsProvider(() => {
|
|
238
|
+
return aExtendedActions;
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
},
|
|
242
|
+
|
|
243
|
+
onExit: function () {
|
|
244
|
+
this._aDoables.forEach((oDoable) => {
|
|
245
|
+
oDoable.off();
|
|
246
|
+
});
|
|
247
|
+
this._aDoables = [];
|
|
248
|
+
},
|
|
249
|
+
|
|
250
|
+
// trigger to show the configuration UI if the tile is pressed in Admin mode
|
|
251
|
+
onPress: function (oEvent) {
|
|
252
|
+
const oStaticTileView = this.getView();
|
|
253
|
+
const oViewData = oStaticTileView.getViewData();
|
|
254
|
+
const oTileApi = oViewData.chip;
|
|
255
|
+
const oTileConfig = oStaticTileView.getModel().getProperty("/config");
|
|
256
|
+
// scope is property of generic tile. It's default value is "Display"
|
|
257
|
+
if (oEvent.getSource().getScope && oEvent.getSource().getScope() === GenericTileScope.Display) {
|
|
258
|
+
if (oTileApi.configurationUi.isEnabled()) {
|
|
259
|
+
oTileApi.configurationUi.display();
|
|
260
|
+
} else if (this.navigationTargetUrl) {
|
|
261
|
+
EventHub.emit("UITracer.trace", {
|
|
262
|
+
reason: "LaunchApp",
|
|
263
|
+
source: "Tile",
|
|
264
|
+
data: {
|
|
265
|
+
targetUrl: this.navigationTargetUrl
|
|
266
|
+
}
|
|
267
|
+
});
|
|
268
|
+
if (this.navigationTargetUrl[0] === "#") {
|
|
269
|
+
hasher.setHash(this.navigationTargetUrl);
|
|
270
|
+
} else {
|
|
271
|
+
const bLogRecentActivity = Config.last("/core/shell/enableRecentActivity") && Config.last("/core/shell/enableRecentActivityLogging");
|
|
272
|
+
if (bLogRecentActivity) {
|
|
273
|
+
const oRecentEntry = {
|
|
274
|
+
title: oTileConfig.display_title_text,
|
|
275
|
+
appType: AppType.URL,
|
|
276
|
+
url: oTileConfig.navigation_target_url,
|
|
277
|
+
appId: oTileConfig.navigation_target_url
|
|
278
|
+
};
|
|
279
|
+
Container.getRendererInternal().logRecentActivity(oRecentEntry);
|
|
280
|
+
}
|
|
281
|
+
WindowUtils.openURL(this.navigationTargetUrl, "_blank");
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
},
|
|
286
|
+
|
|
287
|
+
// tile settings action UI save handler
|
|
288
|
+
onSaveRuntimeSettings: function (oSettingsView) {
|
|
289
|
+
const oViewModel = oSettingsView.getModel();
|
|
290
|
+
const oTileApi = this.getView().getViewData().chip;
|
|
291
|
+
const oConfigToSave = this.getView().getModel().getProperty("/config");
|
|
292
|
+
|
|
293
|
+
oConfigToSave.display_title_text = oViewModel.getProperty("/title") || "";
|
|
294
|
+
oConfigToSave.display_subtitle_text = oViewModel.getProperty("/subtitle") || "";
|
|
295
|
+
oConfigToSave.display_info_text = oViewModel.getProperty("/info") || "";
|
|
296
|
+
oConfigToSave.display_search_keywords = oViewModel.getProperty("/keywords") || "";
|
|
297
|
+
|
|
298
|
+
// use bag contract in order to store translatable properties
|
|
299
|
+
const tilePropertiesBag = oTileApi.bag.getBag("tileProperties");
|
|
300
|
+
tilePropertiesBag.setText("display_title_text", oConfigToSave.display_title_text);
|
|
301
|
+
tilePropertiesBag.setText("display_subtitle_text", oConfigToSave.display_subtitle_text);
|
|
302
|
+
tilePropertiesBag.setText("display_info_text", oConfigToSave.display_info_text);
|
|
303
|
+
tilePropertiesBag.setText("display_search_keywords", oConfigToSave.display_search_keywords);
|
|
304
|
+
|
|
305
|
+
// saving the relevant properties
|
|
306
|
+
tilePropertiesBag.save(
|
|
307
|
+
// success handler
|
|
308
|
+
() => {
|
|
309
|
+
Log.debug("property bag 'tileProperties' saved successfully");
|
|
310
|
+
|
|
311
|
+
// update tile's model
|
|
312
|
+
this.getView().getModel().setProperty("/config/display_title_text", oConfigToSave.display_title_text);
|
|
313
|
+
this.getView().getModel().setProperty("/config/display_subtitle_text", oConfigToSave.display_subtitle_text);
|
|
314
|
+
this.getView().getModel().setProperty("/config/display_info_text", oConfigToSave.display_info_text);
|
|
315
|
+
this.getView().getModel().setProperty("/config/display_search_keywords", oConfigToSave.display_search_keywords);
|
|
316
|
+
|
|
317
|
+
// call to refresh model which (due to the binding) will refresh the tile
|
|
318
|
+
this.getView().getModel().refresh();
|
|
319
|
+
},
|
|
320
|
+
// fnFailure
|
|
321
|
+
(mErrorMessages, mErrorInfo) => {
|
|
322
|
+
const sFirstFailedBag = Object.keys(mErrorMessages)[0];
|
|
323
|
+
|
|
324
|
+
const oError = new LaunchpadError(`Bag save failed: ${mErrorMessages[sFirstFailedBag]}`, {
|
|
325
|
+
info: mErrorInfo[sFirstFailedBag],
|
|
326
|
+
otherMessages: mErrorMessages,
|
|
327
|
+
otherInfo: mErrorInfo
|
|
328
|
+
});
|
|
329
|
+
Log.error("Bag save failed", oError, "sap.ushell_abap.components.tiles.applauncher.StaticTile.controller");
|
|
330
|
+
}
|
|
331
|
+
);
|
|
332
|
+
},
|
|
333
|
+
|
|
334
|
+
// configuration save handler
|
|
335
|
+
onSaveConfiguration: async function (oConfigurationView) {
|
|
336
|
+
const oModel = oConfigurationView.getModel();
|
|
337
|
+
// tile model placed into configuration model by getConfigurationUi
|
|
338
|
+
const oTileModel = oModel.getProperty("/tileModel");
|
|
339
|
+
const oTileApi = oConfigurationView.getViewData().chip;
|
|
340
|
+
const aTileNavigationActions = tileUtils.tileActionsRows2TileActionsArray(oModel.getProperty("/config/tile_actions_rows"));
|
|
341
|
+
// get the configuration to save from the model
|
|
342
|
+
const configToSave = {
|
|
343
|
+
display_icon_url: oModel.getProperty("/config/display_icon_url"),
|
|
344
|
+
navigation_use_semantic_object: oModel.getProperty("/config/navigation_use_semantic_object"),
|
|
345
|
+
navigation_target_url: oModel.getProperty("/config/navigation_target_url"),
|
|
346
|
+
navigation_semantic_object: (oModel.getProperty("/config/navigation_semantic_object") || "").trim(),
|
|
347
|
+
navigation_semantic_action: (oModel.getProperty("/config/navigation_semantic_action") || "").trim(),
|
|
348
|
+
navigation_semantic_parameters: (oModel.getProperty("/config/navigation_semantic_parameters") || "").trim(),
|
|
349
|
+
display_search_keywords: oModel.getProperty("/config/display_search_keywords")
|
|
350
|
+
};
|
|
351
|
+
|
|
352
|
+
// if the input fields icon, semantic object and action are failing the input validations,
|
|
353
|
+
// then through an error message requesting the user to enter/correct those fields
|
|
354
|
+
let bReject = tileUtils.checkInputOnSaveConfig(oConfigurationView);
|
|
355
|
+
if (!bReject) {
|
|
356
|
+
bReject = tileUtils.checkTileActions(oConfigurationView);
|
|
357
|
+
}
|
|
358
|
+
if (bReject) {
|
|
359
|
+
throw new Error("mandatory_fields_missing");
|
|
360
|
+
}
|
|
361
|
+
// overwrite target URL in case of semantic object navigation
|
|
362
|
+
if (configToSave.navigation_use_semantic_object) {
|
|
363
|
+
configToSave.navigation_target_url = tileUtils.getSemanticNavigationUrl(configToSave);
|
|
364
|
+
oModel.setProperty("/config/navigation_target_url", configToSave.navigation_target_url);
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
// use bag in order to store translatable properties
|
|
368
|
+
const tilePropertiesBag = oTileApi.bag.getBag("tileProperties");
|
|
369
|
+
tilePropertiesBag.setText("display_title_text", oModel.getProperty("/config/display_title_text"));
|
|
370
|
+
tilePropertiesBag.setText("display_subtitle_text", oModel.getProperty("/config/display_subtitle_text"));
|
|
371
|
+
tilePropertiesBag.setText("display_info_text", oModel.getProperty("/config/display_info_text"));
|
|
372
|
+
tilePropertiesBag.setText("display_search_keywords", configToSave.display_search_keywords);
|
|
373
|
+
|
|
374
|
+
const tileNavigationActionsBag = oTileApi.bag.getBag("tileNavigationActions");
|
|
375
|
+
// forward populating of tile navigation actions array into the bag, to Utils
|
|
376
|
+
tileUtils.populateTileNavigationActionsBag(tileNavigationActionsBag, aTileNavigationActions);
|
|
377
|
+
|
|
378
|
+
const oSaveDeferred = Promise.withResolvers();
|
|
379
|
+
|
|
380
|
+
// use configuration contract to write parameter values
|
|
381
|
+
oTileApi.writeConfiguration.setParameterValues(
|
|
382
|
+
{ tileConfiguration: JSON.stringify(configToSave) },
|
|
383
|
+
// success handler
|
|
384
|
+
() => {
|
|
385
|
+
const oConfigurationConfig = tileUtils.getAppLauncherConfig(oTileApi, false, false);
|
|
386
|
+
const oTileConfig = tileUtils.getAppLauncherConfig(oTileApi, true, false);
|
|
387
|
+
// switching the model under the tile -> keep the tile model
|
|
388
|
+
const oModel = new JSONModel({
|
|
389
|
+
config: oConfigurationConfig,
|
|
390
|
+
// set empty target url in configuration mode
|
|
391
|
+
nav: { navigation_target_url: "" },
|
|
392
|
+
// keep tile model
|
|
393
|
+
tileModel: oTileModel
|
|
394
|
+
});
|
|
395
|
+
oConfigurationView.setModel(oModel);
|
|
396
|
+
// update tile model
|
|
397
|
+
oTileModel.setData({ config: oTileConfig, nav: { navigation_target_url: "" } }, false);
|
|
398
|
+
|
|
399
|
+
// update tile model
|
|
400
|
+
if (oTileApi.preview) {
|
|
401
|
+
oTileApi.preview.setTargetUrl(oConfigurationConfig.navigation_target_url);
|
|
402
|
+
oTileApi.preview.setPreviewIcon(oConfigurationConfig.display_icon_url);
|
|
403
|
+
oTileApi.preview.setPreviewTitle(oConfigurationConfig.display_title_text);
|
|
404
|
+
if (oTileApi.preview.setPreviewSubtitle && typeof oTileApi.preview.setPreviewSubtitle === "function") {
|
|
405
|
+
oTileApi.preview.setPreviewSubtitle(oConfigurationConfig.display_subtitle_text);
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
tilePropertiesBag.save(
|
|
409
|
+
// success handler
|
|
410
|
+
() => {
|
|
411
|
+
Log.debug("property bag 'tileProperties' saved successfully");
|
|
412
|
+
// update possibly changed values via contracts
|
|
413
|
+
if (oTileApi.title) {
|
|
414
|
+
oTileApi.title.setTitle(
|
|
415
|
+
oConfigurationConfig.display_title_text,
|
|
416
|
+
// success handler
|
|
417
|
+
() => {
|
|
418
|
+
oSaveDeferred.resolve();
|
|
419
|
+
},
|
|
420
|
+
// error handler
|
|
421
|
+
(sErrorMessage, oErrorInfo) => {
|
|
422
|
+
Log.error(`property bag 'tileProperties' save failed: ${sErrorMessage}`, null, "sap.ushell_abap.components.tiles.applauncher.StaticTile.controller");
|
|
423
|
+
oSaveDeferred.reject(new LaunchpadError(sErrorMessage, oErrorInfo));
|
|
424
|
+
}
|
|
425
|
+
);
|
|
426
|
+
} else {
|
|
427
|
+
oSaveDeferred.resolve();
|
|
428
|
+
}
|
|
429
|
+
},
|
|
430
|
+
// fnFailure
|
|
431
|
+
(mErrorMessages, mErrorInfo) => {
|
|
432
|
+
const sFirstFailedBag = Object.keys(mErrorMessages)[0];
|
|
433
|
+
|
|
434
|
+
const oError = new LaunchpadError(`Bag save failed: ${mErrorMessages[sFirstFailedBag]}`, {
|
|
435
|
+
info: mErrorInfo[sFirstFailedBag],
|
|
436
|
+
otherMessages: mErrorMessages,
|
|
437
|
+
otherInfo: mErrorInfo
|
|
438
|
+
});
|
|
439
|
+
Log.error("Bag save failed", oError, "sap.ushell_abap.components.tiles.applauncher.StaticTile.controller");
|
|
440
|
+
oSaveDeferred.reject(oError);
|
|
441
|
+
}
|
|
442
|
+
);
|
|
443
|
+
|
|
444
|
+
tileNavigationActionsBag.save(
|
|
445
|
+
// success handler
|
|
446
|
+
() => {
|
|
447
|
+
Log.debug("property bag 'navigationProperties' saved successfully");
|
|
448
|
+
},
|
|
449
|
+
// fnFailure
|
|
450
|
+
(mErrorMessages, mErrorInfo) => {
|
|
451
|
+
const sFirstFailedBag = Object.keys(mErrorMessages)[0];
|
|
452
|
+
|
|
453
|
+
const oError = new LaunchpadError(`Bag save failed: ${mErrorMessages[sFirstFailedBag]}`, {
|
|
454
|
+
info: mErrorInfo[sFirstFailedBag],
|
|
455
|
+
otherMessages: mErrorMessages,
|
|
456
|
+
otherInfo: mErrorInfo
|
|
457
|
+
});
|
|
458
|
+
Log.error("Bag save failed", oError, "sap.ushell_abap.components.tiles.applauncher.StaticTile.controller");
|
|
459
|
+
oSaveDeferred.reject(oError);
|
|
460
|
+
}
|
|
461
|
+
);
|
|
462
|
+
},
|
|
463
|
+
// error handler
|
|
464
|
+
(sErrorMessage, oErrorInfo) => {
|
|
465
|
+
Log.error(`property bag 'tileProperties' save failed: ${sErrorMessage}`, null, "sap.ushell_abap.components.tiles.applauncher.StaticTile.controller");
|
|
466
|
+
oSaveDeferred.reject(new LaunchpadError(sErrorMessage, oErrorInfo));
|
|
467
|
+
}
|
|
468
|
+
);
|
|
469
|
+
oConfigurationView.destroy();
|
|
470
|
+
return oSaveDeferred.promise;
|
|
471
|
+
},
|
|
472
|
+
|
|
473
|
+
// configuration cancel handler
|
|
474
|
+
onCancelConfiguration: function (oConfigurationView) {
|
|
475
|
+
// reload old configuration and display
|
|
476
|
+
const oViewData = oConfigurationView.getViewData();
|
|
477
|
+
const oModel = oConfigurationView.getModel();
|
|
478
|
+
// tile model placed into configuration model by getConfigurationUi
|
|
479
|
+
const oTileModel = oModel.getProperty("/tileModel");
|
|
480
|
+
const oTileApi = oViewData.chip;
|
|
481
|
+
const oCurrentConfig = tileUtils.getAppLauncherConfig(oTileApi, oTileApi.configurationUi.isEnabled(), false);
|
|
482
|
+
|
|
483
|
+
oConfigurationView.getModel().setData({
|
|
484
|
+
config: oCurrentConfig,
|
|
485
|
+
// set empty target url in configuration mode
|
|
486
|
+
nav: { navigation_target_url: "" },
|
|
487
|
+
tileModel: oTileModel
|
|
488
|
+
}, false);
|
|
489
|
+
|
|
490
|
+
oConfigurationView.destroy();
|
|
491
|
+
},
|
|
492
|
+
|
|
493
|
+
formatters: {
|
|
494
|
+
leanURL: WindowUtils.getLeanURL.bind(WindowUtils)
|
|
495
|
+
}
|
|
496
|
+
});
|
|
497
|
+
});
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
// Copyright (c) 2009-2026 SAP SE, All Rights Reserved
|
|
2
|
+
|
|
3
|
+
sap.ui.define([
|
|
4
|
+
"sap/ui/core/mvc/View",
|
|
5
|
+
"sap/m/GenericTile",
|
|
6
|
+
"sap/m/ImageContent",
|
|
7
|
+
"sap/m/TileContent",
|
|
8
|
+
"sap/ushell_abap/components/tiles/applauncher/StaticTile.controller" // Controller needs to be loaded
|
|
9
|
+
], (
|
|
10
|
+
View,
|
|
11
|
+
GenericTile,
|
|
12
|
+
ImageContent,
|
|
13
|
+
TileContent
|
|
14
|
+
) => {
|
|
15
|
+
"use strict";
|
|
16
|
+
|
|
17
|
+
return View.extend("sap.ushell_abap.components.tiles.applauncher.StaticTile", {
|
|
18
|
+
getControllerName: function () {
|
|
19
|
+
return "sap.ushell_abap.components.tiles.applauncher.StaticTile";
|
|
20
|
+
},
|
|
21
|
+
createContent: function (/* oController */) {
|
|
22
|
+
this.setHeight("100%");
|
|
23
|
+
this.setWidth("100%");
|
|
24
|
+
|
|
25
|
+
return this.getTileControl();
|
|
26
|
+
},
|
|
27
|
+
getTileControl: function () {
|
|
28
|
+
const oController = this.getController();
|
|
29
|
+
|
|
30
|
+
// Return the GenericTile if it already exists instead of creating a new one
|
|
31
|
+
if (this.getContent().length === 1) {
|
|
32
|
+
return this.getContent()[0];
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return new GenericTile({
|
|
36
|
+
mode: "{= ${/mode} || (${/config/display_icon_url} ? 'ContentMode' : 'HeaderMode') }",
|
|
37
|
+
frameType: "{/frameType}",
|
|
38
|
+
header: "{/config/display_title_text}",
|
|
39
|
+
subheader: "{/config/display_subtitle_text}",
|
|
40
|
+
sizeBehavior: "{/sizeBehavior}",
|
|
41
|
+
wrappingType: "{/wrappingType}",
|
|
42
|
+
appShortcut: "{/config/display_transaction_code_effective}",
|
|
43
|
+
url: {
|
|
44
|
+
parts: ["/targetURL", "/nav/navigation_target_url"],
|
|
45
|
+
formatter: oController.formatters.leanURL
|
|
46
|
+
},
|
|
47
|
+
tileContent: new TileContent({
|
|
48
|
+
footer: "{/config/display_info_text}",
|
|
49
|
+
content: new ImageContent({
|
|
50
|
+
src: "{/config/display_icon_url}"
|
|
51
|
+
})
|
|
52
|
+
}),
|
|
53
|
+
press: [oController.onPress, oController]
|
|
54
|
+
});
|
|
55
|
+
},
|
|
56
|
+
getMode: function () {
|
|
57
|
+
return this.getModel().getProperty("/mode")
|
|
58
|
+
|| (this.getModel().getProperty("/config/display_icon_url") ? "ContentMode" : "HeaderMode");
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
});
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
// Copyright (c) 2009-2026 SAP SE, All Rights Reserved
|
|
2
|
+
|
|
3
|
+
sap.ui.define([
|
|
4
|
+
"sap/ui/core/mvc/View",
|
|
5
|
+
"sap/ui/core/UIComponent",
|
|
6
|
+
"sap/ushell/performance/PerformanceAPI"
|
|
7
|
+
], (
|
|
8
|
+
View,
|
|
9
|
+
UIComponent,
|
|
10
|
+
PerformanceAPI
|
|
11
|
+
) => {
|
|
12
|
+
"use strict";
|
|
13
|
+
|
|
14
|
+
return UIComponent.extend("sap.ushell_abap.components.tiles.applauncherdynamic.Component", {
|
|
15
|
+
metadata: {
|
|
16
|
+
interfaces: ["sap.ui.core.IAsyncContentCreation"]
|
|
17
|
+
},
|
|
18
|
+
|
|
19
|
+
init: function () {
|
|
20
|
+
UIComponent.prototype.init.apply(this, arguments);
|
|
21
|
+
|
|
22
|
+
PerformanceAPI.attachComponentInitialRendering(this, () => {
|
|
23
|
+
PerformanceAPI.setMark("FLP First Tile View Rendered", {
|
|
24
|
+
useUniqueMark: true
|
|
25
|
+
});
|
|
26
|
+
PerformanceAPI.setMark("FLP Last Tile View Rendered", {
|
|
27
|
+
useOnlyLastMark: true
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
},
|
|
31
|
+
|
|
32
|
+
createContent: function () {
|
|
33
|
+
const oComponentData = this.getComponentData();
|
|
34
|
+
|
|
35
|
+
// We use a copy of the StaticTile view to temporarily support older versions of the CHIP XML.
|
|
36
|
+
// This needs to be done since the view-based approach to build CHIPs does not work with typed views
|
|
37
|
+
// At a later point in time, when we can be sure the new XML version has been delivered, we can delete
|
|
38
|
+
// the copied view and always use the original one as a typed view
|
|
39
|
+
return View.create({
|
|
40
|
+
viewName: "module:sap/ushell_abap/components/tiles/applauncherdynamic/DynamicTile.view",
|
|
41
|
+
viewData: oComponentData
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
});
|