@sapui5/sap.suite.ui.generic.template 1.136.2 → 1.138.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 (74) hide show
  1. package/package.json +1 -1
  2. package/src/sap/suite/ui/generic/template/.library +1 -1
  3. package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_en_US_saprigi.properties +3 -1
  4. package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_iw.properties +3 -3
  5. package/src/sap/suite/ui/generic/template/AnalyticalListPage/manifest.json +1 -1
  6. package/src/sap/suite/ui/generic/template/Canvas/manifest.json +1 -1
  7. package/src/sap/suite/ui/generic/template/ListReport/manifest.json +1 -1
  8. package/src/sap/suite/ui/generic/template/ObjectPage/controller/MessageSortingHandler.js +3 -0
  9. package/src/sap/suite/ui/generic/template/ObjectPage/controller/RelatedAppsHandler.js +18 -27
  10. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n.properties +1 -1
  11. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_ar.properties +1 -1
  12. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_bg.properties +1 -1
  13. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_ca.properties +1 -1
  14. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_cnr.properties +1 -1
  15. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_cs.properties +1 -1
  16. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_cy.properties +1 -1
  17. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_da.properties +2 -2
  18. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_de.properties +1 -1
  19. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_el.properties +1 -1
  20. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_en.properties +1 -1
  21. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_en_GB.properties +1 -1
  22. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_en_US_saprigi.properties +7 -1
  23. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_es.properties +4 -4
  24. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_es_MX.properties +1 -1
  25. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_et.properties +1 -1
  26. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_fi.properties +1 -1
  27. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_fr.properties +1 -1
  28. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_fr_CA.properties +1 -1
  29. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_hi.properties +1 -1
  30. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_hr.properties +1 -1
  31. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_hu.properties +1 -1
  32. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_id.properties +1 -1
  33. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_it.properties +1 -1
  34. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_iw.properties +1 -1
  35. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_ja.properties +1 -1
  36. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_kk.properties +1 -1
  37. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_ko.properties +2 -2
  38. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_lt.properties +1 -1
  39. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_lv.properties +1 -1
  40. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_mk.properties +1 -1
  41. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_ms.properties +1 -1
  42. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_nl.properties +1 -1
  43. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_no.properties +1 -1
  44. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_pl.properties +1 -1
  45. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_pt.properties +1 -1
  46. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_pt_PT.properties +1 -1
  47. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_ro.properties +1 -1
  48. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_ru.properties +1 -1
  49. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_sh.properties +1 -1
  50. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_sk.properties +1 -1
  51. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_sl.properties +1 -1
  52. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_sr.properties +1 -1
  53. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_sv.properties +1 -1
  54. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_th.properties +3 -3
  55. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_tr.properties +1 -1
  56. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_uk.properties +1 -1
  57. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_vi.properties +1 -1
  58. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_zh_CN.properties +1 -1
  59. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_zh_TW.properties +1 -1
  60. package/src/sap/suite/ui/generic/template/ObjectPage/manifest.json +1 -1
  61. package/src/sap/suite/ui/generic/template/QuickCreate/manifest.json +1 -1
  62. package/src/sap/suite/ui/generic/template/QuickView/manifest.json +1 -1
  63. package/src/sap/suite/ui/generic/template/detailTemplates/detailUtils.js +2 -1
  64. package/src/sap/suite/ui/generic/template/genericUtilities/controlStateWrapperFactory/SmartFilterBarWrapper.js +2 -11
  65. package/src/sap/suite/ui/generic/template/js/AnnotationHelper.js +9 -1
  66. package/src/sap/suite/ui/generic/template/js/AnnotationHelperStreamSupport.js +6 -3
  67. package/src/sap/suite/ui/generic/template/lib/AppComponent.js +8 -8
  68. package/src/sap/suite/ui/generic/template/lib/CRUDActionHandler.js +1 -0
  69. package/src/sap/suite/ui/generic/template/lib/CRUDManager.js +12 -0
  70. package/src/sap/suite/ui/generic/template/lib/MessageUtils.js +76 -5
  71. package/src/sap/suite/ui/generic/template/lib/ai/EasyFilterBarHandler.js +17 -7
  72. package/src/sap/suite/ui/generic/template/lib/navigation/NavigationController.js +11 -5
  73. package/src/sap/suite/ui/generic/template/lib/presentationControl/SmartTableHandler.js +6 -6
  74. package/src/sap/suite/ui/generic/template/library.js +1 -1
@@ -120,7 +120,7 @@ NEW_ENTRY_GROUP=Novi vnosi
120
120
 
121
121
  EDIT_BUTTON_DESCRIPTION=Urejanje\:
122
122
 
123
- FOOTER_REGION_LABEL_ARIA=Obmo\u010Dje noge strani
123
+ FOOTER_REGION_LABEL_ARIA=Noga
124
124
 
125
125
  NAVIGATE_FORWARD_KEYBOARD_SHORTCUT_DESC=Pomikanje naprej
