@sapui5/sap.ushell_abap 1.145.1 → 1.147.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 (62) hide show
  1. package/package.json +4 -4
  2. package/src/main/js/sap/ushell_abap/.library +8 -7
  3. package/src/main/js/sap/ushell_abap/adapters/abap/AdapterContainer.js +4 -5
  4. package/src/main/js/sap/ushell_abap/adapters/abap/AppStateAdapter.js +1 -1
  5. package/src/main/js/sap/ushell_abap/adapters/abap/ClientSideTargetResolutionAdapter.js +143 -69
  6. package/src/main/js/sap/ushell_abap/adapters/abap/CommonDataModelAdapter.js +1 -1
  7. package/src/main/js/sap/ushell_abap/adapters/abap/ConfigurationDefaultsAdapter.js +7 -4
  8. package/src/main/js/sap/ushell_abap/adapters/abap/ContainerAdapter.js +19 -10
  9. package/src/main/js/sap/ushell_abap/adapters/abap/FlpLaunchPageAdapter.js +148 -109
  10. package/src/main/js/sap/ushell_abap/adapters/abap/LaunchPageAdapter.js +1 -1
  11. package/src/main/js/sap/ushell_abap/adapters/abap/NavTargetResolutionAdapter.js +1 -1
  12. package/src/main/js/sap/ushell_abap/adapters/abap/NavTargetResolutionInternalAdapter.js +1 -1
  13. package/src/main/js/sap/ushell_abap/adapters/abap/PageBuildingAdapter.js +1 -1
  14. package/src/main/js/sap/ushell_abap/adapters/abap/PagePersistenceAdapter.js +9 -10
  15. package/src/main/js/sap/ushell_abap/adapters/abap/PersonalizationAdapter.js +1 -1
  16. package/src/main/js/sap/ushell_abap/adapters/abap/PersonalizationV2Adapter.js +1 -1
  17. package/src/main/js/sap/ushell_abap/adapters/abap/SearchAdapter.js +1 -1
  18. package/src/main/js/sap/ushell_abap/adapters/abap/SupportTicketAdapter.js +1 -1
  19. package/src/main/js/sap/ushell_abap/adapters/abap/Ui5ComponentLoaderAdapter.js +1 -1
  20. package/src/main/js/sap/ushell_abap/adapters/hana/ContainerAdapter.js +1 -1
  21. package/src/main/js/sap/ushell_abap/bootstrap/BootTask/PrepareDirectAppStart.js +20 -0
  22. package/src/main/js/sap/ushell_abap/bootstrap/BootTask/RequestGroups.js +51 -0
  23. package/src/main/js/sap/ushell_abap/bootstrap/BootTask/RequestTargetMappings.js +29 -0
  24. package/src/main/js/sap/ushell_abap/bootstrap/BootTask.js +47 -0
  25. package/src/main/js/sap/ushell_abap/bootstrap/ConfigurationProvider.js +87 -0
  26. package/src/main/js/sap/ushell_abap/bootstrap/DirectAppStart.js +231 -0
  27. package/src/main/js/sap/ushell_abap/bootstrap/LoadLaunchpad/CreateRenderer.js +43 -0
  28. package/src/main/js/sap/ushell_abap/bootstrap/LoadLaunchpad/InitXhrLogon.js +148 -0
  29. package/src/main/js/sap/ushell_abap/bootstrap/LoadLaunchpad/RequestPages.js +86 -0
  30. package/src/main/js/sap/ushell_abap/bootstrap/LoadLaunchpad.js +63 -0
  31. package/src/main/js/sap/ushell_abap/bootstrap/LoadLaunchpadModule.js +11 -0
  32. package/src/main/js/sap/ushell_abap/bootstrap/PageSetsRequestHandler.js +247 -0
  33. package/src/main/js/sap/ushell_abap/bootstrap/PlatformConfig.js +385 -0
  34. package/src/main/js/sap/ushell_abap/bootstrap/{evo/SAPCompanionConditionSetter.js → SAPCompanionConditionSetter.js} +6 -4
  35. package/src/main/js/sap/ushell_abap/bootstrap/StartupRequestHandler.js +145 -0
  36. package/src/main/js/sap/ushell_abap/bootstrap/ThemeHandler.js +276 -0
  37. package/src/main/js/sap/ushell_abap/bootstrap/XhrFactory.js +69 -0
  38. package/src/main/js/sap/ushell_abap/bootstrap/{evo/XhrLogonEventHandler.js → XhrLogonEventHandler.js} +13 -7
  39. package/src/main/js/sap/ushell_abap/bootstrap/XhrLogonLibLoader.js +51 -0
  40. package/src/main/js/sap/ushell_abap/bootstrap/abap-def-dev.js +20 -0
  41. package/src/main/js/sap/ushell_abap/bootstrap/{evo/abap-def-loader.js → abap-def-loader.js} +2 -2
  42. package/src/main/js/sap/ushell_abap/bootstrap/abap-def.js +22 -0
  43. package/src/main/js/sap/ushell_abap/bootstrap/{evo/abap.constants.js → abapConstants.js} +8 -2
  44. package/src/main/js/sap/ushell_abap/bootstrap/evo/abap.js +1 -1
  45. package/src/main/js/sap/ushell_abap/components/TCodeNavigation/MessageCode.js +18 -1
  46. package/src/main/js/sap/ushell_abap/components/TCodeNavigation.js +27 -16
  47. package/src/main/js/sap/ushell_abap/library.js +1 -1
  48. package/src/main/js/sap/ushell_abap/pbServices/ui2/Contracts.js +33 -0
  49. package/ui5.yaml +7 -6
  50. package/src/main/js/sap/ushell_abap/bootstrap/evo/abap-def-dev.js +0 -42
  51. package/src/main/js/sap/ushell_abap/bootstrap/evo/abap-def.js +0 -45
  52. package/src/main/js/sap/ushell_abap/bootstrap/evo/abap.bootstrap.utils.js +0 -172
  53. package/src/main/js/sap/ushell_abap/bootstrap/evo/abap.configure.theme.js +0 -28
  54. package/src/main/js/sap/ushell_abap/bootstrap/evo/abap.configure.ushell.js +0 -176
  55. package/src/main/js/sap/ushell_abap/bootstrap/evo/abap.load.launchpad.js +0 -72
  56. package/src/main/js/sap/ushell_abap/bootstrap/evo/abap.request.pageset.js +0 -219
  57. package/src/main/js/sap/ushell_abap/bootstrap/evo/abap.request.startup.js +0 -154
  58. package/src/main/js/sap/ushell_abap/bootstrap/evo/abap.theme.handler.js +0 -75
  59. package/src/main/js/sap/ushell_abap/bootstrap/evo/abap.xhrlogon.LibLoader.js +0 -21
  60. package/src/main/js/sap/ushell_abap/bootstrap/evo/abap.xhrlogon.configure.js +0 -62
  61. package/src/main/js/sap/ushell_abap/bootstrap/evo/abap.xhrlogon.handler.js +0 -82
  62. package/src/main/js/sap/ushell_abap/bootstrap/evo/boottask.js +0 -948
