@sapui5/sap.suite.ui.generic.template 1.120.33 → 1.120.34

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 (20) hide show
  1. package/package.json +4 -3
  2. package/src/sap/suite/ui/generic/template/.library +1 -1
  3. package/src/sap/suite/ui/generic/template/AnalyticalListPage/controller/ControllerImplementation.js +2 -2
  4. package/src/sap/suite/ui/generic/template/AnalyticalListPage/manifest.json +1 -1
  5. package/src/sap/suite/ui/generic/template/Canvas/manifest.json +1 -1
  6. package/src/sap/suite/ui/generic/template/ListReport/controller/ControllerImplementation.js +2 -2
  7. package/src/sap/suite/ui/generic/template/ListReport/controller/IappStateHandler.js +34 -33
  8. package/src/sap/suite/ui/generic/template/ListReport/manifest.json +1 -1
  9. package/src/sap/suite/ui/generic/template/ObjectPage/controller/RelatedAppsHandler.js +16 -8
  10. package/src/sap/suite/ui/generic/template/ObjectPage/controller/SectionTitleHandler.js +1 -1
  11. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_vi.properties +2 -2
  12. package/src/sap/suite/ui/generic/template/ObjectPage/manifest.json +1 -1
  13. package/src/sap/suite/ui/generic/template/ObjectPage/view/fragments/SmartForm.fragment.xml +1 -1
  14. package/src/sap/suite/ui/generic/template/QuickCreate/manifest.json +1 -1
  15. package/src/sap/suite/ui/generic/template/QuickView/manifest.json +1 -1
  16. package/src/sap/suite/ui/generic/template/js/AnnotationHelper.js +22 -1
  17. package/src/sap/suite/ui/generic/template/lib/AppComponent.js +1 -1
  18. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_da.properties +1 -1
  19. package/src/sap/suite/ui/generic/template/lib/navigation/NavigationController.js +1 -1
  20. package/src/sap/suite/ui/generic/template/library.js +1 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sapui5/sap.suite.ui.generic.template",
3
- "version": "1.120.33",
3
+ "version": "1.120.34",
4
4
  "description": "SAPUI5 Library sap.suite.ui.generic.template",
5
5
  "keywords": [
6
6
  "sapui5",
@@ -16,6 +16,7 @@
16
16
  "testsuite-qunit" : "ui5 serve --config ./ui5-local.yaml --open \"/test-resources/sap/suite/ui/generic/template/qunit/testsuite.qunit.html\""
17
17
  },
18
18
  "devDependencies": {
19
- "sonarqube-scanner": "3.5.0"
19
+ "sonarqube-scanner": "3.5.0",
20
+ "@sap/ux-ui5-tooling": "latest"
20
21
  }
21
- }
22
+ }
@@ -7,7 +7,7 @@
7
7
 
8
8
  (c) Copyright 2009-2015 SAP SE. All rights reserved
9
9
  </copyright>
10
- <version>1.120.33</version>
10
+ <version>1.120.34</version>
11
11
 
12
12
  <documentation>Library with generic Suite UI templates.</documentation>
13
13
 