126
126
 
@@ -120,7 +120,7 @@ NEW_ENTRY_GROUP=\u041D\u043E\u0432\u0438 \u0443\u043D\u043E\u0441\u0438
120
120
 
121
121
  EDIT_BUTTON_DESCRIPTION=\u0423\u0440\u0435\u0434\u0438\:
122
122
 
123
- FOOTER_REGION_LABEL_ARIA=\u0420\u0435\u0433\u0438\u0458\u0430 \u043F\u043E\u0434\u043D\u043E\u0436\u0458\u0430
123
+ FOOTER_REGION_LABEL_ARIA=\u041F\u043E\u0434\u043D\u043E\u0436\u0458\u0435
124
124
 
125
125
  NAVIGATE_FORWARD_KEYBOARD_SHORTCUT_DESC=\u0423\u0441\u043C\u0435\u0440\u0438 \u043D\u0430\u043F\u0440\u0435\u0434
126
126
 
@@ -120,7 +120,7 @@ NEW_ENTRY_GROUP=Nya uppgifter
120
120
 
121
121
  EDIT_BUTTON_DESCRIPTION=Redigera\:
122
122
 
123
- FOOTER_REGION_LABEL_ARIA=Sidfotsomr\u00E5de
123
+ FOOTER_REGION_LABEL_ARIA=Sidfot
124
124
 
125
125
  NAVIGATE_FORWARD_KEYBOARD_SHORTCUT_DESC=G\u00E5 fram\u00E5t
126
126
 
@@ -1,7 +1,7 @@
1
1
 
2
- TITLE=\u0E40\u0E1E\u0E08\u0E02\u0E2D\u0E07\u0E2D\u0E2D\u0E1A\u0E40\u0E08\u0E04
2
+ TITLE=\u0E2B\u0E19\u0E49\u0E32\u0E02\u0E2D\u0E07\u0E2D\u0E2D\u0E1A\u0E40\u0E08\u0E04
3
3
 
4
- DESCRIPTION=\u0E40\u0E1E\u0E08\u0E02\u0E2D\u0E07\u0E2D\u0E2D\u0E1A\u0E40\u0E08\u0E04
4
+ DESCRIPTION=\u0E2B\u0E19\u0E49\u0E32\u0E02\u0E2D\u0E07\u0E2D\u0E2D\u0E1A\u0E40\u0E08\u0E04
5
5
 
6
6
  EDIT=\u0E41\u0E01\u0E49\u0E44\u0E02
7
7
 
@@ -120,7 +120,7 @@ NEW_ENTRY_GROUP=\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23\u0E43\u0E2B\u0E21\u0E48
120
120
 
121
121
  EDIT_BUTTON_DESCRIPTION=\u0E41\u0E01\u0E49\u0E44\u0E02\:
122
122
 
123
- FOOTER_REGION_LABEL_ARIA=\u0E1E\u0E37\u0E49\u0E19\u0E17\u0E35\u0E48\u0E2A\u0E48\u0E27\u0E19\u0E17\u0E49\u0E32\u0E22
123
+ FOOTER_REGION_LABEL_ARIA=\u0E2A\u0E48\u0E27\u0E19\u0E17\u0E49\u0E32\u0E22
124
124
 
125
125
  NAVIGATE_FORWARD_KEYBOARD_SHORTCUT_DESC=\u0E40\u0E19\u0E27\u0E34\u0E40\u0E01\u0E15\u0E44\u0E1B\u0E02\u0E49\u0E32\u0E07\u0E2B\u0E19\u0E49\u0E32
126
126
 
@@ -120,7 +120,7 @@ NEW_ENTRY_GROUP=Yeni giri\u015Fler
120
120
 
121
121
  EDIT_BUTTON_DESCRIPTION=D\u00FCzenle\:
122
122
 
123
- FOOTER_REGION_LABEL_ARIA=Altbilgi alan\u0131
123
+ FOOTER_REGION_LABEL_ARIA=Sayfa altl\u0131\u011F\u0131
124
124
 
125
125
  NAVIGATE_FORWARD_KEYBOARD_SHORTCUT_DESC=\u0130leri git
126
126
 
@@ -120,7 +120,7 @@ NEW_ENTRY_GROUP=\u041D\u043E\u0432\u0456 \u0437\u0430\u043F\u0438\u0441\u0438
120
120
 
121
121
  EDIT_BUTTON_DESCRIPTION=\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438\:
122
122
 
123
- FOOTER_REGION_LABEL_ARIA=\u041E\u0431\u043B\u0430\u0441\u0442\u044C \u043D\u0438\u0436\u043D\u044C\u043E\u0433\u043E \u043A\u043E\u043B\u043E\u043D\u0442\u0438\u0442\u0443\u043B\u0430
123
+ FOOTER_REGION_LABEL_ARIA=\u041D\u0438\u0436\u043D\u0456\u0439 \u043A\u043E\u043B\u043E\u043D\u0442\u0438\u0442\u0443\u043B
124
124
 