package/package.json CHANGED
@@ -1,21 +1,21 @@
1
1
  {
2
2
  "name": "@sapui5/sap.ushell_abap",
3
- "version": "1.145.1",
3
+ "version": "1.147.0",
4
4
  "description": "SAPUI5 Library sap.ushell_abap",
5
+ "author": "SAP SE (https://www.sap.com)",
6
+ "license": "SEE LICENSE IN LICENSE.txt",
5
7
  "homepage": "https://sap.github.io/ui5-tooling/pages/SAPUI5/",
6
8
  "keywords": [
7
9
  "sapui5",
8
10
  "ui5"
9
11
  ],
10
- "author": "SAP SE (https://www.sap.com)",
11
- "license": "SEE LICENSE IN LICENSE.txt",
12
12
  "scripts": {
13
13
  "build": "cross-env-shell ui5 build --exclude-task=generateLibraryPreload --framework-version $npm_package_version",
14
14
  "build-all": "cross-env-shell ui5 build --all --framework-version $npm_package_version",
15
15
  "build-themes": "cross-env-shell ui5 build --exclude-task=* --include-task=buildThemes --framework-version $npm_package_version"
16
16
  },
17
17
  "devDependencies": {
18
- "@ui5/cli": "^4.0.24",
18
+ "@ui5/cli": "^4.0.50",
19
19
  "cross-env": "^7.0.3"
20
20
  }
21
21
  }
@@ -2,7 +2,7 @@
2
2
  <library xmlns="http://www.sap.com/sap.ui.library.xsd">
3
3
  <name>sap.ushell_abap</name>
4
4
  <vendor>SAP SE</vendor>
5
- <version>1.145.1</version>
5
+ <version>1.147.0</version>
6
6
  <copyright>Copyright (c) 2009-2026 SAP SE, All Rights Reserved</copyright>
7
7
  <documentation>SAP library: sap.ushell_abap</documentation>
8
8
 
@@ -54,13 +54,14 @@
54
54
  <exclude name="sap.ushell_abap.bootstrap.evo.abap-dbg" />
55
55
  </jsdoc>
56
56
  <jscoverage xmlns="http://www.sap.com/ui5/buildext/jscoverage" >
57
- <!-- excludes for JScoverage -->
58
57
  <!-- Bundles -->