@@ -258,12 +258,12 @@ sap.ui.define(["sap/fe/navigation/SelectionVariant",
258
258
  var sEntityTypeName = oMetaModel.getODataEntitySet(oPresentationControlHandler.getEntitySet()).entityType;
259
259
  var oTable = oState.oSmartTable.getTable();
260
260
  var oBinding = oTable.getBinding("rows") || oTable.getBinding("items");
261
- var sServiceUrl = oBinding && oBinding.getDownloadUrl();
261
+ var sServiceUrl = oBinding ? oBinding.getDownloadUrl() : "";
262
262
  // - For Analytical Binding.
263
263
  // we recv. aApplicationFilter and aApplicationFilters binding both but aApplicationFilter have actual filters operator value.
264
264
  // - For List Binding.
265
265
  // we recv. only aApplicationFilters contains filter operator.
266
- var aFilters = oBinding.aApplicationFilter || oBinding.aApplicationFilters;
266
+ var aFilters = oBinding ? (oBinding.aApplicationFilter || oBinding.aApplicationFilters) : [];
267
267
  // non-draft case when no filter is applied
268
268
  if (!aFilters.length) {
269
269
  return Promise.resolve({
@@ -8,7 +8,7 @@
8
8
  "i18n": "i18n/i18n.properties",
9
9
  "applicationVersion": {
10
10
  "__comment": "applicationVersion oder componentversion??",
11
- "version": "1.120.33"
11
+ "version": "1.120.34"
12
12
  },
13
13
  "title": "{{TITLE}}",
14
14
  "description": "{{DESCRIPTION}}",
@@ -8,7 +8,7 @@
8
8
  "i18n": "i18n/i18n.properties",
9
9
  "applicationVersion": {
10
10
  "__comment": "applicationVersion oder componentversion??",
11
- "version": "1.120.33"
11
+ "version": "1.120.34"
12
12
  },
13
13
  "title": "Canvas",
14
14
  "description": "Canvas Page",
@@ -306,12 +306,12 @@ sap.ui.define([
306
306
  var oMetaModel = oPresentationControlHandler.getModel().getMetaModel();
307
307
  var sEntityTypeName = oMetaModel.getODataEntitySet(oPresentationControlHandler.getEntitySet()).entityType;
308
308
  var oBinding = oPresentationControlHandler.getBinding(oState);
309
- var sServiceUrl = oBinding.getDownloadUrl();
309
+ var sServiceUrl = oBinding ? oBinding.getDownloadUrl() : "";
310
310
  // - For Analytical Binding.
311
311
  // we recv. aApplicationFilter and aApplicationFilters binding both but aApplicationFilter have actual filters operator value.
312
312
  // - For List Binding.
313
313
  // we recv. only aApplicationFilters contains filter operator.
314
- var aFilters = oBinding.aApplicationFilter || oBinding.aApplicationFilters;
314
+ var aFilters = oBinding ? (oBinding.aApplicationFilter || oBinding.aApplicationFilters) : [];
315
315
  // non-draft case when no filter is applied
316
316
  if (!aFilters.length) {
317
317
  return Promise.resolve({
@@ -79,12 +79,12 @@ sap.ui.define([
79
79
  var aPageVariantControlStateWrappers = []; // controls handled from page variant management if used: smartTable, searchfield, partly multiple views
80
80
 
81
81
  // SmartTable state: Table Settings and (in case of control level variant management) selected variant and whether it's dirty
82
- // In case of multipleViews with multiple tables (mode "multi"), each tab has an own table or chart, which has an own state, so multipleViewsHandler has to take care of
82
+ // In case of multipleViews with multiple tables (mode "multi"), each tab has an own table or chart, which has an own state, so multipleViewsHandler has to take care of
83
83
  // storing/restoring their states (in its part of the appState stored in genericData.tableTabData)
84
- // In this case, mutliViewsHandler exchanges oState.oPresentationControlHandler (setting it always to the current visible one), so don't rely on that to get the wrapper.
84
+ // In this case, mutliViewsHandler exchanges oState.oPresentationControlHandler (setting it always to the current visible one), so don't rely on that to get the wrapper.
85
85
  // Using the id (without providing optional parameter sQuickVariantKey) returns the smartTable only in single table case.
86
86
  var oSmartTable = oController.byId(StableIdHelper.getStableId({type: "ListReportTable", subType: "SmartTable"}));
87
- if (oSmartTable){ // in multipleViews case (with multiple tables) currently multipleViews handler handles complete state information
87
+ if (oSmartTable){ // in multipleViews case (with multiple tables) currently multipleViews handler handles complete state information
88
88
  aControlStateWrappers.push(oTemplateUtils.oCommonUtils.getControlStateWrapper(oSmartTable));
89
89
  }
90
90
 
@@ -123,7 +123,7 @@ sap.ui.define([
123
123
 
124
124
  // List of handlers to react on (app or adaptation) extension state changes. Only one entry expected (handler in SFB wrapper). Currently, extensions are only possible in
125
125
  // SFB - if extensions at other places are needed, the similar handler might differ depending on whether page variant management is used.
126
- var aExtensionStateChangeHandlers = [];
126
+ var aExtensionStateChangeHandlers = [];
127
127
  function customAppStateChange() {
128
128
  aExtensionStateChangeHandlers.forEach(function(fnHandler) {
129
129
  fnHandler();
@@ -234,7 +234,7 @@ sap.ui.define([
234
234
 
235
235
 
236
236
  // Wrapper to control whether data is loaded
237
-
237
+
238
238
  function fnGetDataLoadedWrapper(){
239
239
  // Wrapper to control whether data is expected to be loaded - controls the state, but does not trigger loading data on restore!
240
240
  var oTemplatePrivateModel = oTemplateUtils.oComponentUtils.getTemplatePrivateModel();
@@ -242,15 +242,15 @@ sap.ui.define([
242
242
  // - startup with iAppState: anyway setState will be called
243
243
  // - other startup cases: applyInitialLoadBehavior calls setState explicitly
244
244
  // - navigation
245
-
245
+
246
246
  function fnSetState(bState){
247
247
  oTemplatePrivateModel.setProperty("/generic/bDataAreShownInTable", bState);
248
248
  }
249
-
249
+
250
250
  function fnGetState(){
251
251
  return oTemplatePrivateModel.getProperty("/generic/bDataAreShownInTable");
252
252
  }
253
-
253
+
254
254
  function fnSetDataShown(bDataShown, fnHandler){
255
255
  if (bDataShown === fnGetState()){
256
256
  return;
@@ -258,7 +258,7 @@ sap.ui.define([
258
258
  fnSetState(bDataShown);
259
259
  fnHandler();
260
260
  }
261
-
261
+
262
262
  return {
263
263
  getLocalId: function(){
264
264
  return "$dataLoaded";
@@ -266,7 +266,7 @@ sap.ui.define([
266
266
  setState: fnSetState,
267
267
  getState: fnGetState,
268
268
  attachStateChanged: function(fnHandler){
269
- // changing from data not loaded to data loaded:
269
+ // changing from data not loaded to data loaded:
270
270
  // - when SFB triggers search
271
271
  oState.oSmartFilterbar.attachSearch(fnSetDataShown.bind(null, true, fnHandler));
272
272
 
@@ -281,7 +281,7 @@ sap.ui.define([
281
281
  }
282
282
  };
283
283
  }
284
-
284
+
285
285
  var oDataLoadedWrapper = fnGetDataLoadedWrapper();
286
286
  aControlStateWrappers.push(oDataLoadedWrapper);
287
287
  // oDataLoadedWrapper.attachStateChanged(changeIappState);
@@ -390,7 +390,7 @@ sap.ui.define([
390
390
  if (Device.system.phone) {
391
391
  collapseHeader();
392
392
  }
393
- // Ideally, oDataLoadedWrapper should ensure to keep its state correct. However, currently we have no means to attach to the command - i.e. oDataLoadedWrapper only
393
+ // Ideally, oDataLoadedWrapper should ensure to keep its state correct. However, currently we have no means to attach to the command - i.e. oDataLoadedWrapper only
394
394
  // attaches to SFB's search event, which is only triggered when user presses the go button. When keyboard shortcut is used instead, this handler would be called (as it
395
395
  // is attached to the command), but SFB's search event would not be triggered. As workaround, we additionally set data loaded state to true here and inform explicitly
396
396
  // the the state has changed.
@@ -434,7 +434,7 @@ sap.ui.define([
434
434
  }
435
435
  }
436
436
  }
437
-
437
+
438
438
  /*
439
439
  This method is called when an LR app is the target of an external navigation and the XAppState data contains a presentationVariant.
440
440
  The sorting from this presentationVariant is then applied to the table.
@@ -454,13 +454,13 @@ sap.ui.define([
454
454
  fnAdaptOtherControlsToAppState(oAppData.controlStates);
455
455
  if (areDataShownInTable()){
456
456
  // fnAdaptOtherControlsToAppState only (synchronously) sets the state including the information whether data should be loaded - if this is the case, the actual loading
457
- // (which happens asynchronous of course) still needs to be triggered
457
+ // (which happens asynchronous of course) still needs to be triggered
458
458
  loadData();
459
459
  } else {
460
460
  // hide placeholder already here, if no data is to be loaded - in case data is loaded, it will be hidden in data received event
461
461
  oTemplateUtils.oComponentUtils.hidePlaceholder();
462
- }
463
-
462
+ }
463
+
464
464
  // special case: when restoring an old app state with data loaded, but in the meantime a filter not set in that state has been changed to mandatory, SFB.search would not
465
465
  // trigger a request (but instead only mark that filter) - thus hiding placeholder now to avoid it to stay forever
466
466
  // TODO: refactor: Still in that case our internal data shows data are loaded - ideally, that should not be the case
@@ -597,7 +597,7 @@ sap.ui.define([
597
597
 
598
598
  function fnAdaptToAppStateStartUpWithParameters(oAppData, oURLParameters, sPreferredQuickVariantSelectionKey){
599
599
  handleVariantIdPassedViaURLParams(oURLParameters);
600
-
600
+
601
601
  var oSFBUiState = oState.oSmartFilterbar.getUiState();
602
602
  var oSFBSemanticDates = oSFBUiState.getSemanticDates();
603
603
  //oStartupObject to be passed to the extension where urlParameters and selectedQuickVariantSelectionKey are optional
@@ -760,23 +760,24 @@ sap.ui.define([
760
760
  default:
761
761
  throw new FeError(sClassName, "Invalid navigation type: " + sNavType);
762
762
  }
763
-
763
+
764
764
  // common to all startup cases (except iAppState)
765
765
  if (areDataShownInTable()){
766
766
  // trigger search if needed
767
767
  oState.oSmartFilterbar.search();
768
- // For desktop devices, expand the header for Standard and Custom variants and for tablet and mobile devices,
768
+ // For desktop devices, expand the header for Standard and Custom variants and for tablet and mobile devices,
769
769
  // collapse the header only if search is triggered.
770
770
  if (Device.system.desktop) {
771
771
  oTemplateUtils.oCommonUtils.getControlStateWrapper(oController.byId(StableIdHelper.getStableId({type: "ListReportPage", subType: "DynamicPage"}))).setHeaderState(oController, true);
772
772
  } else {
773
773
  collapseHeader();
774
774
  }
775
- } else {
776
- // if no data are loaded, place holder has to be hidden now - otherwise it will be hidden when data is received
775
+ }
776
+ if (!areDataShownInTable() || Object.keys(oState.oSmartFilterbar.verifySearchAllowed()).length > 0) {
777
+ // if no data are loaded or search is not allowed, place holder has to be hidden now - otherwise it will be hidden when data is received
777
778
  oTemplateUtils.oComponentUtils.hidePlaceholder();
778
779
  }
779
-
780
+
780
781
  // ensure first iAppState is created
781
782
  changeIappState();
782
783
  }
@@ -977,14 +978,14 @@ sap.ui.define([
977
978
  }
978
979
 
979
980
  // provide data load settings including defaulting
980
- // ideally, this should be implemented in a generic way in template assembler, so that generated getters also return default values for objects if not explicitely set in
981
+ // ideally, this should be implemented in a generic way in template assembler, so that generated getters also return default values for objects if not explicitely set in
981
982
  // manifest (i.e. it should be sufficient to define the default in component - no need to individually implement defaulting!)
982
983
  function getDataLoadSettings(){
983
984
  // general default
984
985
  var oDefaultDataLoadSettings = {loadDataOnAppLaunch: "ifAnyFilterExist"};
985
986
 
986
987
  // intension is boolean, but unfortunately faulty values are (historically) not treated consistently
987
- var bEnableAutoBindingMultiViews = oState.oMultipleViewsHandler.getOriginalEnableAutoBinding();
988
+ var bEnableAutoBindingMultiViews = oState.oMultipleViewsHandler.getOriginalEnableAutoBinding();
988
989
 
989
990
  // if multiple views settings is not defined (also the case in single views case), general default is taken. Unlike other faulty values, null is treated like undefined
990
991
  if (bEnableAutoBindingMultiViews !== undefined && bEnableAutoBindingMultiViews !== null){
@@ -994,13 +995,13 @@ sap.ui.define([
994
995
 
995
996
  var oManifestDataLoadSettings = oController.getOwnerComponent().getDataLoadSettings();
996
997
  // (historically) explicit setting empty string (not an allowed value according to definition in component!) is treated like undefined (including adopting multiple views
997
- // settings. Other not allowed values (any other sting) were ignored, i.e. returning undefined from getInitialLoadBehaviourSettings, thus setting undefined to
998
- // oSmartVariantManagement.setExecuteOnStandard (which actually only sets the default) and finally using the value returned from
998
+ // settings. Other not allowed values (any other sting) were ignored, i.e. returning undefined from getInitialLoadBehaviourSettings, thus setting undefined to
999
+ // oSmartVariantManagement.setExecuteOnStandard (which actually only sets the default) and finally using the value returned from
999
1000
  // oSmartVariantManagement.getExecuteOnStandard (only different from overall default (false), if user has explicitly set it)
1000
1001
  if (oManifestDataLoadSettings && oManifestDataLoadSettings.loadDataOnAppLaunch === ""){
1001
1002
  oManifestDataLoadSettings.loadDataOnAppLaunch = undefined;
1002
1003
  }
1003
-
1004
+
1004
1005
  // explicit setting has highest priority
1005
1006
  return extend(oDefaultDataLoadSettings, oManifestDataLoadSettings);
1006
1007
  }
@@ -1009,7 +1010,7 @@ sap.ui.define([
1009
1010
  // - sets default value for flag whether standard variant should be execute on select
1010
1011
  // - determines whether we actually should load data
1011
1012
  function applyInitialLoadBehavior(bDataLoadCausedByNavigation){
1012
- // cases definitely determining to load data initially
1013
+ // cases definitely determining to load data initially
1013
1014
  // - worklist
1014
1015
  // - livemode
1015
1016
  // - master detail (i.e. bLoadListAndFirstEntryOnStartup is set)
@@ -1018,17 +1019,17 @@ sap.ui.define([
1018
1019
 
1019
1020
  var sLoadBehaviour = getDataLoadSettings().loadDataOnAppLaunch;
1020
1021
  if (!oSmartVariantManagement || oController.getOwnerComponent().getVariantManagementHidden()){
1021
- // No VM ->
1022
+ // No VM ->
1022
1023
  bShouldDataBeLoaded = bShouldDataBeLoaded || sLoadBehaviour === "always";
1023
1024
  bShouldDataBeLoaded = bShouldDataBeLoaded || (sLoadBehaviour === "ifAnyFilterExist" && oSmartFilterbar.getFiltersWithValues().length > 0);
1024
1025
  // behavior of last patch set would translate to the following - seems not to be correct (in case of setting ifAnyFilterExist but no filters provided)
1025
1026
  // bShouldDataBeLoaded = bShouldDataBeLoaded || sLoadBehaviour !== "never";
1026
1027
  } else {
1027
- // in case of a (visible) SVM, we need to set the default value
1028
- // default value for standard variant
1028
+ // in case of a (visible) SVM, we need to set the default value
1029
+ // default value for standard variant
1029
1030
  // - true if one of the conditions above is fulfilled
1030
- // - or for any manifest setting but "never"
1031
- // (Remark: "ifAnyFilterExist" leads to mark the standard variant true, even if no filter is provided - this looks ok for startup, as the text shown to the user
1031
+ // - or for any manifest setting but "never"
1032
+ // (Remark: "ifAnyFilterExist" leads to mark the standard variant true, even if no filter is provided - this looks ok for startup, as the text shown to the user
1032
1033
  // contains the condition, but if reselecting the standard variant, it will also select without filters!
1033
1034
  // TODO: check, how to solve that inconsistency)
1034
1035
  // - but in both cases not, if a mandatory filter is missing
@@ -8,7 +8,7 @@
8
8
  "i18n": "i18n/i18n.properties",
9
9
  "applicationVersion": {
10
10
  "__comment": "applicationVersion oder componentversion??",
11
- "version": "1.120.33"
11
+ "version": "1.120.34"
12
12
  },
13
13
  "title": "{{TITLE}}",
14
14
  "description": "{{DESCRIPTION}}",
@@ -89,18 +89,26 @@ sap.ui.define([
89
89
 
90
90
  var oLinksDeferred;
91
91
  var bHasRelatedAppSettings = oRelatedAppsSettings && Object.keys(oRelatedAppsSettings).length > 0;
92
+
92
93
  if (bHasRelatedAppSettings) {
93
- var aSemanticObjects = [[{
94
- semanticObject: sCurrentSemObj
95
- }]];
94
+ const oSemanticObjectSet = new Set();
95
+ // Add the current semantic object into the set
96
+ oSemanticObjectSet.add(sCurrentSemObj);
96
97
 
97
- for (var sKey in oRelatedAppsSettings) {
98
- if (sKey) {
99
- aSemanticObjects.push([{
100
- semanticObject: oRelatedAppsSettings[sKey].semanticObject
101
- }]);
98
+ // Iterate through oRelatedAppSettings and add all related apps into the set
99
+ for (const sKey in oRelatedAppsSettings) {
100
+ if (sKey && oRelatedAppsSettings.hasOwnProperty(sKey)) {
101
+ const sSemanticObject = oRelatedAppsSettings[sKey].semanticObject;
102
+ oSemanticObjectSet.add(sSemanticObject); // Set will handle duplicates
102
103
  }
103
104
  }
105
+ // Create an array from the set
106
+ let aSemanticObjects = Array.from(oSemanticObjectSet);
107
+
108
+ // Use the map method to convert the array of strings into an array of objects
109
+ aSemanticObjects = aSemanticObjects.map(sSemObj => ([{ semanticObject: sSemObj }]));
110
+
111
+ // aSemanticObjects now contains the desired format
104
112
  oLinksDeferred = oXApplNavigation.getLinks(aSemanticObjects);
105
113
  } else {
106
114
  var oAppComponent = oController.getOwnerComponent().getAppComponent();
@@ -25,7 +25,7 @@ sap.ui.define([
25
25
  return accBlock;
26
26
  }, [])
27
27
  .forEach(function(entry) {
28
- if (!oSubSectionInfoObject) {
28
+ if (!oSubSectionInfoObject || (entry.getGroups().length === 1 && entry.getGroups()[0].getTitle && !entry.getGroups()[0].getTitle())) {
29
29
  // Case: header is editable. manifest.json, editableHeaderContent=true
30
30
  var sInvisibleTextID = `${entry.getId()}-ariaLabelBy-InvisibleText`,
31
31
  oInvisibleText = Element.getElementById(sInvisibleTextID);
@@ -182,8 +182,8 @@ ENTER_MANDATORY=Nh\u00E2\u0323p gia\u0301 tri\u0323 cho tr\u01B0\u01A1\u0300ng {
182
182
 
183
183
  REQUIRED_PROP_ERROR=Nh\u1EADp gi\u00E1 tr\u1ECB.
184
184
 
185
- REQUIRED_PROP_COLUMN_HIDDEN_ERROR=Ba\u0309ng ch\u01B0\u0301a l\u00F4\u0303i. {0} la\u0300 gi\u00E1 tr\u1ECB b\u0103\u0301t bu\u00F4\u0323c nh\u01B0ng kh\u00F4ng \u0111\u01B0\u01A1\u0323c hi\u00EA\u0309n thi\u0323 trong ba\u0309ng. Vui lo\u0300ng th\u00EAm gi\u00E1 tr\u1ECB trong thi\u00EA\u0301t l\u00E2\u0323p ba\u0309ng.
186
- REQUIRED_PROP_COLUMN_HIDDEN_ERROR_PLURAL=Ba\u0309ng ch\u01B0\u0301a l\u00F4\u0303i. {0} la\u0300 gi\u00E1 tr\u1ECB b\u0103\u0301t bu\u00F4\u0323c nh\u01B0ng kh\u00F4ng \u0111\u01B0\u01A1\u0323c hi\u00EA\u0309n thi\u0323 trong ba\u0309ng. Vui lo\u0300ng th\u00EAm gi\u00E1 tr\u1ECB trong thi\u00EA\u0301t l\u00E2\u0323p ba\u0309ng.
185
+ REQUIRED_PROP_COLUMN_HIDDEN_ERROR=Ba\u0309ng ch\u01B0\u0301a l\u00F4\u0303i. {0} la\u0300 gi\u00E1 tr\u1ECB b\u0103\u0301t bu\u00F4\u0323c nh\u01B0ng kh\u00F4ng \u0111\u01B0\u01A1\u0323c hi\u00EA\u0309n thi\u0323 trong ba\u0309ng. Vui lo\u0300ng th\u00EAm gi\u00E1 tr\u1ECB trong thi\u00EA\u0301t l\u00E2\u0323p m\u00E0n h\u00ECnh.
186
+ REQUIRED_PROP_COLUMN_HIDDEN_ERROR_PLURAL=Ba\u0309ng ch\u01B0\u0301a l\u00F4\u0303i. {0} la\u0300 gi\u00E1 tr\u1ECB b\u0103\u0301t bu\u00F4\u0323c nh\u01B0ng kh\u00F4ng \u0111\u01B0\u01A1\u0323c hi\u00EA\u0309n thi\u0323 trong ba\u0309ng. Vui lo\u0300ng th\u00EAm gi\u00E1 tr\u1ECB trong thi\u00EA\u0301t l\u00E2\u0323p m\u00E0n h\u00ECnh.
187
187
 
188
188
  T_PAGINATOR_CONTROL_PAGINATOR_TOOLTIP_UP=Mu\u0323c tr\u01B0\u01A1\u0301c
189
189
 
@@ -6,7 +6,7 @@
6
6
  "type": "component",
7
7
  "i18n": "i18n/i18n.properties",
8
8
  "applicationVersion": {
9
- "version": "1.120.33"
9
+ "version": "1.120.34"
10
10
  },
11
11
  "title": "{{TITLE}}",
12
12
  "description": "{{DESCRIPTION}}",
@@ -21,7 +21,7 @@
21
21
  <core:CustomData key="defaultDropDownDisplayBehaviour" value="descriptionOnly" />
22
22
  <core:CustomData key="defaultTextInEditModeSource" value="ValueListNoValidation" />
23
23
  <core:CustomData key="dateFormatSettings" value='\{"UTC":true,"style":"medium"\}' />
24
- <core:CustomData key="smartFormAriaLabel" value="{parts: [{path: 'facet>'}, {path: 'entitySet>name'}], formatter: 'AH.getSmartFormTitle'}" />
24
+ <core:CustomData key="smartFormAriaLabel" value="{parts: [{path: 'facet>'}, {path: 'entitySet>name'}, {path: 'block>'}, {path: 'subSectionData>'}], formatter: 'AH.getSmartFormTitle'}" />
25
25
  </sfo:customData>
26
26
  <sfo:layout>
27
27
  <template:if test="{= ${appSettings>/useColumnLayoutForSmartForm} !== false}">
@@ -6,7 +6,7 @@
6
6
  "type": "component",
7
7
  "i18n": "i18n/i18n.properties",
8
8
  "applicationVersion": {
9
- "version": "1.120.33"
9
+ "version": "1.120.34"
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.120.33"
9
+ "version": "1.120.34"
10
10
  },
11
11
  "title": "{{TITLE}}",
12
12
  "description": "{{DESCRIPTION}}",
@@ -4286,10 +4286,31 @@ sap.ui.define(["sap/ui/model/odata/AnnotationHelper",
4286
4286
  };
4287
4287
  },
4288
4288
 
4289
- getSmartFormTitle: function(oInterface, oFacet, sEntitySetName) {
4289
+ getSmartFormTitle: function(oInterface, oFacet, sEntitySetName, oBlock, oSubSectionData) {
4290
4290
  if (!oFacet) {
4291
+ return oAnnotationHelper.getTitleForSectionsForms(oBlock, oSubSectionData);
4292
+ }
4293
+ return oAnnotationHelper.getTitleForHeaderForm(oInterface, oFacet, sEntitySetName);
4294
+ },
4295
+
4296
+ getTitleForSectionsForms: function(oBlock, oSubSectionData) {
4297
+ if (oSubSectionData?.annotations?.Facet?.annotation?.Facets?.length > 1
4298
+ || oSubSectionData?.annotations?.Facet?.annotation?.Label?.String !== oBlock?.aggregations?.groups[0]?.annotations?.Facet?.annotation?.Label?.String
4299
+ ) {
4300
+ // In case Section -> SubSection have more than one form, SmartForm will have it's titles visible
4301
+ // or
4302
+ // SubSectin title !== SmartForm title, SmartForm title will also be visible
4291
4303
  return;
4292
4304
  }
4305
+ if (oBlock?.aggregations?.groups[0]?.annotations?.Facet?.annotation?.Label?.String !== oBlock?.aggregations?.groups[0]?.targetAnnotation?.Label?.String) {
4306
+ // Compare SmartForm title !== FiledGroup title
4307
+ // if they differs -> use FiledGoup title
4308
+ return oBlock?.aggregations?.groups[0]?.targetAnnotation?.Label?.String;
4309
+ }
4310
+ return;
4311
+ },
4312
+
4313
+ getTitleForHeaderForm: function(oInterface, oFacet, sEntitySetName) {
4293
4314
  if (oFacet.Target && oFacet.Target.AnnotationPath && oFacet.Target.AnnotationPath.indexOf("com.sap.vocabularies.UI.v1.DataPoint") > -1) {
4294
4315
  // Process DataPoint case
4295
4316
  var { sAnnotationPath, oEntityType } = oAnnotationHelper.getModelData(oInterface, oFacet.Target.AnnotationPath, sEntitySetName);
@@ -922,7 +922,7 @@ sap.ui.define([
922
922
  * @extends sap.ui.core.UIComponent
923
923
  * @abstract
924
924
  * @author SAP SE
925
- * @version 1.120.33
925
+ * @version 1.120.34
926
926
  * @name sap.suite.ui.generic.template.lib.AppComponent
927
927
  */
928
928
  return UIComponent.extend("sap.suite.ui.generic.template.lib.AppComponent", {
@@ -37,7 +37,7 @@ DATA_LOSS_DISCARD_CHANGES=Kass\u00E9r \u00E6ndringer
37
37
 
38
38
  ST_KEEP_DRAFT_BTN=Behold udkast
39
39
 
40
- ST_DISCARD_DRAFT_BTN=Kass\u00E9r udkast
40
+ ST_DISCARD_DRAFT_BTN=Kasser udkast
41
41
 
42
42
  ST_UNSAVED_CHANGES_TITLE=Ikkegemte \u00E6ndringer
43
43
 
@@ -3089,7 +3089,7 @@ sap.ui.define(["sap/ui/base/Object",
3089
3089
  * @param {sap.suite.ui.generic.template.lib.AppComponent} oAppComponent The AppComponent instance
3090
3090
  * @public
3091
3091
  * @extends sap.ui.base.Object
3092
- * @version 1.120.33
3092
+ * @version 1.120.34
3093
3093
  * @since 1.30.0
3094
3094
  * @alias sap.suite.ui.generic.template.lib.NavigationController
3095
3095
  */
@@ -60,7 +60,7 @@ sap.ui.define([
60
60
  interfaces: [],
61
61
  controls: [],
62
62
  elements: [],
63
- version: "1.120.33",
63
+ version: "1.120.34",
64
64
  extensions: {
65
65
  //Configuration used for rule loading of Support Assistant
66
66
  "sap.ui.support": {