125
125
  NAVIGATE_FORWARD_KEYBOARD_SHORTCUT_DESC=\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u0432\u043F\u0435\u0440\u0435\u0434
126
126
 
@@ -120,7 +120,7 @@ NEW_ENTRY_GROUP=Mu\u0323c nh\u00E2\u0323p m\u01A1\u0301i
120
120
 
121
121
  EDIT_BUTTON_DESCRIPTION=Hi\u00EA\u0323u chi\u0309nh\:
122
122
 
123
- FOOTER_REGION_LABEL_ARIA=V\u00F9ng ch\u00E2n trang
123
+ FOOTER_REGION_LABEL_ARIA=Ch\u00E2n trang
124
124
 
125
125
  NAVIGATE_FORWARD_KEYBOARD_SHORTCUT_DESC=\u0110i\u1EC1u h\u01B0\u1EDBng t\u1EDBi
126
126
 
@@ -120,7 +120,7 @@ NEW_ENTRY_GROUP=\u65B0\u6761\u76EE
120
120
 
121
121
  EDIT_BUTTON_DESCRIPTION=\u7F16\u8F91\uFF1A
122
122
 
123
- FOOTER_REGION_LABEL_ARIA=\u9875\u811A\u533A\u57DF
123
+ FOOTER_REGION_LABEL_ARIA=\u9875\u811A
124
124
 
125
125
  NAVIGATE_FORWARD_KEYBOARD_SHORTCUT_DESC=\u5411\u524D\u5BFC\u822A
126
126
 
@@ -120,7 +120,7 @@ NEW_ENTRY_GROUP=\u65B0\u8F38\u5165\u9805
120
120
 
121
121
  EDIT_BUTTON_DESCRIPTION=\u7DE8\u8F2F\uFF1A
122
122
 
123
- FOOTER_REGION_LABEL_ARIA=\u9801\u5C3E\u5340\u57DF
123
+ FOOTER_REGION_LABEL_ARIA=\u8868\u5C3E
124
124
 
125
125
  NAVIGATE_FORWARD_KEYBOARD_SHORTCUT_DESC=\u5411\u524D\u700F\u89BD
126
126
 
@@ -6,7 +6,7 @@
6
6
  "type": "component",
7
7
  "i18n": "i18n/i18n.properties",
8
8
  "applicationVersion": {
9
- "version": "1.136.2"
9
+ "version": "1.138.0"
10
10
  },
11
11
  "title": "{{TITLE}}",
12
12
  "description": "{{DESCRIPTION}}",
@@ -6,7 +6,7 @@
6
6
  "type": "component",
7
7
  "i18n": "i18n/i18n.properties",
8
8
  "applicationVersion": {
9
- "version": "1.136.2"
9
+ "version": "1.138.0"
10
10
  },
11
11
  "title": "{{TITLE}}",
12
12
  "description": "{{DESCRIPTION}}",
@@ -6,7 +6,7 @@
6
6
  "type": "component",
7
7
  "i18n": "i18n/i18n.properties",
8
8
  "applicationVersion": {
9
- "version": "1.136.2"
9
+ "version": "1.138.0"
10
10
  },
11
11
  "title": "{{TITLE}}",
12
12
  "description": "{{DESCRIPTION}}",
@@ -331,7 +331,7 @@ sap.ui.define([ "sap/suite/ui/generic/template/genericUtilities/FeLogger", "sap/
331
331
  sAncestorsTitle += sSeperator;
332
332
  }
333
333
  sHeaderText = `${sObjectTitle} ${sObjectSubtitle} ${sAncestorsTitle} ${sTitle}`;
334
- return { headerText: sHeaderText };
334
+ return {headerText : sHeaderText};
335
335
  }
336
336
 
337
337
  return {
@@ -339,4 +339,5 @@ sap.ui.define([ "sap/suite/ui/generic/template/genericUtilities/FeLogger", "sap/
339
339
  getControllerBase: getControllerBase,
340
340
  fnConstructTitleAdditionalInfo: fnConstructTitleAdditionalInfo
341
341
  };
342
+
342
343
  });