59
- <exclude name="sap.ushell_abap.bootstrap.appruntime-min*" />
60
- <exclude name="sap.ushell_abap.bootstrap.evo.abap*" />
61
- <exclude name="sap.ushell_abap.bootstrap.evo.core-min*" />
62
- <exclude name="sap.ushell_abap.bootstrap.evo.core-ext-light*" />
63
- <exclude name="sap.ushell_abap.thirdparty.sap-xhrlib-esm*" />
58
+ <exclude name="**/*-preload" />
59
+ <exclude name="**/preload-bundles/**/*" />
60
+ <exclude name="sap/ushell_abap/bootstrap/appruntime-min*" />
61
+ <exclude name="sap/ushell_abap/bootstrap/evo/abap*" />
62
+ <exclude name="sap/ushell_abap/bootstrap/evo/core-min*" />
63
+ <exclude name="sap/ushell_abap/bootstrap/evo/core-ext-light*" />
64
+ <exclude name="sap/ushell_abap/thirdparty/sap-xhrlib-esm*" />
64
65
  </jscoverage>
65
66
  <releasenotes xmlns="http://www.sap.com/ui5/buildext/releasenotes"
66
67
  url="../../../test-resources/sap/ushell_abap/relnotes/changes-{major}.{minor}.json"
@@ -6,7 +6,7 @@ sap.ui.define([
6
6
  "sap/ui/thirdparty/jquery",
7
7
  "sap/ui/core/format/DateFormat",
8
8
  "sap/ushell_abap/pbServices/ui2/ODataService",
9
- "sap/ushell/services/_Personalization/constants",
9
+ "sap/ushell/services/PersonalizationV2/constants",
10
10
  "sap/ushell/utils/LaunchpadError"
11
11
  ], (
12
12
  ObjectPath,
@@ -14,7 +14,7 @@ sap.ui.define([
14
14
  jQuery,
15
15
  DateFormat,
16
16
  ODataService,
17
- constants,
17
+ PersonalizationV2Constants,
18
18
  LaunchpadError
19
19
  ) => {
20
20
  "use strict";
@@ -368,9 +368,8 @@ sap.ui.define([
368
368
  if (!oScope) {
369
369
  return "U";
370
370
  }
371
- const oConstants = constants;
372
- if (oScope.keyCategory && oScope.keyCategory === oConstants.keyCategory.FIXED_KEY &&
373
- oScope.writeFrequency && oScope.writeFrequency === oConstants.writeFrequency.LOW &&
371
+ if (oScope.keyCategory && oScope.keyCategory === PersonalizationV2Constants.keyCategory.FIXED_KEY &&
372
+ oScope.writeFrequency && oScope.writeFrequency === PersonalizationV2Constants.writeFrequency.LOW &&
374
373
  oScope.clientStorageAllowed && oScope.clientStorageAllowed === true) {
375
374
  return "P";
376
375
  }
@@ -2,7 +2,7 @@
2
2
 
3
3
  /**
4
4
  * @fileOverview The Unified Shell's AppStateAdapter for the ABAP platform.
5
- * @version 1.145.1
5
+ * @version 1.147.0
6
6
  */
7
7
  sap.ui.define([
8
8
  "sap/base/util/ObjectPath",
@@ -9,12 +9,13 @@
9
9
  * <li>provide the resolveHashFragmentFallback function, a fallback method called by ClientSideTargetResolution service.</li>
10
10
  * </ul>
11
11
  *
12
- * @version 1.145.1
12
+ * @version 1.147.0
13
13
  */
14
14
  sap.ui.define([
15
15
  "sap/base/util/ObjectPath",
16
16
  "sap/base/util/isPlainObject",
17
17
  "sap/base/util/deepExtend",
18
+ "sap/ushell/base/SAPBusinessClientEnablement",
18
19
  "sap/ushell/utils",
19
20
  "sap/ushell/utils/UrlParsing",
20
21
  "sap/base/Log",
@@ -26,6 +27,7 @@ sap.ui.define([
26
27
  ObjectPath,
27
28
  isPlainObject,
28
29
  deepExtend,
30
+ SAPBusinessClientEnablement,
29
31
  ushellUtils,
30
32
  UrlParsing,
31
33
  Log,
@@ -70,7 +72,6 @@ sap.ui.define([
70
72
  * @property {string} postParameters The post parameters of the source.
71
73
  * @property {string} url The URL of the source.
72
74
  * @property {string} systemAlias The system alias of the source.
73
- * @property {sap.ushell.services.ClientSideTargetResolution.DeviceTypes} [formfactors] The form factors of the source.
74
75
  * @property {sap.ushell.services.ClientSideTargetResolution.DeviceTypes} [formFactors] The form factors of the source.
75
76
  * @property {sap.ushell.services.ClientSideTargetResolution.Signature} signature The signature of the source.
76
77
  * @property {object} parameterMappings The parameter mappings of the source.
@@ -80,9 +81,6 @@ sap.ui.define([
80
81
  * @property {string} catalogId The catalog ID of the source.
81
82
  * @property {string} tmChipId The TM chip ID of the source.
82
83
  * @property {string} tcode The transaction code of the LADI/Target Mapping.
83
- * @property {string} isDefaultLadi Indicates whether the LADI/Target Mapping is default.
84
- * @property {string} ladiHasTiles Indicates whether the LADI/Target Mapping has tiles.
85
- * @property {string} defaultTileParams The default tile parameters of the LADI/Target Mapping.
86
84
  *
87
85
  * @since 1.135.0
88
86
  * @private
@@ -309,10 +307,10 @@ sap.ui.define([
309
307
  if (oAppDependencies.url.toUpperCase().indexOf(oUri.path().toUpperCase()) !== 0) {
310
308
  // No applicationDependencies in this case as they belong to the wrong app
311
309
  Log.debug("Component URL defined in target mapping "
312
- + "does not match the URL retrieved from application index. "
313
- + "The URL of the application index is used for further processing.",
314
- `Target mapping URL: ${oResult.url}\nApplication index URL: ${oAppDependencies.url}`,
315
- "sap.ushell_abap.bootstrap.abap");
310
+ + "does not match the URL retrieved from application index. "
311
+ + "The URL of the application index is used for further processing.",
312
+ `Target mapping URL: ${oResult.url}\nApplication index URL: ${oAppDependencies.url}`,
313
+ "sap.ushell_abap.bootstrap.abap");
316
314
  }
317
315
  oUri.path(oAppDependencies.url);
318
316
  sUrl = oUri.toString();
@@ -326,8 +324,7 @@ sap.ui.define([
326
324
  oAdjustedResult.applicationDependencies = oAppDependencies;
327
325
  } catch (oError) {
328
326
  Log.error(
329
- `Parsing of applicationDependencies attribute in resolveLink result failed for SAPUI5 component '${
330
- sComponentName}'`,
327
+ `Parsing of applicationDependencies attribute in resolveLink result failed for SAPUI5 component '${sComponentName}'`,
331
328
  oError,
332
329
  "sap.ushell_abap.bootstrap.abap"
333
330
  );
@@ -401,8 +398,8 @@ sap.ui.define([
401
398
  return new Promise((fnResolve, fnReject) => {
402
399
  this._oInitialSegmentPromise.then((aInitialSegmentAndTargetMappings) => {
403
400
  if (aInitialSegmentAndTargetMappings === null) {
404
- // When this promise resolved with null it means that target mappings won't be taken from an initial segment ever
405
- // in the future (mostly likely because this is not needed, e.g., no direct start).
401
+ // When this promise resolved with null it means that target mappings won't be taken from an initial segment ever
402
+ // in the future (mostly likely because this is not needed, e.g., no direct start).
406
403
  return;
407
404
  }
408
405
 
@@ -412,7 +409,9 @@ sap.ui.define([
412
409
  "",
413
410
  "sap.ushell_abap.adapters.abap.ClientSideTargetResolutionAdapter"
414
411
  );
415
- this._aInbounds = this._formatDirectStart(this._aTargetMappings);
412
+
413
+ ({ aResult: this._aInbounds, oResultABAP: this._oInboundsABAP } = this._formatDirectStart(this._aTargetMappings));
414
+
416
415
  fnResolve(this._aInbounds);
417
416
  } else {
418
417
  Log.debug(
@@ -432,8 +431,7 @@ sap.ui.define([
432
431
  "sap.ushell_abap.adapters.abap.ClientSideTargetResolutionAdapter"
433
432
  );
434
433
 
435
- // convert (once) when needed
436
- this._aInbounds = this._formatDirectStart(this._aTargetMappings);
434
+ ({ aResult: this._aInbounds, oResultABAP: this._oInboundsABAP } = this._formatDirectStart(this._aTargetMappings));
437
435
 
438
436
  // we don't want to check for the initial segment in the future anymore, since we've got all the inbounds now.
439
437
  this.getInbounds = function () {
@@ -447,6 +445,60 @@ sap.ui.define([
447
445
  });
448
446
  };
449
447
 
448
+ /**
449
+ * Creates a new array of inbound objects enriched with ABAP-specific properties.
450
+ *
451
+ * This method merges the ABAP-specific properties (stored in `this._oInboundsABAP`)
452
+ * into the corresponding inbound objects within the main `this._aInbounds` array.
453
+ * The merge is performed by matching the `id` of each inbound.
454
+ *
455
+ * @param {sap.ushell.services.ClientSideTargetResolution.Inbound[]} aBasicInbounds Array of basic inbound objects
456
+ * @param {object} oABAPInboundParams Object containing ABAP-specific properties indexed by inbound ID
457
+ * @returns {sap.ushell.services.NavigationDataProvider.ABAPInbound[]} Array of enriched inbound objects
458
+ * @since 1.146.0
459
+ * @private
460
+ */
461
+ ClientSideTargetResolutionAdapter.prototype._createEnhancedInbounds = function (aBasicInbounds, oABAPInboundParams) {
462
+ return aBasicInbounds.map((oInbound) => {
463
+ const sInboundId = oInbound.id;
464
+ const oMatchingAbapProps = oABAPInboundParams[sInboundId];
465
+
466
+ if (oMatchingAbapProps) {
467
+ return {
468
+ ...oInbound,
469
+ ...oMatchingAbapProps
470
+ };
471
+ }
472
+ return oInbound;
473
+ });
474
+ };
475
+
476
+ /**
477
+ * Enriches the main inbounds array with ABAP-specific properties.
478
+ *
479
+ * This function should be called after `getInbounds` has resolved, as `getInbounds`
480
+ * is responsible for initially populating both `_aInbounds` and `_oInboundsABAP`.
481
+ *
482
+ * @returns {Promise<sap.ushell.services.NavigationDataProvider.ABAPInbound[]> | Promise<sap.ushell.services.ClientSideTargetResolution.Inbound[]>}
483
+ * A Promise that resolves with the newly created array of enriched inbounds.
484
+ * @private
485
+ * @since 1.146.0
486
+ */
487
+ ClientSideTargetResolutionAdapter.prototype.getEnhancedInbounds = async function () {
488
+ if (this._aInboundsEnhanced) {
489
+ return this._aInboundsEnhanced;
490
+ }
491
+
492
+ const aBasicInbounds = await this.getInbounds();
493
+ if (this._oInboundsABAP && Object.keys(this._oInboundsABAP).length > 0) {
494
+ this._aInboundsEnhanced = this._createEnhancedInbounds(aBasicInbounds, this._oInboundsABAP);
495
+ return this._aInboundsEnhanced;
496
+ }
497
+
498
+ Log.warning("getEnhancedInbounds called but no ABAP-specific properties are available. Basic Inbounds are used.", null, S_COMPONENT);
499
+ return aBasicInbounds;
500
+ };
501
+
450
502
  /**
451
503
  * Test whether aSubSegment is completely contained in aSegment
452
504
  *
@@ -537,9 +589,6 @@ sap.ui.define([
537
589
  oTarget.title = oSrc.text;
538
590
  oTarget.permanentKey = `X-SAP-UI2-PAGE:${oSrc.catalogId}:${oSrc.tmChipId}`;
539
591
  oTarget.contentProviderId = "";
540
- oTarget.isDefaultLadi = oSrc.isDefaultLadi || false;
541
- oTarget.ladiHasTiles = oSrc.ladiHasTiles || false;
542
- oTarget.defaultTileParams = oSrc.defaultTileParams || "";
543
592
 
544
593
  // resolution result
545
594
  const oFakeResolutionResult = {};
@@ -573,7 +622,6 @@ sap.ui.define([
573
622
  // ClientSideTargetResolution will de-interpolate the URL before applying sap-system
574
623
  oTarget.resolutionResult.systemAlias = oSrc.systemAlias || ""; // NOTE: "" is the local system alias
575
624
 
576
- oTarget.deviceTypes = oSrc.formfactors;
577
625
  oTarget.resolutionResult["sap.ui"] = {};
578
626
  oTarget.resolutionResult["sap.ui"].technology = oTarget.resolutionResult.applicationType;
579
627
  if (oTarget.resolutionResult["sap.ui"].technology === "SAPUI5") {
@@ -679,27 +727,56 @@ sap.ui.define([
679
727
 
680
728
  if (oSrc.tcode) {
681
729
  oTarget.resolutionResult.appInfo = {
682
- "abap.transaction": oSrc.tcode
730
+ transaction: oSrc.tcode
683
731
  };
684
732
  }
685
733
 
686
734
  return oTarget;
687
735
  }
688
736
 
689
- const aRes = [];
737
+ function mapABAPAttributes (sSrcId, oSrc) {
738
+ const oABAPAttributes = {};
739
+ const aMatch = sSrcId.match(/^([^-]+)-([^~]+)/);
740
+ if (!aMatch) {
741
+ Log.warning(
742
+ `The target mapping id ${sSrcId} is not valid`,
743
+ "this target mapping will be discarded",
744
+ "sap.ushell_abap.adapters.abap.ClientSideTargetResolutionAdapter"
745
+ );
746
+ return undefined;
747
+ }
748
+ oABAPAttributes.id = sSrcId;
749
+ oABAPAttributes.isDefaultLadi = oSrc.isDefaultLadi || false;
750
+ oABAPAttributes.ladiHasTiles = oSrc.ladiHasTiles || false;
751
+ oABAPAttributes.defaultTileParams =
752
+ oSrc.defaultTileParams || "";
753
+ return oABAPAttributes;
754
+ }
755
+
756
+ // main processing of inbounds and inbounds with ABAP specific attributes returning all results
757
+ const aResult = [];
758
+ let oInbound = {};
759
+ const oResultABAP = {};
760
+ let oInboundABAP = {};
690
761
  Object.keys(oDirectStartResponse).forEach((sKey) => {
691
- const r = mapOne(sKey, oDirectStartResponse[sKey]);
692
- if (r) {
693
- aRes.push(r);
762
+ oInbound = mapOne(sKey, oDirectStartResponse[sKey]);
763
+ if (oInbound) {
764
+ aResult.push(oInbound);
765
+
766
+ oInboundABAP = mapABAPAttributes(sKey, oDirectStartResponse[sKey]);
767
+ if (oInboundABAP) {
768
+ oResultABAP[oInboundABAP.id] = oInboundABAP;
769
+ }
694
770
  }
695
771
  });
696
- return aRes;
772
+
773
+ return { aResult, oResultABAP };
697
774
  };
698
775
 
699
776
  /**
700
777
  * Extracts a valid <code>applicationType</code> field for ClientSideTargetResolution from the given object.
701
778
  *
702
- * @param {string} sTargetMappingId A unique identified
779
+ * @param {string} sTargetMappingId A unique identifier
703
780
  * @param {object} oResolutionResult The (pre-resolution) resolutionResult of the navigation target.
704
781
  * @returns {string} One of the following application types compatible with ClientSideTargetResolution service:
705
782
  * "TR", "SAPUI5", "WDA", "URL".
@@ -1104,52 +1181,49 @@ sap.ui.define([
1104
1181
  }
1105
1182
 
1106
1183
  return new Promise((fnResolve, fnReject) => {
1107
- this._oODataWrapper.read(`ResolveLink?linkId='${
1108
- encodeODataQueryParameter(sFragmentNoHash)}'&shellType='${ushellUtils.getShellType()}'${
1109
- sFormFactor ?
1110
- `&formFactor='${encodeODataQueryParameter(sFormFactor)}'` : ""}`,
1111
- (oResult) => {
1112
- let i;
1113
- let sDetails = "";
1114
- let oAdjustedResult;
1115
-
1116
- if (oResult.results.length) {
1117
- if (oResult.results.length > 1) {
1118
- // console log because of multiple targets
1119
- for (i = 0; i < oResult.results.length; i += 1) {
1120
- delete oResult.results[i].__metadata; // simplify output
1121
- sDetails += (i === 0 ? "used target: " : "\nignored target: ")
1122
- + JSON.stringify(oResult.results[i]);
1184
+ this._oODataWrapper.read(`ResolveLink?linkId='${encodeODataQueryParameter(sFragmentNoHash)}'&shellType='${SAPBusinessClientEnablement.getShellType()}'${sFormFactor ?
1185
+ `&formFactor='${encodeODataQueryParameter(sFormFactor)}'` : ""}`,
1186
+ (oResult) => {
1187
+ let i;
1188
+ let sDetails = "";
1189
+ let oAdjustedResult;
1190
+
1191
+ if (oResult.results.length) {
1192
+ if (oResult.results.length > 1) {
1193
+ // console log because of multiple targets
1194
+ for (i = 0; i < oResult.results.length; i += 1) {
1195
+ delete oResult.results[i].__metadata; // simplify output
1196
+ sDetails += (i === 0 ? "used target: " : "\nignored target: ")
1197
+ + JSON.stringify(oResult.results[i]);
1198
+ }
1199
+ Log.error("INTEROP service's ResolveLink operation "
1200
+ + `returned ${oResult.results.length} targets for hash '#${sFragmentNoHash}', first one is used.`,
1201
+ sDetails,
1202
+ "sap.ushell_abap.adapters.abap.ClientSideTargetResolutionAdapter");
1123
1203
  }
1124
- Log.error("INTEROP service's ResolveLink operation "
1125
- + `returned ${oResult.results.length} targets for hash '#${
1126
- sFragmentNoHash}', first one is used.`,
1127
- sDetails,
1128
- "sap.ushell_abap.adapters.abap.ClientSideTargetResolutionAdapter");
1129
- }
1130
1204
 
1131
- oResult = oResult.results[0];
1132
- oAdjustedResult = ClientSideTargetResolutionAdapter.prototype._adjustNavTargetResult(oResult);
1133
- oAdjustedResult.url = _addPostParametersToNavTargetResultUrl(
1134
- oResult.postParameters, oAdjustedResult.url);
1205
+ oResult = oResult.results[0];
1206
+ oAdjustedResult = ClientSideTargetResolutionAdapter.prototype._adjustNavTargetResult(oResult);
1207
+ oAdjustedResult.url = _addPostParametersToNavTargetResultUrl(
1208
+ oResult.postParameters, oAdjustedResult.url);
1135
1209
 
1136
- // Fix application type to ensure backward compatible behavior after incompatible server-side change.
1137
- if (oAdjustedResult && oAdjustedResult.applicationType === "SAPUI5") {
1138
- oAdjustedResult.applicationType = "URL";
1139
- }
1210
+ // Fix application type to ensure backward compatible behavior after incompatible server-side change.
1211
+ if (oAdjustedResult && oAdjustedResult.applicationType === "SAPUI5") {
1212
+ oAdjustedResult.applicationType = "URL";
1213
+ }
1140
1214
 
1141
- that._compactTooLongWdaUrl(oAdjustedResult).then((oCompactedResult) => {
1142
- fnResolve(oCompactedResult);
1143
- }).catch((oError) => {
1144
- Log.error(`Could not resolve link '${sFragmentNoHash}' due to compactation failure`, oError);
1145
- fnReject(oError);
1146
- });
1147
- } else {
1148
- fnReject(new Error(`Could not resolve link '${sFragmentNoHash}'`));
1149
- }
1150
- }, (sErrorMessage) => {
1151
- fnReject(new Error(sErrorMessage));
1152
- });
1215
+ that._compactTooLongWdaUrl(oAdjustedResult).then((oCompactedResult) => {
1216
+ fnResolve(oCompactedResult);
1217
+ }).catch((oError) => {
1218
+ Log.error(`Could not resolve link '${sFragmentNoHash}' due to compactation failure`, oError);
1219
+ fnReject(oError);
1220
+ });
1221
+ } else {
1222
+ fnReject(new Error(`Could not resolve link '${sFragmentNoHash}'`));
1223
+ }
1224
+ }, (sErrorMessage) => {
1225
+ fnReject(new Error(sErrorMessage));
1226
+ });
1153
1227
 
1154
1228
  if (bBatchQueueOpened) {
1155
1229
  that._getODataWrapper().submitBatchQueue(() => { }, (sErrorMessage) => {
@@ -2,7 +2,7 @@
2
2
  /**
3
3
  * @fileOverview The Unified Shell's CommonDataModelAdapter for the ABAP platform, it is used to avoid 404 when no adapter is found
4
4
  *
5
- * @version 1.145.1
5
+ * @version 1.147.0
6
6
  */
7
7
  sap.ui.define([
8
8
  ], () => {
@@ -2,12 +2,15 @@
2
2
 
3
3
  /**
4
4
  * @fileOverview The ConfigurationDefaults adapter for the ABAP platform.
5
- * @version 1.145.1
5
+ * @version 1.147.0
6
6
  */
7
7
  sap.ui.define([
8
- "sap/ushell_abap/bootstrap/evo/abap.constants",
8
+ "sap/ushell_abap/bootstrap/abapConstants",
9
9
  "sap/base/util/deepClone"
10
- ], (oAbapConstants, fnDeepClone) => {
10
+ ], (
11
+ abapConstants,
12
+ deepClone
13
+ ) => {
11
14
  "use strict";
12
15
 
13
16
  /**
@@ -18,7 +21,7 @@ sap.ui.define([
18
21
  * @returns {Promise} Resolved promise contains all default configuration for abap platform
19
22
  */
20
23
  this.getDefaultConfig = function () {
21
- return Promise.resolve(fnDeepClone(oAbapConstants.defaultUshellConfig));
24
+ return Promise.resolve(deepClone(abapConstants.defaultUshellConfig));
22
25
  };
23
26
  };
24
27
  });
@@ -2,14 +2,15 @@
2
2
  /**
3
3
  * @fileOverview The Unified Shell's container adapter for the ABAP platform.
4
4
  *
5
- * @version 1.145.1
5
+ * @version 1.147.0
6
6
  */
7
7
  sap.ui.define([
8
8
  "sap/ui/thirdparty/jquery",
9
+ "sap/ushell/base/SAPBusinessClientEnablement",
9
10
  "sap/ushell/System",
10
11
  "sap/ushell/User",
11
12
  "sap/ushell/utils",
12
- "sap/ushell_abap/bootstrap/evo/abap.bootstrap.utils",
13
+ "sap/ushell_abap/bootstrap/XhrFactory",
13
14
  "sap/ushell_abap/pbServices/ui2/ODataWrapper",
14
15
  "sap/ui/thirdparty/URI",
15
16
  "sap/ui/thirdparty/datajs",
@@ -19,10 +20,11 @@ sap.ui.define([
19
20
  "sap/ushell/Container"
20
21
  ], (
21
22
  jQuery,
23
+ SAPBusinessClientEnablement,
22
24
  System,
23
25
  User,
24
26
  utils,
25
- abapUtils,
27
+ XhrFactory,
26
28
  ODataWrapper,
27
29
  URI,
28
30
  datajs,
@@ -190,6 +192,7 @@ sap.ui.define([
190
192
  return;
191
193
  }
192
194
  oUserProfileIdHistory[oUserProfileParameter.id] = oUserProfileParameter.id;
195
+
193
196
  if (oUserProfileParameter.id === "CONTENT_DENSITY") {
194
197
  oStartupResult.contentDensity = oUserProfileParameter.value;
195
198
  oStartupResult.setContentDensityPermitted = (
@@ -197,6 +200,7 @@ sap.ui.define([
197
200
  oUserProfileParameter.editState === 3
198
201
  ) || false;
199
202
  }
203
+
200
204
  if (oUserProfileParameter.id === "TRACKING_USAGE_ANALYTICS") {
201
205
  if (typeof oUserProfileParameter.value === "string") {
202
206
  // check if string is 'true' OR 'false' -> if 'yes' set the explicit boolean value
@@ -213,10 +217,12 @@ sap.ui.define([
213
217
  oStartupResult.trackUsageAnalytics = undefined;
214
218
  }
215
219
  }
220
+
216
221
  // FLP Spaces MyHome - whether the user has opted not to import bookmarks from classical FLP
217
222
  if (oUserProfileParameter.id === "MYHOME_IMPORT_FROM_CLASSIC") {
218
223
  oStartupResult.importBookmarks = oUserProfileParameter.value;
219
224
  }
225
+
220
226
  // FLP Spaces MyHome - whether the user has opted not to show the My Home page
221
227
  if (oUserProfileParameter.id === "MYHOME_ENABLEMENT") {
222
228
  switch (oUserProfileParameter.value) {
@@ -231,6 +237,7 @@ sap.ui.define([
231
237
  break;
232
238
  }
233
239
  }
240
+
234
241
  // Dark Mode Auto Detection - whether the user has disabled it
235
242
  if (oUserProfileParameter.id === "THEME_DARKMODE_AUTO_DETECTION") {
236
243
  switch (oUserProfileParameter.value) {
@@ -245,6 +252,11 @@ sap.ui.define([
245
252
  break;
246
253
  }
247
254
  }
255
+
256
+ // The theme set the user has chosen
257
+ if (oUserProfileParameter.id === "THEME_SET") {
258
+ oStartupResult.bootThemeSet = oUserProfileParameter.value || "";
259
+ }
248
260
  });
249
261
  }
250
262
  };
@@ -283,6 +295,7 @@ sap.ui.define([
283
295
  "setAccessibilityPermitted",
284
296
  "bootTheme",
285
297
  "themeRoot",
298
+ "bootThemeSet",
286
299
  "ranges",
287
300
  "setThemePermitted",
288
301
  "importBookmarks",
@@ -419,7 +432,7 @@ sap.ui.define([
419
432
  */
420
433
  this.sessionKeepAlive = function () {
421
434
  const sPageSetsUrl = "/sap/opu/odata/UI2/PAGE_BUILDER_PERS";
422
- const oXHR = abapUtils.createAndOpenXHR(sPageSetsUrl, null, "HEAD");
435
+ const oXHR = XhrFactory.createAndOpen(sPageSetsUrl, null, "HEAD");
423
436
  oXHR.onreadystatechange = function () {
424
437
  if (this.readyState === /* DONE */4) {
425
438
  Log.debug("server session was extended");
@@ -438,12 +451,8 @@ sap.ui.define([
438
451
  */
439
452
  this.logout = async function (bLogonSystem) {
440
453
  if (bLogonSystem) {
441
- if (utils.hasNativeLogoutCapability()) {
442
- const sFullLogOffUrl = (new URI(S_LOGOFF_URL))
443
- .absoluteTo(this.getCurrentUrl())
444
- .search("") // NOTE: remove query parameters
445
- .toString();
446
- window.external.getPrivateEpcm().doLogOff(sFullLogOffUrl);
454
+ if (SAPBusinessClientEnablement.hasNativeLogoutCapability()) {
455
+ SAPBusinessClientEnablement.doLogout(S_LOGOFF_URL);
447
456
  } else {
448
457
  this.logoutRedirect();
449
458
  }