@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.
Files changed (121) hide show
  1. package/package.json +1 -1
  2. package/src/main/js/sap/ushell_abap/.library +1 -1
  3. package/src/main/js/sap/ushell_abap/adapters/abap/AppStateAdapter.js +53 -63
  4. package/src/main/js/sap/ushell_abap/adapters/abap/ClientSideTargetResolutionAdapter.js +1 -1
  5. package/src/main/js/sap/ushell_abap/adapters/abap/CommonDataModelAdapter.js +1 -1
  6. package/src/main/js/sap/ushell_abap/adapters/abap/ConfigurationDefaultsAdapter.js +1 -1
  7. package/src/main/js/sap/ushell_abap/adapters/abap/ContainerAdapter.js +1 -1
  8. package/src/main/js/sap/ushell_abap/adapters/abap/FlpLaunchPageAdapter.js +62 -4
  9. package/src/main/js/sap/ushell_abap/adapters/abap/LaunchPageAdapter.js +1 -1
  10. package/src/main/js/sap/ushell_abap/adapters/abap/NavTargetResolutionAdapter.js +1 -1
  11. package/src/main/js/sap/ushell_abap/adapters/abap/NavTargetResolutionInternalAdapter.js +1 -1
  12. package/src/main/js/sap/ushell_abap/adapters/abap/PageBuildingAdapter.js +1 -1
  13. package/src/main/js/sap/ushell_abap/adapters/abap/PagePersistenceAdapter.js +8 -8
  14. package/src/main/js/sap/ushell_abap/adapters/abap/PersonalizationAdapter.js +1 -1
  15. package/src/main/js/sap/ushell_abap/adapters/abap/PersonalizationV2Adapter.js +1 -1
  16. package/src/main/js/sap/ushell_abap/adapters/abap/SearchAdapter.js +1 -1
  17. package/src/main/js/sap/ushell_abap/adapters/abap/SupportTicketAdapter.js +1 -1
  18. package/src/main/js/sap/ushell_abap/adapters/abap/Ui5ComponentLoaderAdapter.js +1 -1
  19. package/src/main/js/sap/ushell_abap/adapters/abap/UserInfoAdapter.js +11 -11
  20. package/src/main/js/sap/ushell_abap/adapters/abap/VisualizationInstantiationAdapter.js +76 -0
  21. package/src/main/js/sap/ushell_abap/adapters/hana/ContainerAdapter.js +1 -1
  22. package/src/main/js/sap/ushell_abap/adapters/local/ClientSideTargetResolutionAdapter.js +123 -0
  23. package/src/main/js/sap/ushell_abap/adapters/local/FlpLaunchPageAdapter.js +115 -0
  24. package/src/main/js/sap/ushell_abap/adapters/local/MenuAdapter.js +92 -0
  25. package/src/main/js/sap/ushell_abap/adapters/local/PageBuildingAdapter.js +242 -0
  26. package/src/main/js/sap/ushell_abap/adapters/local/PagePersistenceAdapter.js +308 -0
  27. package/src/main/js/sap/ushell_abap/api/S4MyHome.js +58 -0
  28. package/src/main/js/sap/ushell_abap/bootstrap/DirectAppStart.js +28 -15
  29. package/src/main/js/sap/ushell_abap/bootstrap/LoadLaunchpad/CreateRenderer.js +4 -2
  30. package/src/main/js/sap/ushell_abap/bootstrap/LoadLaunchpad/RequestPages.js +2 -6
  31. package/src/main/js/sap/ushell_abap/bootstrap/PlatformConfig.js +5 -5
  32. package/src/main/js/sap/ushell_abap/bootstrap/XhrLogonEventHandler.js +6 -7
  33. package/src/main/js/sap/ushell_abap/bootstrap/abapConstants.js +30 -0
  34. package/src/main/js/sap/ushell_abap/components/SideNavigation/modules/Favorites.js +549 -0
  35. package/src/main/js/sap/ushell_abap/components/SideNavigation/modules/GenericNavigationListProvider.js +241 -0
  36. package/src/main/js/sap/ushell_abap/components/cards/Card.controller.js +117 -0
  37. package/src/main/js/sap/ushell_abap/components/cards/Card.view.xml +11 -0
  38. package/src/main/js/sap/ushell_abap/components/cards/Configuration.controller.js +280 -0
  39. package/src/main/js/sap/ushell_abap/components/cards/Configuration.view.xml +27 -0
  40. package/src/main/js/sap/ushell_abap/components/cards/ManifestPropertyHelper.js +298 -0
  41. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/Component.js +90 -0
  42. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/TransactionCode.controller.js +110 -0
  43. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/TransactionCode.view.xml +16 -0
  44. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n.properties +17 -0
  45. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_ar.properties +10 -0
  46. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_bg.properties +10 -0
  47. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_ca.properties +10 -0
  48. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_cnr.properties +10 -0
  49. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_cs.properties +10 -0
  50. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_cy.properties +10 -0
  51. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_da.properties +10 -0
  52. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_de.properties +10 -0
  53. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_el.properties +10 -0
  54. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_en.properties +10 -0
  55. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_en_GB.properties +10 -0
  56. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_en_US_sappsd.properties +10 -0
  57. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_en_US_saprigi.properties +10 -0
  58. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_en_US_saptrc.properties +10 -0
  59. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_es.properties +10 -0
  60. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_es_MX.properties +10 -0
  61. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_et.properties +10 -0
  62. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_fi.properties +10 -0
  63. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_fr.properties +10 -0
  64. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_fr_CA.properties +10 -0
  65. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_hi.properties +10 -0
  66. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_hr.properties +10 -0
  67. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_hu.properties +10 -0
  68. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_id.properties +10 -0
  69. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_it.properties +10 -0
  70. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_iw.properties +10 -0
  71. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_ja.properties +10 -0
  72. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_kk.properties +10 -0
  73. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_ko.properties +10 -0
  74. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_lt.properties +10 -0
  75. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_lv.properties +10 -0
  76. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_mk.properties +10 -0
  77. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_ms.properties +10 -0
  78. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_nl.properties +10 -0
  79. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_no.properties +10 -0
  80. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_pl.properties +10 -0
  81. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_pt.properties +10 -0
  82. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_pt_PT.properties +10 -0
  83. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_ro.properties +10 -0
  84. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_ru.properties +10 -0
  85. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_sh.properties +10 -0
  86. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_sk.properties +10 -0
  87. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_sl.properties +10 -0
  88. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_sr.properties +10 -0
  89. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_sv.properties +10 -0
  90. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_th.properties +10 -0
  91. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_tr.properties +10 -0
  92. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_uk.properties +10 -0
  93. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_vi.properties +10 -0
  94. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_zh_CN.properties +10 -0
  95. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/i18n/i18n_zh_TW.properties +10 -0
  96. package/src/main/js/sap/ushell_abap/components/settings/TransactionCode/manifest.json +96 -0
  97. package/src/main/js/sap/ushell_abap/components/tiles/action/ActionTile.controller.js +189 -0
  98. package/src/main/js/sap/ushell_abap/components/tiles/action/ActionTile.view.xml +13 -0
  99. package/src/main/js/sap/ushell_abap/components/tiles/action/Configuration.controller.js +193 -0
  100. package/src/main/js/sap/ushell_abap/components/tiles/action/Configuration.view.xml +333 -0
  101. package/src/main/js/sap/ushell_abap/components/tiles/applauncher/Component.js +41 -0
  102. package/src/main/js/sap/ushell_abap/components/tiles/applauncher/Configuration.controller.js +114 -0
  103. package/src/main/js/sap/ushell_abap/components/tiles/applauncher/Configuration.view.xml +208 -0
  104. package/src/main/js/sap/ushell_abap/components/tiles/applauncher/StaticTile.controller.js +497 -0
  105. package/src/main/js/sap/ushell_abap/components/tiles/applauncher/StaticTile.view.js +61 -0
  106. package/src/main/js/sap/ushell_abap/components/tiles/applauncherdynamic/Component.js +45 -0
  107. package/src/main/js/sap/ushell_abap/components/tiles/applauncherdynamic/Configuration.controller.js +113 -0
  108. package/src/main/js/sap/ushell_abap/components/tiles/applauncherdynamic/Configuration.view.xml +231 -0
  109. package/src/main/js/sap/ushell_abap/components/tiles/applauncherdynamic/DynamicTile.controller.js +729 -0
  110. package/src/main/js/sap/ushell_abap/components/tiles/applauncherdynamic/DynamicTile.view.js +106 -0
  111. package/src/main/js/sap/ushell_abap/library.js +12 -1
  112. package/src/main/js/sap/ushell_abap/messagebundle.properties +6 -2
  113. package/src/main/js/sap/ushell_abap/pbServices/ui2/Chip.js +7 -3
  114. package/src/main/js/sap/ushell_abap/pbServices/ui2/ODataWrapper.js +3 -5
  115. package/src/main/js/sap/ushell_abap/pbServices/ui2/contracts/configuration.js +54 -4
  116. package/src/main/js/sap/ushell_abap/services/NavigationDataProvider.js +4 -4
  117. package/src/main/js/sap/ushell_abap/ui/VisualizationInstantiation/ChipInstanceWrapper.js +248 -0
  118. package/src/main/js/sap/ushell_abap/ui/VisualizationInstantiation/VizInstanceAbap.js +134 -0
  119. package/src/main/js/sap/ushell_abap/ui/VisualizationInstantiation/VizInstanceAbapLink.js +145 -0
  120. package/src/main/js/sap/ushell_abap/utils/UserPersonalization.js +127 -0
  121. package/ui5.yaml +21 -3