@@ -78,7 +78,7 @@ sap.ui.define([
78
78
  appExtension: oCustomData[dataPropertyNameCustom],
79
79
  adaptationExtensions: oCustomData[dataPropertyNameExtension]
80
80
  };
81
- aBasicFilters = oSmartFilterBar.getAllFilterItems(true);
81
+
82
82
  mParams.oCustomFiltersWrapper.setState(oCustomFiltersState);
83
83
  oSVMWrapperCallbacks.setManagedControlStates(oCustomData[dataPropertyNameGeneric]);
84
84
  /* SFB header state of a variant (standard or custom) gets determined by the Apply Automatically checkbox's value of the corresponding
@@ -190,12 +190,6 @@ sap.ui.define([
190
190
  oSelectOptions = oSelectOptions && oSelectOptions.filter(function(oSelectOption){
191
191
  return oSelectOption.PropertyName !== dataPropertyNameGeneric;
192
192
  });
193
- // Get standard filters that are part of the standard variant but are currently not visible in the filterbar.
194
- // This is only done if the variant has been modified (i.e., it's dirty).
195
- const aStandardItems = oSmartFilterBar.getVariantManagement?.().getModified?.() ? oSmartFilterBar.getAllFilterItems().filter(function(oFilterItem){
196
- return oFilterItem.getGroupName() === sap.ui.comp.filterbar.FilterBar.INTERNAL_GROUP && !oFilterItem.getVisibleInFilterBar();
197
- }) : [];
198
-
199
193
  return {
200
194
  selectOptions: oSelectOptions,
201
195
  parameters: oUiState.getSelectionVariant().Parameters,
@@ -206,10 +200,7 @@ sap.ui.define([
206
200
  }).map(function(oFilterItem){
207
201
  return oFilterItem.getName();
208
202
  }),
209
- // Combine basic filters and standard variant filters (only if the variant is dirty), removing duplicates, then filter out those not visible in the filter bar,
210
- // This is necessary because when the variant is dirty and the iAppState is shared or the app is refreshed, the final iAppState is applied on top of the standard variant.
211
- // Keeping track of removed standard filters when the variant is dirty ensures the filter state remains consistent and avoids unexpected behavior for users.
212
- removedFilterItems: Array.from(new Set(aBasicFilters.concat(aStandardItems))).filter(function(oFilterItem){
203
+ removedFilterItems: aBasicFilters.filter(function(oFilterItem){
213
204
  return !oFilterItem.getVisibleInFilterBar();
214
205
  }).map(function(oFilterItem){
215
206
  return oFilterItem.getName();
@@ -3017,7 +3017,7 @@ sap.ui.define(["sap/ui/model/odata/AnnotationHelper",
3017
3017
  };
3018
3018
  }
3019
3019
  },
3020
- getTextArrangement: function (oEntityType, oField) {
3020
+ getTextArrangementFromAnnotations: function (oEntityType, oField) {
3021
3021
  var sTextArrangement;
3022
3022
  // 1. check TextArrangement definition for property directly - has prio 1
3023
3023
  if (oField["com.sap.vocabularies.UI.v1.TextArrangement"] && oField["com.sap.vocabularies.UI.v1.TextArrangement"].EnumMember) {
@@ -3036,11 +3036,19 @@ sap.ui.define(["sap/ui/model/odata/AnnotationHelper",
3036
3036
  sTextArrangement = oAnnotationHelper._mapTextArrangement4smartControl(oEntityType["com.sap.vocabularies.UI.v1.TextArrangement"].EnumMember);
3037
3037
  }
3038
3038
  }
3039
+ return sTextArrangement;
3040
+ },
3041
+ getTextArrangement: function(oEntityType, oField) {
3042
+ var sTextArrangement = this.getTextArrangementFromAnnotations(oEntityType, oField);
3039
3043
  if (!sTextArrangement) { //coming from the title should get a readable description and underneath is the id - the default
3040
3044
  sTextArrangement = "descriptionAndId";
3041
3045
  }
3042
3046
  return sTextArrangement;
3043
3047
  },
3048
+ getTextArrangementForEasyFilter: function (oEntityType, oField) {
3049
+ var sTextArrangement = this.getTextArrangementFromAnnotations(oEntityType, oField) || "idAndDescription";
3050
+ return sTextArrangement;
3051
+ },
3044
3052
  getTextArrangementPath: function (oField) {
3045
3053
  return oField["com.sap.vocabularies.Common.v1.Text"] && oField["com.sap.vocabularies.Common.v1.Text"].Path;
3046
3054
  },
@@ -126,13 +126,16 @@ sap.ui.define([
126
126
 
127
127
  // funtion return the controlling binding path form by annotation/metadata/fieldcontrol path
128
128
  getControlPath: function(oEntitySet, oFieldControl) {
129
+ var sPath = "";
129
130
  var sAnnotationUpdatablePath = oEntitySet && oEntitySet["Org.OData.Capabilities.V1.UpdateRestrictions"] && oEntitySet["Org.OData.Capabilities.V1.UpdateRestrictions"]["Updatable"] && oEntitySet["Org.OData.Capabilities.V1.UpdateRestrictions"]["Updatable"].Path;
130
131
  var sMetadataUpdatable = oEntitySet && (oEntitySet["sap:updatable"] || oEntitySet["sap:updatable-path"]);
131
132
  if (sAnnotationUpdatablePath || sMetadataUpdatable) {
132
- return '${' + (sAnnotationUpdatablePath || sMetadataUpdatable) + '} !== false';
133
- } else if (oFieldControl) {
134
- return '${' + oFieldControl && oFieldControl.Path + '} > "1"';
133
+ sPath = '${' + (sAnnotationUpdatablePath || sMetadataUpdatable) + '} !== false';
135
134
  }
135
+ if (oFieldControl) {
136
+ sPath += '&& ${' + oFieldControl && oFieldControl.Path + '} > "1"';
137
+ }
138
+ return sPath;
136
139
  },
137
140
 
138
141
  getDeleteStreamVisibility: function(oInterface, oMediaType, bIsDraftEnabled, oEntitySet){
@@ -32,7 +32,6 @@ sap.ui.define([
32
32
  "sap/ui/model/json/JSONModel",
33
33
  "sap/ui/model/odata/MessageScope",
34
34
  "sap/ui/model/resource/ResourceModel",
35
- "sap/ui/rta/RuntimeAuthoring",
36
35
  "sap/ui/generic/app/ApplicationController",
37
36
  "sap/suite/ui/generic/template/genericUtilities/ProcessObserver",
38
37
  "sap/suite/ui/generic/template/designtime/utils/DesigntimeHandler",
@@ -76,7 +75,6 @@ sap.ui.define([
76
75
  JSONModel,
77
76
  MessageScope,
78
77
  ResourceModel,
79
- RuntimeAuthoring,
80
78
  ApplicationController,
81
79
  ProcessObserver,
82
80
  DesigntimeHandler,
@@ -421,10 +419,6 @@ sap.ui.define([
421
419
  oLogger.info("Init called for AppComponent " + sAppComponentId);
422
420
  var oDesigntimeHandler = new DesigntimeHandler(oTemplateContract);
423
421
  mDesigntimeHandlers[sAppComponentId] = oDesigntimeHandler;
424
- if (RuntimeAuthoring.willRTAStartAfterReload()){
425
- oLogger.info("AppComponent " + sAppComponentId + " has been restarted for RTA");
426
- oDesigntimeHandler.start(true);
427
- }
428
422
  var oAppRegistryEntry = {
429
423
  appComponent: oAppComponent,
430
424
  oTemplateContract: oTemplateContract,
@@ -950,7 +944,7 @@ sap.ui.define([
950
944
  * @public
951
945
  * @extends sap.ui.core.UIComponent
952
946
  * @author SAP SE
953
- * @version 1.136.2
947
+ * @version 1.138.0
954
948
  * @name sap.suite.ui.generic.template.lib.AppComponent
955
949
  */
956
950
  var oAppComponent = UIComponent.extend("sap.suite.ui.generic.template.lib.AppComponent", {
@@ -1073,10 +1067,16 @@ sap.ui.define([
1073
1067
  designtime: {
1074
1068
  tool : {
1075
1069
  start: function(oAppComponent) {
1070
+ var RuntimeAuthoring = sap.ui.require("sap/ui/rta/RuntimeAuthoring");
1076
1071
  var sAppComponentId = oAppComponent.getId();
1077
1072
  oLogger.info("Ui Adaptation started for AppComponent " + sAppComponentId);
1078
1073
  var oDesigntimeHandler = mDesigntimeHandlers[sAppComponentId];
1079
- oDesigntimeHandler.start();
1074
+ if (RuntimeAuthoring && RuntimeAuthoring.willRTAStartAfterReload()){
1075
+ oLogger.info("AppComponent " + sAppComponentId + " has been restarted for RTA");
1076
+ oDesigntimeHandler.start(true);
1077
+ } else {
1078
+ oDesigntimeHandler.start();
1079
+ }
1080
1080
  },
1081
1081
  stop: function(oAppComponent) {
1082
1082
  var sAppComponentId = oAppComponent.getId();
@@ -91,6 +91,7 @@
91
91
  oRet.close();
92
92
  },
93
93
  onReject: function(){
94
+ MessageUtils.clearWarningCache();
94
95
  (fnNo || Function.prototype)();
95
96
  oRet.close();
96
97
  },
@@ -760,6 +760,14 @@ sap.ui.define(["sap/ui/base/Object",
760
760
  aSuccess = aSuccess.concat(mapToArray(oParsedResult.mSuccess));
761
761
  aWarningIndex = Object.keys(oParsedResult.mWarning);
762
762
  aWarning = mapToArray(oParsedResult.mWarning);
763
+ aWarning.forEach((oWarning) => {
764
+ // Check if the response has a status code 412 (Precondition Failed)
765
+ if (oWarning?.response?.statusCode === "412"){
766
+ const oErrorReponse = JSON.parse(oWarning?.response?.responseText);
767
+ // Cache the error message to avoid duplicate display later
768
+ MessageUtils.cacheWarningMessage(oErrorReponse.error);
769
+ }
770
+ });
763
771
  fnShowWarningPopupIfRequired(oParsedResult.aMessagesForUserDecision, fnDone.bind(null, aResponse));
764
772
  };
765
773
  var fnDone = function(aResponses){
@@ -811,6 +819,8 @@ sap.ui.define(["sap/ui/base/Object",
811
819
 
812
820
  if (oResponseContext && oResponseContext !== oActionContext && oResponseContext.getPath() !== "/undefined"){
813
821
  oServices.oApplication.setNextFocus(function(oBeforeData, fnFallback){
822
+ // Clear any cached error messages since the action has completed
823
+ MessageUtils.clearWarningCache();
814
824
  fnFallback({
815
825
  ignorePersistence: true
816
826
  });
@@ -819,6 +829,8 @@ sap.ui.define(["sap/ui/base/Object",
819
829
  } else {
820
830
  // Restore focus, because we don't navigate out
821
831
  oServices.oApplication.setNextFocus(function(oBeforeData, fnFallback){
832
+ // Clear any cached error messages since the action has completed
833
+ MessageUtils.clearWarningCache();
822
834
  fnFallback();
823
835
  });
824
836
  }
@@ -26,6 +26,7 @@ sap.ui.define([
26
26
  */
27
27
  var oLogger = new FeLogger("lib.MessageUtils").getLogger();
28
28
  var oMessageManager = sap.ui.getCore().getMessageManager();
29
+ const aWarningCache = [];
29
30
 
30
31
  /**
31
32
  * Handles errors for all of Smart Templates.
@@ -400,14 +401,14 @@ sap.ui.define([
400
401
  */
401
402
  function fnHandleTransientMessages(oTemplateContract, sActionLabel, oActionButtonConfig) {
402
403
  var fnFilter = oTemplateContract.oApplicationProxy.isTransientMessageNoCustomMessage;
404
+ var sState; // Only one message which is a success (or info/None) message -> show as message toast
405
+ // Remove transient messages that already exist in the error cache
406
+ fnRemoveTransientMessages(isDuplicateMessage.bind(this));
403
407
  var aTransientMessages = fnGetTransientMessages(false, fnFilter);
404
408
  if (aTransientMessages.length === 0) { // no transient messages -> immediate return
405
409
  return Promise.resolve();
406
410
  }
407
411
  fnRemoveTransientMessages(fnFilter); // remove transient messages from the message model. We can use aTransientMessages now.
408
-
409
- var sState;
410
- // Only one message which is a success (or info/None) message -> show as message toast
411
412
  if (aTransientMessages.length === 1) {
412
413
  sState = aTransientMessages[0].type;
413
414
  if (sState === ValueState.Success || sState === ValueState.Information || sState === ValueState.None) {
@@ -418,7 +419,6 @@ sap.ui.define([
418
419
 
419
420
  var oMsgDialogHeaderInfo = getMessageDialogTitleAndSeverity(aTransientMessages, oTemplateContract);
420
421
  sState = oMsgDialogHeaderInfo.sSeverity;
421
-
422
422
  // Now we know that we need to send a popup -> return a Promise that is resolved when the popup is closed
423
423
  return new Promise(function(fnResolve){
424
424
  // Now we prepare the controller of the dialog which will display the messages. However, we have to be careful.
@@ -604,6 +604,73 @@ sap.ui.define([
604
604
  oMessageManager.removeMessages(aMessagesToBeDeleted);
605
605
  }
606
606
 
607
+ /**
608
+ * Caches the error detail from a warning message, if available.
609
+ * This helps in tracking previously shown warnings to avoid duplicates.
610
+ *
611
+ * @param {object} oWarning - The warning object possibly containing error details.
612
+ */
613
+ function cacheWarningMessage(oWarning){
614
+ const oError = oWarning?.innererror?.errordetails?.[0];
615
+ if (oError){
616
+ aWarningCache.push(oError);
617
+ }
618
+ }
619
+
620
+ /**
621
+ * Compares two message objects to check if they are equivalent.
622
+ * Only considers specific parameters in the comparison.
623
+ *
624
+ * @param {object} oMessageDetailsOld - The first error message object
625
+ * @param {object} oMessageDetailsNew - The second error message object.
626
+ * @returns {boolean} - True if both errors are the same, false otherwise.
627
+ */
628
+ function areMessagesSame (oMessageDetailsOld, oMessageDetailsNew) {
629
+ // These are the properties used for comparison
630
+ // We have removed properties numericSeverity, additionalTargets, longtextUrl since they are only relevant for V4
631
+ const aParameters = ["code", "message", "severity", "target", "transition"];
632
+ for (const sParam of aParameters){
633
+ const bIsParamInOldMessage = sParam in oMessageDetailsOld;
634
+ const bIsParamInNewMessage = sParam in oMessageDetailsNew;
635
+ if (bIsParamInOldMessage && bIsParamInNewMessage) {
636
+ // Compare values if property exists in both objects
637
+ if (oMessageDetailsOld[sParam] !== oMessageDetailsNew[sParam]) {
638
+ return false;
639
+ }
640
+ } else if (bIsParamInOldMessage || bIsParamInNewMessage) {
641
+ // Property exists in only one object, not equal
642
+ return false;
643
+ }
644
+ }
645
+ return true;
646
+ }
647
+
648
+ /**
649
+ * Checks whether the given transient message is a duplicate of any cached error message.
650
+ *
651
+ * @param {object} oTransientMessage - The transient message containing technical details.
652
+ * @returns {boolean} - True if it's a duplicate, false otherwise.
653
+ */
654
+ function isDuplicateMessage (oTransientMessage) {
655
+ const rawMessage = oTransientMessage?.technicalDetails?.headers?.["sap-message"];
656
+ if (!rawMessage) {
657
+ return false;
658
+ }
659
+ let oError;
660
+ oError = JSON.parse(rawMessage);
661
+ // Check if any cached error matches the parsed error
662
+ return aWarningCache.some((oCachedError) => this.areMessagesSame(oCachedError, oError));
663
+ }
664
+
665
+ /**
666
+ * Clears the stored cache of warning messages.
667
+ * Should be called when a fresh state is needed (e.g.,action completion).
668
+ */
669
+ function clearWarningCache() {
670
+ // Empty the cache array in-place
671
+ aWarningCache.length = 0;
672
+ }
673
+
607
674
  return {
608
675
  operations: GenericMessageUtil.operations,
609
676
  handleTransientMessages: fnHandleTransientMessages,
@@ -620,6 +687,10 @@ sap.ui.define([
620
687
  getSeverityIconFromIconPool: getSeverityIconFromIconPool,
621
688
  getIconColor: getIconColor,
622
689
  getMessageDialogTitleAndSeverity: getMessageDialogTitleAndSeverity,
623
- deleteMessages: deleteMessages
690
+ deleteMessages: deleteMessages,
691
+ cacheWarningMessage: cacheWarningMessage,
692
+ areMessagesSame: areMessagesSame,
693
+ isDuplicateMessage: isDuplicateMessage,
694
+ clearWarningCache: clearWarningCache
624
695
  };
625
696
  });
@@ -137,12 +137,22 @@ sap.ui.define([
137
137
  });
138
138
  });
139
139
  } else if (oDefaultFilterValue) { // In cases where the default value is coming from the FLP user defaults and does not have ranges and the value is a single value
140
- aValues = [
141
- {
142
- operator: FilterOperator.EQ,
143
- selectedValues: [oDefaultFilterValue]
144
- }
145
- ];
140
+ if (oFilterItemForQuery.dataType === "Edm.Boolean") {
141
+ var boolFilterValue = JSON.parse(oDefaultFilterValue);
142
+ aValues = [
143
+ {
144
+ operator: FilterOperator.EQ,
145
+ selectedValues: [{ value: boolFilterValue, description: boolFilterValue }]
146
+ }
147
+ ];
148
+ } else {
149
+ aValues = [
150
+ {
151
+ operator: FilterOperator.EQ,
152
+ selectedValues: [oDefaultFilterValue]
153
+ }
154
+ ];
155
+ }
146
156
  }
147
157
  oFilterItemForQuery.defaultValue = aValues;
148
158
  }
@@ -574,7 +584,7 @@ sap.ui.define([
574
584
  var oValueHelpProperty = oSFBMetaModel.getODataProperty(oValueHelpEntity, key);
575
585
  var aResults = oResponse.results;
576
586
  var sTextArrangementPath = AnnotationHelper.getTextArrangementPath(oValueHelpProperty);
577
- var sTextArrangement = AnnotationHelper.getTextArrangement(oValueHelpEntity,oValueHelpProperty) || "idOnly";
587
+ var sTextArrangement = AnnotationHelper.getTextArrangementForEasyFilter(oValueHelpEntity,oValueHelpProperty);
578
588
  var navigationProperty = null;
579
589
  var sEntityForTextDescription = null;
580
590
 
@@ -340,7 +340,13 @@ sap.ui.define(["sap/ui/base/Object",
340
340
 
341
341
  fnInitializeHistory();
342
342
  var fnInitializeRouter = bIsFirst ? oNavigationControllerProxy.initialize : Function.prototype;
343
- var oData = !bIsRestoring && !oNavigationControllerProxy.oHashChanger.getHash() && oComponentData;
343
+ // Parameter is used to override Hash logic, only applicable to case then FEv2 app is launched as embedded application from MyInbox;
344
+ var bIsAppEmbeddedOne = !!oComponentData
345
+ && !!oComponentData.oStartupParameters
346
+ && !!oComponentData.oStartupParameters['openMode']
347
+ && oComponentData.oStartupParameters['openMode'].length > 0
348
+ && oComponentData.oStartupParameters['openMode'].some(function (sValue) {return sValue === 'embedIntoDetailsNestedRouter';});
349
+ var oData = !bIsRestoring && (!oNavigationControllerProxy.oHashChanger.getHash() || bIsAppEmbeddedOne) && oComponentData;
344
350
  var oStartupParameters = oData && oData.startupParameters;
345
351
  if (oStartupParameters){
346
352
  startupParameterHelper.parametersToNavigation(oTemplateContract, oStartupParameters).then(function(oMessageParameters){
@@ -2253,9 +2259,9 @@ sap.ui.define(["sap/ui/base/Object",
2253
2259
  if (oTreeNode.contextTargets){
2254
2260
  for (var i = 0; i < oTreeNode.contextTargets.length; i++){
2255
2261
  var oContextTarget = oTreeNode.contextTargets[i];
2256
- // Link control used for BreadCrumbs is bound to the context of the ancestor node as the description is fetched from
2257
- // the ancestor object. Unfortunately, the OP where the link is on the OP & its context is propagated, even specific call
2258
- // to set the context of ancestor node is not respected as the model find a context which is already bound. Hence, we need
2262
+ // Link control used for BreadCrumbs is bound to the context of the ancestor node as the description is fetched from
2263
+ // the ancestor object. Unfortunately, the OP where the link is on the OP & its context is propagated, even specific call
2264
+ // to set the context of ancestor node is not respected as the model find a context which is already bound. Hence, we need
2259
2265
  // to break the propagation of current object context before setting the context of ancestor node.
2260
2266
  oContextTarget.setBindingContext(null);
2261
2267
  oTreeNode.bindElement(oContextTarget, null, false);
@@ -3210,7 +3216,7 @@ sap.ui.define(["sap/ui/base/Object",
3210
3216
  * @param {sap.suite.ui.generic.template.lib.AppComponent} oAppComponent The AppComponent instance
3211
3217
  * @public
3212
3218
  * @extends sap.ui.base.Object
3213
- * @version 1.136.2
3219
+ * @version 1.138.0
3214
3220
  * @since 1.30.0
3215
3221
  * @alias sap.suite.ui.generic.template.lib.NavigationController
3216
3222
  */
@@ -588,18 +588,18 @@ sap.ui.define([
588
588
  const filterIgnoredFields = function (sField) {
589
589
  return !aIgnoreFields.has(sField);
590
590
  };
591
- const hasUIHidden = function(sField) {
592
- return !!mPropertyByFieldName[sField]["com.sap.vocabularies.UI.v1.Hidden"];
591
+ const hasUIHiddenOrUndefined = function(sField) {
592
+ return !!mPropertyByFieldName[sField]["com.sap.vocabularies.UI.v1.Hidden"] || oItemContext.getProperty(sField) === undefined;
593
593
  };
594
594
  for (const oProperty of aProperties){
595
595
  mPropertyByFieldName[oProperty.name] = oProperty;
596
596
  }
597
597
  //Filter unwanted fields ("IsActiveEntity", "DraftUUID") from technical keys
598
598
  aTechnicalKeys = aTechnicalKeys.filter(key => filterIgnoredFields(key.name));
599
- //Check for UI.Hidden fields, even if one of the field is UI.hidden we discard all the keys
600
- aSemanticKeys = aSemanticKeys.some(key => hasUIHidden(key.PropertyPath)) ? [] : aSemanticKeys;
601
- aTechnicalKeys = aTechnicalKeys.some(key => hasUIHidden(key.name)) ? [] : aTechnicalKeys;
602
- if (oHeaderInfoField && oHeaderInfoField?.Title?.Value?.Path && !hasUIHidden(oHeaderInfoField.Title.Value.Path)) { //HeaderInfoField is available
599
+ //Check for UI.Hidden fields or undefined fields, even if one of the field satisfies these conditions we discard all the keys
600
+ aSemanticKeys = aSemanticKeys.some(key => hasUIHiddenOrUndefined(key.PropertyPath)) ? [] : aSemanticKeys;
601
+ aTechnicalKeys = aTechnicalKeys.some(key => hasUIHiddenOrUndefined(key.name)) ? [] : aTechnicalKeys;
602
+ if (oHeaderInfoField && oHeaderInfoField?.Title?.Value?.Path && !hasUIHiddenOrUndefined(oHeaderInfoField.Title.Value.Path)) { //HeaderInfoField is available
603
603
  aRelevantColumns.push(getFieldProps(oHeaderInfoField.Title.Value.Path));
604
604
  } else if (aSemanticKeys.length > 0){ //HeaderInfoField is not available, but SemanticKey is available
605
605
  aRelevantColumns = aSemanticKeys.map(key => getFieldProps(key.PropertyPath));
@@ -66,7 +66,7 @@ sap.ui.define([
66
66
  interfaces: [],
67
67
  controls: [],
68
68
  elements: [],
69
- version: "1.136.2",
69
+ version: "1.138.0",
70
70
  extensions: {
71
71
  //Configuration used for rule loading of Support Assistant
72
72
  "sap.ui.support": {