@@ -0,0 +1,298 @@
1
+ // Copyright (c) 2009-2026 SAP SE, All Rights Reserved
2
+
3
+ /**
4
+ * @fileOverview This file contains miscellaneous utility functions.
5
+ */
6
+ sap.ui.define([
7
+ "sap/base/util/ObjectPath",
8
+ "sap/ushell/base/UrlParsing"
9
+ ], (
10
+ ObjectPath,
11
+ UrlParsing
12
+ ) => {
13
+ "use strict";
14
+
15
+ const ManifestPropertyHelper = {
16
+ PLACEHOLDERS: {
17
+ TITLE: "<title>",
18
+ SUBTITLE: "<subtitle>",
19
+ ICON: "<icon>",
20
+ SEARCH_KEYWORDS: "<keywords>",
21
+ SEMANTIC_OBJECT: "<semantic object>",
22
+ ACTION: "<action>",
23
+ PARAMETERS: "<parameters>",
24
+ TARGET_URL: "<target URL>"
25
+ },
26
+
27
+ /**
28
+ * Extracts card data from a card manifest.
29
+ *
30
+ * @param {object} manifest The card manifest
31
+ * @returns {object} Extracted card data, ready to be put into bags
32
+ */
33
+ extractCardData: function (manifest) {
34
+ const oAction = this._getNavigationAction(manifest);
35
+ let sTileConfiguration;
36
+ let oSemanticParameters;
37
+ let sSemanticParameters;
38
+ let sSemanticObject;
39
+ let sSemanticAction;
40
+ let sTargetUrl;
41
+ let bUseSemanticObject;
42
+ const aSearchKeywords = ObjectPath.get(["sap.app", "tags", "keywords"], manifest);
43
+ let sSearchKeywords;
44
+
45
+ if (oAction) {
46
+ sSemanticObject = ObjectPath.get(["parameters", "intentSemanticObject"], oAction);
47
+ sSemanticAction = ObjectPath.get(["parameters", "intentAction"], oAction);
48
+ sTargetUrl = ObjectPath.get(["parameters", "url"], oAction);
49
+ oSemanticParameters = ObjectPath.get(["parameters", "intentParameters"], oAction);
50
+ }
51
+
52
+ if (oSemanticParameters) {
53
+ sSemanticParameters = UrlParsing.urlParametersToString(oSemanticParameters);
54
+ }
55
+
56
+ if (sTargetUrl) {
57
+ bUseSemanticObject = false;
58
+ } else if (sSemanticObject && sSemanticAction) {
59
+ bUseSemanticObject = true;
60
+ sTargetUrl = `#${sSemanticObject}-${sSemanticAction}`;
61
+ if (sSemanticParameters) {
62
+ sTargetUrl += `?${sSemanticParameters}`;
63
+ }
64
+ }
65
+
66
+ sTileConfiguration = JSON.stringify({
67
+ display_icon_url: ObjectPath.get(["sap.card", "header", "icon", "src"], manifest),
68
+ navigation_semantic_object: sSemanticObject,
69
+ navigation_semantic_action: sSemanticAction,
70
+ navigation_semantic_parameters: sSemanticParameters,
71
+ navigation_use_semantic_object: bUseSemanticObject,
72
+ navigation_target_url: sTargetUrl
73
+ });
74
+
75
+ if (sTileConfiguration === "{}") {
76
+ sTileConfiguration = undefined;
77
+ }
78
+
79
+ if (aSearchKeywords) {
80
+ sSearchKeywords = aSearchKeywords.join(",");
81
+ }
82
+
83
+ return {
84
+ bagProperties: {
85
+ display_title_text: ObjectPath.get(["sap.card", "header", "title"], manifest),
86
+ display_subtitle_text: ObjectPath.get(["sap.card", "header", "subTitle"], manifest),
87
+ display_search_keywords: sSearchKeywords
88
+ },
89
+ tileConfiguration: sTileConfiguration,
90
+ manifest: this._replaceDataWithPlaceholders(manifest)
91
+ };
92
+ },
93
+
94
+ /**
95
+ * Merges card data into a card manifest.
96
+ *
97
+ * @param {object} manifest The card manifest
98
+ * @param {object} cardData The card data
99
+ * @returns {object} A copy of the manifest with merged card data
100
+ */
101
+ mergeCardData: function (manifest, cardData) {
102
+ const oManifest = JSON.parse(JSON.stringify(manifest));
103
+ const oNavigationAction = this._getNavigationAction(oManifest);
104
+ let aSearchKeywords;
105
+
106
+ if (cardData.display_title_text) {
107
+ ObjectPath.set(["sap.card", "header", "title"], cardData.display_title_text, oManifest);
108
+ }
109
+
110
+ if (cardData.display_subtitle_text) {
111
+ ObjectPath.set(["sap.card", "header", "subTitle"], cardData.display_subtitle_text, oManifest);
112
+ }
113
+
114
+ if (cardData.display_search_keywords) {
115
+ aSearchKeywords = cardData.display_search_keywords.split(",");
116
+ ObjectPath.set(["sap.app", "tags", "keywords"], aSearchKeywords, oManifest);
117
+ }
118
+
119
+ if (cardData.display_icon_url) {
120
+ ObjectPath.set(["sap.card", "header", "icon", "src"], cardData.display_icon_url, oManifest);
121
+ }
122
+
123
+ if (cardData.navigation_semantic_object) {
124
+ ObjectPath.set(["parameters", "intentSemanticObject"], cardData.navigation_semantic_object, oNavigationAction);
125
+ } else if (cardData.navigation_target_url) {
126
+ // navigation_target_url is always filled, either with the intent hash or with a URL
127
+ // however, the manifest property is only filled if it is a URL
128
+ ObjectPath.set(["parameters", "url"], cardData.navigation_target_url, oNavigationAction);
129
+ }
130
+
131
+ if (cardData.navigation_semantic_action) {
132
+ ObjectPath.set(["parameters", "intentAction"], cardData.navigation_semantic_action, oNavigationAction);
133
+ }
134
+
135
+ if (cardData.navigation_semantic_parameters_as_object) {
136
+ ObjectPath.set(["parameters", "intentParameters"], cardData.navigation_semantic_parameters_as_object, oNavigationAction);
137
+ }
138
+
139
+ return oManifest;
140
+ },
141
+
142
+ /**
143
+ * Extracts properties that can be translated from a CHIP instance bag
144
+ *
145
+ * @param {sap.ushell_abap.pbServices.ui2.Bag} bag A CHIP instance bag
146
+ * <pre>
147
+ * @returns {object} The translated properties. Example: {
148
+ * display_title_text: "I am a translated title",
149
+ * display_subtitle_text: "Some subtitle",
150
+ * display_search_keywords: "The search keywords"
151
+ * }
152
+ * </pre>
153
+ * @private
154
+ */
155
+ getTranslatablePropertiesFromBag: function (bag) {
156
+ const oTranslatableProperties = {};
157
+ let aTextNames;
158
+
159
+ if (bag && bag.getText && bag.getTextNames) {
160
+ aTextNames = bag.getTextNames();
161
+
162
+ aTextNames.forEach((sProperty) => {
163
+ oTranslatableProperties[sProperty] = bag.getText(sProperty);
164
+ });
165
+ }
166
+
167
+ return oTranslatableProperties;
168
+ },
169
+
170
+ /**
171
+ * Retrieves the card manifest's extracted data from the CHIP instance.
172
+ *
173
+ * @param {sap.ushell_abap.pbServices.ui2.ChipInstance} chipInstance A card CHIP instance
174
+ * @returns {object} The card data
175
+ * @private
176
+ */
177
+ getCardData: function (chipInstance) {
178
+ let oTilePropertiesBag;
179
+ let sTileConfiguration;
180
+
181
+ if (chipInstance.bag) {
182
+ oTilePropertiesBag = chipInstance.bag.getBag("tileProperties");
183
+ } else {
184
+ oTilePropertiesBag = chipInstance.getBag("tileProperties");
185
+ }
186
+
187
+ if (chipInstance.configuration) {
188
+ sTileConfiguration = chipInstance.configuration.getParameterValueAsString("tileConfiguration");
189
+ } else {
190
+ sTileConfiguration = chipInstance.getConfigurationParameter("tileConfiguration");
191
+ }
192
+
193
+ const oBagProperties = this.getTranslatablePropertiesFromBag(oTilePropertiesBag);
194
+ const oCardData = JSON.parse(sTileConfiguration || "{}");
195
+
196
+ if (oCardData.navigation_semantic_parameters) {
197
+ // eslint-disable-next-line camelcase
198
+ oCardData.navigation_semantic_parameters_as_object = this._parseParameters(oCardData.navigation_semantic_parameters);
199
+ }
200
+
201
+ Object.keys(oBagProperties).forEach((key) => {
202
+ oCardData[key] = oBagProperties[key];
203
+ });
204
+
205
+ return oCardData;
206
+ },
207
+
208
+ /**
209
+ * Parses the navigation parameters.
210
+ *
211
+ * @param {string} parameters The navigation parameters
212
+ * @returns {object} The navigation parameters
213
+ * @private
214
+ */
215
+ _parseParameters: function (parameters) {
216
+ const oParameters = UrlParsing.parseParameters(`?${parameters}`);
217
+
218
+ // the service returns arrays for the values in case there are multiple values for the same URL parameter
219
+ // however, we support only one value per parameter
220
+ Object.keys(oParameters).forEach((key) => {
221
+ oParameters[key] = oParameters[key][0];
222
+ });
223
+
224
+ return oParameters;
225
+ },
226
+
227
+ /**
228
+ * Replaces card manifest properties that are stored in the CHIP instance with a placeholder
229
+ * so that they are not stored redundantly.
230
+ *
231
+ * @param {object} manifest The card manifest
232
+ * @returns {object} A copy of the manifest with placeholders
233
+ */
234
+ _replaceDataWithPlaceholders: function (manifest) {
235
+ const oManifest = JSON.parse(JSON.stringify(manifest));
236
+ const oNavigationAction = this._getNavigationAction(oManifest);
237
+
238
+ if (ObjectPath.get(["sap.card", "header", "title"], oManifest)) {
239
+ ObjectPath.set(["sap.card", "header", "title"], this.PLACEHOLDERS.TITLE, oManifest);
240
+ }
241
+
242
+ if (ObjectPath.get(["sap.card", "header", "subTitle"], oManifest)) {
243
+ ObjectPath.set(["sap.card", "header", "subTitle"], this.PLACEHOLDERS.SUBTITLE, oManifest);
244
+ }
245
+
246
+ if (ObjectPath.get(["sap.app", "tags", "keywords"], oManifest)) {
247
+ ObjectPath.set(["sap.app", "tags", "keywords"], this.PLACEHOLDERS.SEARCH_KEYWORDS, oManifest);
248
+ }
249
+
250
+ if (ObjectPath.get(["sap.card", "header", "icon", "src"], oManifest)) {
251
+ ObjectPath.set(["sap.card", "header", "icon", "src"], this.PLACEHOLDERS.ICON, oManifest);
252
+ }
253
+
254
+ if (ObjectPath.get(["parameters", "intentSemanticObject"], oNavigationAction)) {
255
+ ObjectPath.set(["parameters", "intentSemanticObject"], this.PLACEHOLDERS.SEMANTIC_OBJECT, oNavigationAction);
256
+ }
257
+
258
+ if (ObjectPath.get(["parameters", "intentAction"], oNavigationAction)) {
259
+ ObjectPath.set(["parameters", "intentAction"], this.PLACEHOLDERS.ACTION, oNavigationAction);
260
+ }
261
+
262
+ if (ObjectPath.get(["parameters", "url"], oNavigationAction)) {
263
+ ObjectPath.set(["parameters", "url"], this.PLACEHOLDERS.TARGET_URL, oNavigationAction);
264
+ }
265
+
266
+ if (ObjectPath.get(["parameters", "intentParameters"], oNavigationAction)) {
267
+ ObjectPath.set(["parameters", "intentParameters"], this.PLACEHOLDERS.PARAMETERS, oNavigationAction);
268
+ }
269
+
270
+ return oManifest;
271
+ },
272
+
273
+ /**
274
+ * Retrieves the reference to the manifest's navigation action that contains the navigation target.
275
+ *
276
+ * @param {object} manifest The card's manifest
277
+ * @returns {object} The navigation action
278
+ * @private
279
+ */
280
+ _getNavigationAction: function (manifest) {
281
+ const aActions = ObjectPath.get(["sap.card", "header", "actions"], manifest);
282
+ let oAction;
283
+
284
+ if (aActions) {
285
+ for (let i = 0; i < aActions.length; i++) {
286
+ oAction = aActions[i];
287
+ if (oAction.type === "Navigation") {
288
+ return oAction;
289
+ }
290
+ }
291
+ }
292
+
293
+ return null;
294
+ }
295
+ };
296
+
297
+ return ManifestPropertyHelper;
298
+ });
@@ -0,0 +1,90 @@
1
+ // Copyright (c) 2009-2026 SAP SE, All Rights Reserved
2
+ /**
3
+ * @fileOverview The ABAP platform's transaction code settings entry component.
4
+ *
5
+ * @version 1.154.0
6
+ */
7
+ sap.ui.define([
8
+ "sap/ui/core/UIComponent",
9
+ "sap/ushell/Config",
10
+ "sap/ushell_abap/utils/UserPersonalization"
11
+ ], (
12
+ UIComponent,
13
+ Config,
14
+ UserPersonalization
15
+ ) => {
16
+ "use strict";
17
+
18
+ /**
19
+ * @alias sap.ushell_abap.components.settings.TransactionCode.Component
20
+ * @class
21
+ * @classdesc Provides the transaction code entry for the user settings dialog.
22
+ *
23
+ * @extends sap.ui.core.Component
24
+ *
25
+ * @since 1.153.0
26
+ * @private
27
+ */
28
+ return UIComponent.extend("sap.ushell_abap.components.settings.TransactionCode.Component", {
29
+ metadata: {
30
+ manifest: "json",
31
+ library: "sap.ushell_abap",
32
+ interfaces: ["sap.ui.core.IAsyncContentCreation"]
33
+ },
34
+
35
+ /**
36
+ * Returns the transaction code settings entry, or <code>undefined</code> when the
37
+ * administrator has not activated the feature.
38
+ *
39
+ * @returns {Promise<object|undefined>} The settings entry, or undefined when not applicable.
40
+ *
41
+ * @since 1.153.0
42
+ * @private
43
+ */
44
+ getEntry: async function () {
45
+ if (Config.last("/abap/ui/displayTransaction") !== "Display_AllowUser") {
46
+ await this.destroy();
47
+ return;
48
+ }
49
+
50
+ const oResourceBundle = await this.getModel("i18n").getResourceBundle();
51
+
52
+ return {
53
+ id: "transactionCodeSettingsEntry",
54
+ entryHelpID: "transactionCodeSettingsEntry",
55
+ title: oResourceBundle.getText("FlpSettings_transactionCode_sectionTitle"),
56
+ valueResult: null,
57
+ contentResult: null,
58
+ icon: "sap-icon://syntax",
59
+ groupingEnablement: true,
60
+ groupingId: "appearance",
61
+ groupingTabHelpId: "transactionCodeSettingsEntry",
62
+ groupingTabTitle: oResourceBundle.getText("FlpSettings_transactionCode_sectionTitle"),
63
+ valueArgument: async () => {
64
+ const bEnabled = await UserPersonalization.getDisplayTransactionCode();
65
+ return oResourceBundle.getText(bEnabled
66
+ ? "FlpSettings_transactionCode_shown"
67
+ : "FlpSettings_transactionCode_hidden");
68
+ },
69
+ contentFunc: async () => {
70
+ return new sap.ui.core.ComponentContainer({
71
+ component: this,
72
+ height: "100%",
73
+ width: "100%",
74
+ async: true
75
+ });
76
+ },
77
+ onSave: async (fnUpdateUserPreferences) => {
78
+ await this.rootControlLoaded();
79
+ const oView = this.getRootControl();
80
+ return oView.getController().onSave(fnUpdateUserPreferences);
81
+ },
82
+ onCancel: async () => {
83
+ await this.rootControlLoaded();
84
+ const oView = this.getRootControl();
85
+ oView.getController().onCancel();
86
+ }
87
+ };
88
+ }
89
+ });
90
+ });
@@ -0,0 +1,110 @@
1
+ // Copyright (c) 2009-2026 SAP SE, All Rights Reserved
2
+ /**
3
+ * @fileOverview Controller of the ABAP transaction code user settings entry.
4
+ *
5
+ * @version 1.154.0
6
+ */
7
+ sap.ui.define([
8
+ "sap/base/Log",
9
+ "sap/ui/core/message/Message",
10
+ "sap/ui/core/message/MessageType",
11
+ "sap/ui/core/mvc/Controller",
12
+ "sap/ui/model/json/JSONModel",
13
+ "sap/ushell/utils/LaunchpadError",
14
+ "sap/ushell_abap/utils/UserPersonalization"
15
+ ], (
16
+ Log,
17
+ Message,
18
+ MessageType,
19
+ Controller,
20
+ JSONModel,
21
+ LaunchpadError,
22
+ UserPersonalization
23
+ ) => {
24
+ "use strict";
25
+
26
+ /**
27
+ * Controller of the ABAP transaction code user settings entry.
28
+ *
29
+ * @since 1.153.0
30
+ * @private
31
+ */
32
+ return Controller.extend("sap.ushell_abap.components.settings.TransactionCode.TransactionCode", {
33
+ /**
34
+ * Initializes the config model and loads the persisted user preference.
35
+ *
36
+ * @since 1.153.0
37
+ * @private
38
+ */
39
+ onInit: function () {
40
+ const oView = this.getView();
41
+
42
+ const oConfigModel = new JSONModel({
43
+ transactionCodeSelected: false
44
+ });
45
+ oView.setModel(oConfigModel, "config");
46
+
47
+ // The effective setting may read user personalization, so it is resolved asynchronously.
48
+ UserPersonalization.getDisplayTransactionCode().then((bEnabled) => {
49
+ oConfigModel.setProperty("/transactionCodeSelected", bEnabled);
50
+ });
51
+ },
52
+
53
+ /**
54
+ * Resets the toggle to the persisted value.
55
+ *
56
+ * @returns {Promise<undefined>} Resolves once the persisted value was applied.
57
+ *
58
+ * @since 1.153.0
59
+ * @private
60
+ */
61
+ onCancel: async function () {
62
+ const oConfigModel = this.getView().getModel("config");
63
+ const bEnabled = await UserPersonalization.getDisplayTransactionCode();
64
+
65
+ oConfigModel.setProperty("/transactionCodeSelected", bEnabled);
66
+ },
67
+
68
+ /**
69
+ * Persists the toggle value.
70
+ *
71
+ * @returns {Promise<undefined>} Resolves once the new value was persisted, or immediately if
72
+ * unchanged. Rejects with a {@link sap.ui.core.message.Message} on failure.
73
+ *
74
+ * @since 1.153.0
75
+ * @private
76
+ */
77
+ onSave: async function () {
78
+ const bOldValue = await UserPersonalization.getDisplayTransactionCode();
79
+ const bCurrentValue = this.getView().getModel("config").getProperty("/transactionCodeSelected");
80
+ if (bCurrentValue === bOldValue) {
81
+ return;
82
+ }
83
+
84
+ try {
85
+ await UserPersonalization.setDisplayTransactionCode(bCurrentValue);
86
+ } catch (oError) {
87
+ Log.error("Cannot save transaction code on tiles configuration", oError);
88
+
89
+ let oMessage;
90
+ if (oError instanceof LaunchpadError) {
91
+ oMessage = new Message({
92
+ type: MessageType.Error,
93
+ description: oError.message,
94
+ message: oError.details?.message.value,
95
+ date: oError.details?.innererror.timestamp,
96
+ httpStatus: oError.details?.httpStatus
97
+ });
98
+ } else {
99
+ oMessage = new Message({
100
+ type: MessageType.Error,
101
+ description: oError.message,
102
+ message: oError.message
103
+ });
104
+ }
105
+
106
+ throw oMessage;
107
+ }
108
+ }
109
+ });
110
+ });
@@ -0,0 +1,16 @@
1
+ <mvc:View
2
+ xmlns="sap.m"
3
+ xmlns:mvc="sap.ui.core.mvc"
4
+ controllerName="sap.ushell_abap.components.settings.TransactionCode.TransactionCode">
5
+ <Panel>
6
+ <CheckBox
7
+ id="transactionCodeCheckBox"
8
+ text="{i18n>FlpSettings_transactionCode_label}"
9
+ selected="{config>/transactionCodeSelected}" />
10
+ <VBox class="sapUshellFlpSettingsDescriptionBorder">
11
+ <Text
12
+ class="sapUshellFlpSettingsDescription sapUshellFlpSettingsWide"
13
+ text="{i18n>FlpSettings_transactionCode_description}" />
14
+ </VBox>
15
+ </Panel>
16
+ </mvc:View>
@@ -0,0 +1,17 @@
1
+ # Resource bundle for the TransactionCode component (UserSettings entry)
2
+ # __ldi.translation.uuid=2b979b60-ab52-11f1-ab3b-0800200c9a66
3
+
4
+ #XTIT: User Settings - Section title
5
+ FlpSettings_transactionCode_sectionTitle=Additional App Information
6
+
7
+ #XFLD: User Settings - Summary label when transaction codes are displayed
8
+ FlpSettings_transactionCode_shown=State: On
9
+
10
+ #XFLD: User Settings - Summary label when transaction codes are hidden
11
+ FlpSettings_transactionCode_hidden=State: Off
12
+
13
+ #XFLD: User Settings - Setting checkbox label
14
+ FlpSettings_transactionCode_label=Display Transaction on Apps
15
+
16
+ #YTXT: User Settings - Setting description
17
+ FlpSettings_transactionCode_description=Enable to display the app's transaction directly on tiles, in search results, in the navigation menu, and in the app finder.
@@ -0,0 +1,10 @@
1
+
2
+ FlpSettings_transactionCode_sectionTitle=\u0645\u0639\u0644\u0648\u0645\u0627\u062A \u0627\u0644\u062A\u0637\u0628\u064A\u0642 \u0627\u0644\u0625\u0636\u0627\u0641\u064A\u0629
3
+
4
+ FlpSettings_transactionCode_shown=\u0627\u0644\u062D\u0627\u0644\u0629\: \u062A\u0634\u063A\u064A\u0644
5
+
6
+ FlpSettings_transactionCode_hidden=\u0627\u0644\u062D\u0627\u0644\u0629\: \u0625\u064A\u0642\u0627\u0641 \u062A\u0634\u063A\u064A\u0644
7
+
8
+ FlpSettings_transactionCode_label=\u0639\u0631\u0636 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0629 \u0641\u064A \u0627\u0644\u062A\u0637\u0628\u064A\u0642\u0627\u062A
9
+
10
+ FlpSettings_transactionCode_description=\u0642\u0645 \u0628\u0627\u0644\u062A\u0645\u0643\u064A\u0646 \u0644\u0639\u0631\u0636 \u0645\u0639\u0627\u0645\u0644\u0629 \u0627\u0644\u062A\u0637\u0628\u064A\u0642 \u0645\u0628\u0627\u0634\u0631\u0629\u064B \u0639\u0644\u0649 \u0627\u0644\u0625\u0637\u0627\u0631\u0627\u062A \u0648\u0641\u064A \u0646\u062A\u0627\u0626\u062C \u0627\u0644\u0628\u062D\u062B \u0648\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u062A\u0646\u0642\u0644 \u0648\u0623\u062F\u0627\u0629 \u0627\u0644\u0628\u062D\u062B \u0639\u0646 \u0627\u0644\u062A\u0637\u0628\u064A\u0642\u0627\u062A.
@@ -0,0 +1,10 @@
1
+
2
+ FlpSettings_transactionCode_sectionTitle=\u0414\u043E\u043F\u044A\u043B\u043D\u0438\u0442\u0435\u043B\u043D\u0430 \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044F \u0437\u0430 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435\u0442\u043E
3
+
4
+ FlpSettings_transactionCode_shown=\u0421\u044A\u0441\u0442\u043E\u044F\u043D\u0438\u0435\: \u0412\u043A\u043B\u044E\u0447\u0435\u043D\u043E
5
+
6
+ FlpSettings_transactionCode_hidden=\u0421\u044A\u0441\u0442\u043E\u044F\u043D\u0438\u0435\: \u0418\u0437\u043A\u043B\u044E\u0447\u0435\u043D\u043E
7
+
8
+ FlpSettings_transactionCode_label=\u041F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435 \u043D\u0430 \u0442\u0440\u0430\u043D\u0437\u0430\u043A\u0446\u0438\u044F\u0442\u0430 \u0432 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F\u0442\u0430
9
+
10
+ FlpSettings_transactionCode_description=\u0410\u043A\u0442\u0438\u0432\u0438\u0440\u0430\u0439\u0442\u0435, \u0437\u0430 \u0434\u0430 \u0441\u0435 \u043F\u043E\u043A\u0430\u0437\u0432\u0430 \u0442\u0440\u0430\u043D\u0437\u0430\u043A\u0446\u0438\u044F\u0442\u0430 \u043D\u0430 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435\u0442\u043E \u0434\u0438\u0440\u0435\u043A\u0442\u043D\u043E \u0432 \u043F\u043B\u043E\u0447\u043A\u0438\u0442\u0435, \u0432 \u0440\u0435\u0437\u0443\u043B\u0442\u0430\u0442\u0438\u0442\u0435 \u043E\u0442 \u0442\u044A\u0440\u0441\u0435\u043D\u0435, \u0432 \u043C\u0435\u043D\u044E\u0442\u043E \u0437\u0430 \u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044F \u0438 \u0432 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043E\u0442\u043E \u043D\u0430 \u043D\u0430\u043C\u0438\u0440\u0430\u043D\u0435 \u043D\u0430 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F.
@@ -0,0 +1,10 @@
1
+
2
+ FlpSettings_transactionCode_sectionTitle=Informaci\u00F3 addicional de l'aplicaci\u00F3
3
+
4
+ FlpSettings_transactionCode_shown=Estat\: Activat
5
+
6
+ FlpSettings_transactionCode_hidden=Estat\: Desactivat
7
+
8
+ FlpSettings_transactionCode_label=Visualitzar transacci\u00F3 a les aplicacions
9
+
10
+ FlpSettings_transactionCode_description=Activar per mostrar la transacci\u00F3 de l'aplicaci\u00F3 directament als mosaics, als resultats de cerca, al men\u00FA de navegaci\u00F3 i al cercador d'aplicacions.
@@ -0,0 +1,10 @@
1
+
2
+ FlpSettings_transactionCode_sectionTitle=Dodatne informacije o aplikaciji
3
+
4
+ FlpSettings_transactionCode_shown=Status\: Uklju\u010Deno
5
+
6
+ FlpSettings_transactionCode_hidden=Status; Isklju\u010Deno
7
+
8
+ FlpSettings_transactionCode_label=Prika\u017Ei transakciju u aplikacijama
9
+
10
+ FlpSettings_transactionCode_description=Aktivirajte da biste prikazali aplikacijsku transakciju direktno na podekranima, tra\u017Eenim rezultatima, u meniju usmjeravanja i u nalaza\u010Du aplikacija.
@@ -0,0 +1,10 @@
1
+
2
+ FlpSettings_transactionCode_sectionTitle=Dal\u0161\u00ED informace o aplikaci
3
+
4
+ FlpSettings_transactionCode_shown=Stav\: Zapnuto
5
+
6
+ FlpSettings_transactionCode_hidden=Stav\: Vypnuto
7
+
8
+ FlpSettings_transactionCode_label=Zobrazit transakci v aplikac\u00EDch
9
+
10
+ FlpSettings_transactionCode_description=Pro zobrazen\u00ED transakce aktivujte aplikace p\u0159\u00EDmo na dla\u017Edici, ve v\u00FDsledc\u00EDch hled\u00E1n\u00ED, v naviga\u010Dn\u00EDm menu a ve vyhled\u00E1va\u010Di aplikac\u00ED.
@@ -0,0 +1,10 @@
1
+
2
+ FlpSettings_transactionCode_sectionTitle=Gwybodaeth Ychwanegol am Ap
3
+
4
+ FlpSettings_transactionCode_shown=Cyflwr\: Ymlaen
5
+
6
+ FlpSettings_transactionCode_hidden=Cyflwr\: Diffodd
7
+
8
+ FlpSettings_transactionCode_label=Dangos Trafodion ar Apiau
9
+
10
+ FlpSettings_transactionCode_description=Galluogi i ddangos trafodiad yr ap yn syth ar y deils, yn y canlyniadau chwilio, yn y ddewislen lywio, ac yn y canfyddwr apiau.
@@ -0,0 +1,10 @@
1
+
2
+ FlpSettings_transactionCode_sectionTitle=Supplerende app-oplysninger
3
+
4
+ FlpSettings_transactionCode_shown=Tilstand\: Til
5
+
6
+ FlpSettings_transactionCode_hidden=Tilstand\: Fra
7
+
8
+ FlpSettings_transactionCode_label=Vis transaktion p\u00E5 apps
9
+
10
+ FlpSettings_transactionCode_description=Aktiver for at vise appens transaktion direkte p\u00E5 fliser, i s\u00F8geresultater, i navigationsmenuen og i App Finder.
@@ -0,0 +1,10 @@
1
+
2
+ FlpSettings_transactionCode_sectionTitle=Zus\u00E4tzliche App-Informationen
3
+
4
+ FlpSettings_transactionCode_shown=Status\: Ein
5
+
6
+ FlpSettings_transactionCode_hidden=Zustand\: Aus
7
+
8
+ FlpSettings_transactionCode_label=Display Transaction on Apps
9
+
10
+ FlpSettings_transactionCode_description=Enable to display the app's transaction directly on tiles, in search results, in the navigation menu, and in the app finder.
@@ -0,0 +1,10 @@
1
+
2
+ FlpSettings_transactionCode_sectionTitle=\u03A0\u03C1\u03CC\u03C3\u03B8\u03B5\u03C4\u03B5\u03C2 \u03A0\u03BB\u03B7\u03C1\u03BF\u03C6\u03BF\u03C1\u03AF\u03B5\u03C2 \u0395\u03C6\u03B1\u03C1\u03BC\u03BF\u03B3\u03AE\u03C2
3
+
4
+ FlpSettings_transactionCode_shown=\u039A\u03B1\u03C4\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7\: \u03A3\u03C4\u03B9\u03C2
5
+
6
+ FlpSettings_transactionCode_hidden=\u039A\u03B1\u03C4\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7\: \u0391\u03BD\u03B5\u03BD\u03B5\u03C1\u03B3\u03CC
7
+
8
+ FlpSettings_transactionCode_label=\u0395\u03BC\u03C6\u03AC\u03BD\u03B9\u03C3\u03B7 \u03A3\u03C5\u03BD\u03B1\u03BB\u03BB\u03B1\u03B3\u03AE\u03C2 \u03C3\u03B5 \u0395\u03C6\u03B1\u03C1\u03BC\u03BF\u03B3\u03AD\u03C2
9
+
10
+ FlpSettings_transactionCode_description=\u0395\u03BD\u03B5\u03C1\u03B3\u03BF\u03C0\u03BF\u03B9\u03AE\u03C3\u03C4\u03B5 \u03C4\u03B7\u03BD \u03B5\u03BC\u03C6\u03AC\u03BD\u03B9\u03C3\u03B7 \u03C4\u03B7\u03C2 \u03C3\u03C5\u03BD\u03B1\u03BB\u03BB\u03B1\u03B3\u03AE\u03C2 \u03B5\u03C6\u03B1\u03C1\u03BC\u03BF\u03B3\u03AE\u03C2 \u03B1\u03C0\u03B5\u03C5\u03B8\u03B5\u03AF\u03B1\u03C2 \u03C3\u03C4\u03B1 \u03C0\u03BB\u03B1\u03BA\u03AF\u03B4\u03B9\u03B1, \u03C3\u03C4\u03BF \u03BC\u03B5\u03BD\u03BF\u03CD \u03C0\u03BB\u03BF\u03AE\u03B3\u03B7\u03C3\u03B7\u03C2 \u03BA\u03B1\u03B9 \u03C3\u03C4\u03B7\u03BD \u03B5\u03CD\u03C1\u03B5\u03C3\u03B7 \u03B5\u03C6\u03B1\u03C1\u03BC\u03BF\u03B3\u03AE\u03C2.
@@ -0,0 +1,10 @@
1
+
2
+ FlpSettings_transactionCode_sectionTitle=Additional App Information
3
+
4
+ FlpSettings_transactionCode_shown=State\: On
5
+
6
+ FlpSettings_transactionCode_hidden=State\: Off
7
+
8
+ FlpSettings_transactionCode_label=Display Transaction on Apps
9
+
10
+ FlpSettings_transactionCode_description=Enable to display the app's transaction directly on tiles, in search results, in the navigation menu, and in the app finder.
@@ -0,0 +1,10 @@
1
+
2
+ FlpSettings_transactionCode_sectionTitle=Additional App Information
3
+
4
+ FlpSettings_transactionCode_shown=State\: On
5
+
6
+ FlpSettings_transactionCode_hidden=State\: Off
7
+
8
+ FlpSettings_transactionCode_label=Display Transaction on Apps
9
+
10
+ FlpSettings_transactionCode_description=Enable to display the app's transaction directly on tiles, in search results, in the navigation menu and in the app finder.