@sapui5/sap.suite.ui.generic.template 1.121.2 → 1.122.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 (57) 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/controller/ControllerImplementation.js +11 -2
  4. package/src/sap/suite/ui/generic/template/AnalyticalListPage/controller/FilterBarController.js +1 -1
  5. package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_da.properties +1 -1
  6. package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_mk.properties +3 -3
  7. package/src/sap/suite/ui/generic/template/AnalyticalListPage/i18n/i18n_nl.properties +1 -1
  8. package/src/sap/suite/ui/generic/template/AnalyticalListPage/manifest.json +1 -1
  9. package/src/sap/suite/ui/generic/template/Canvas/manifest.json +1 -1
  10. package/src/sap/suite/ui/generic/template/ListReport/controller/ControllerImplementation.js +21 -16
  11. package/src/sap/suite/ui/generic/template/ListReport/controller/CtxMenuHandler.js +2 -2
  12. package/src/sap/suite/ui/generic/template/ListReport/controller/MultipleViewsHandler.js +2 -2
  13. package/src/sap/suite/ui/generic/template/ListReport/extensionAPI/ExtensionAPI.js +7 -1
  14. package/src/sap/suite/ui/generic/template/ListReport/i18n/i18n_mk.properties +2 -2
  15. package/src/sap/suite/ui/generic/template/ListReport/manifest.json +1 -1
  16. package/src/sap/suite/ui/generic/template/ListReport/view/fragments/SmartTable.fragment.xml +4 -0
  17. package/src/sap/suite/ui/generic/template/ObjectPage/controller/ControllerImplementation.js +39 -45
  18. package/src/sap/suite/ui/generic/template/ObjectPage/controller/CtxMenuHandler.js +4 -4
  19. package/src/sap/suite/ui/generic/template/ObjectPage/controller/SectionTitleHandler.js +10 -8
  20. package/src/sap/suite/ui/generic/template/ObjectPage/controller/inlineCreationRows/InlineCreationRowsHelper.js +31 -6
  21. package/src/sap/suite/ui/generic/template/ObjectPage/extensionAPI/ExtensionAPI.js +8 -26
  22. package/src/sap/suite/ui/generic/template/ObjectPage/manifest.json +1 -1
  23. package/src/sap/suite/ui/generic/template/ObjectPage/view/fragments/SmartTable.fragment.xml +4 -0
  24. package/src/sap/suite/ui/generic/template/QuickCreate/manifest.json +1 -1
  25. package/src/sap/suite/ui/generic/template/QuickView/manifest.json +1 -1
  26. package/src/sap/suite/ui/generic/template/fragments/SmartTableResponsiveTableCommons.fragment.xml +7 -2
  27. package/src/sap/suite/ui/generic/template/fragments/SmartTableUiTableCommons.fragment.xml +3 -2
  28. package/src/sap/suite/ui/generic/template/genericUtilities/controlHelper.js +7 -3
  29. package/src/sap/suite/ui/generic/template/genericUtilities/filterHelper.js +1 -1
  30. package/src/sap/suite/ui/generic/template/js/AnnotationHelperHiddenTermSupport.js +69 -0
  31. package/src/sap/suite/ui/generic/template/lib/AdaptiveCardHelper.js +4 -4
  32. package/src/sap/suite/ui/generic/template/lib/AppComponent.js +2 -2
  33. package/src/sap/suite/ui/generic/template/lib/CommonEventHandlers.js +51 -9
  34. package/src/sap/suite/ui/generic/template/lib/CommonUtils.js +40 -8
  35. package/src/sap/suite/ui/generic/template/lib/ComponentUtils.js +2 -3
  36. package/src/sap/suite/ui/generic/template/lib/ContextMenuHandler.js +107 -18
  37. package/src/sap/suite/ui/generic/template/lib/FocusHelper.js +2 -2
  38. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_de.properties +1 -1
  39. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_hr.properties +1 -1
  40. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_mk.properties +3 -3
  41. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_pt.properties +1 -1
  42. package/src/sap/suite/ui/generic/template/lib/info/SmartTableInfo.js +8 -1
  43. package/src/sap/suite/ui/generic/template/lib/multipleViews/MultipleTablesModeHelper.js +20 -7
  44. package/src/sap/suite/ui/generic/template/lib/multipleViews/MultipleViewsHandler.js +41 -27
  45. package/src/sap/suite/ui/generic/template/lib/navigation/NavigationController.js +9 -5
  46. package/src/sap/suite/ui/generic/template/lib/navigation/routingHelper.js +3 -5
  47. package/src/sap/suite/ui/generic/template/lib/presentationControl/SmartTableHandler.js +26 -1
  48. package/src/sap/suite/ui/generic/template/library.js +1 -1
  49. package/src/sap/suite/ui/generic/template/listTemplates/controller/DetailController.js +1 -1
  50. package/src/sap/suite/ui/generic/template/listTemplates/fragments/DetailSmartTable.fragment.xml +7 -3
  51. package/src/sap/suite/ui/generic/template/manifestMerger/MergerUtil.js +4 -5
  52. package/src/sap/suite/ui/generic/template/themes/sap_horizon/AnalyticalListPage.less +3 -0
  53. package/src/sap/suite/ui/generic/template/themes/sap_horizon/library.source.less +2 -1
  54. package/src/sap/suite/ui/generic/template/themes/sap_horizon_dark/AnalyticalListPage.less +3 -0
  55. package/src/sap/suite/ui/generic/template/themes/sap_horizon_dark/library.source.less +3 -2
  56. package/src/sap/suite/ui/generic/template/themes/sap_horizon_hcb/AnalyticalListPage.less +5 -1
  57. package/src/sap/suite/ui/generic/template/themes/sap_horizon_hcw/AnalyticalListPage.less +5 -1
@@ -83,7 +83,8 @@ sap.ui.define([
83
83
  oUIModelPropsWithChangeEventAttached = new Set(),
84
84
  mContextWithCreatablePathByTableId = new Map(),
85
85
  oEditedRowContexts = new Set(),
86
- mRequiredPropHelperByTableId = new Map();
86
+ mRequiredPropHelperByTableId = new Map(),
87
+ oGridTableWithRowsUpdatedEvent = new Set();
87
88
 
88
89
  /**
89
90
  * This method is invoked when the object page content changes. For example,
@@ -475,6 +476,8 @@ sap.ui.define([
475
476
  function fnUpdateTableRows(oTable) {
476
477
  if (controlHelper.isMTable(oTable)) {
477
478
  fnUpdateResponsiveTableRows(oTable);
479
+ } else {
480
+ fnAttachRowsUpdatedEventForGridTable(oTable);
478
481
  }
479
482
  }
480
483
 
@@ -489,11 +492,9 @@ sap.ui.define([
489
492
  var sDefaultRowType,
490
493
  sTableId = oTable.getId(),
491
494
  aInactiveRows = fnGetInactiveRowsWithoutTypeBinding(oTable);
492
-
493
495
  if (aInactiveRows.length === 0) {
494
496
  return;
495
497
  }
496
-
497
498
  // Preserving the default row type into "mDefaultRowTypeByTableId".
498
499
  // sDefaultRowType is used by "fnHideInlineControlsOnInactiveRow" to restore the row type when the row is persisted
499
500
  if (mDefaultRowTypeByTableId.get(sTableId)) {
@@ -505,7 +506,7 @@ sap.ui.define([
505
506
 
506
507
  aInactiveRows.forEach(function (oInactiveRow) {
507
508
  // Making non insertable property cells as read-only
508
- fnUpdateResponsiveTableRowsBasedOnNonInsertableProperties(oTable, oInactiveRow);
509
+ fnUpdateTableRowsBasedOnNonInsertableProperties(oTable, oInactiveRow);
509
510
  // Hiding the inline controls
510
511
  fnInvokeCallbackAfterRendering(oInactiveRow, fnHideInlineControlsOnInactiveRow.bind(null, oInactiveRow, sDefaultRowType));
511
512
  });
@@ -524,8 +525,27 @@ sap.ui.define([
524
525
  });
525
526
  return aInactiveRows;
526
527
  }
528
+ /**
529
+ * This method attaches a 'rowUpdated' event listener to a Grid Table.
530
+ * Each time a table is updated, it processes the rows for non insertable cells.
531
+ */
532
+ function fnAttachRowsUpdatedEventForGridTable(oTable) {
533
+ var sId = oTable.getId();
534
+ if (oGridTableWithRowsUpdatedEvent.has(sId)) {
535
+ return;
536
+ }
537
+ oGridTableWithRowsUpdatedEvent.add(sId);
538
+ oTable.attachEvent("rowsUpdated", function() {
539
+ var oRows = oTable.getRows();
540
+
541
+ oRows.forEach(function(oRow) {
542
+ // Making non insertable property cells as read-only
543
+ fnUpdateTableRowsBasedOnNonInsertableProperties(oTable, oRow);
544
+ });
545
+ });
546
+ }
527
547
 
528
- function fnUpdateResponsiveTableRowsBasedOnNonInsertableProperties(oTable, oInActiveRow) {
548
+ function fnUpdateTableRowsBasedOnNonInsertableProperties(oTable, oInActiveRow) {
529
549
  // Support NonInsertableProperties to disable the field while creation
530
550
  var oSmartTable = oTable.getParent();
531
551
  var aColumns = oTable.getColumns();
@@ -541,7 +561,12 @@ sap.ui.define([
541
561
  }
542
562
  var aInactiveRowCells = oInActiveRow.getCells();
543
563
  for (var j = 0; j < aIndexOfNonInsertableProperties.length; j++) {
544
- aInactiveRowCells[aIndexOfNonInsertableProperties[j]].bindProperty("editable", {
564
+ var oCell = aInactiveRowCells[aIndexOfNonInsertableProperties[j]];
565
+ var oBinding = oCell.getBinding("editable");
566
+ if (oBinding && oBinding.getPath() === "BINDING_PATH_TRANSIENT_CONTEXT") {
567
+ return;
568
+ }
569
+ oCell.bindProperty("editable", {
545
570
  path: BINDING_PATH_TRANSIENT_CONTEXT,
546
571
  formatter: function (bIsTransient) {
547
572
  return !bIsTransient;
@@ -2,7 +2,6 @@ sap.ui.define(
2
2
  ["sap/ui/base/Object", "sap/base/util/extend", "sap/suite/ui/generic/template/genericUtilities/FeLogger", "sap/suite/ui/generic/template/genericUtilities/controlHelper"],
3
3
  function(BaseObject, extend, FeLogger, controlHelper) {
4
4
  "use strict";
5
- var oLogger = new FeLogger("ObjectPageExtensionAPI.extensionAPI").getLogger();
6
5
  /**
7
6
  * API to be used in extensions of ObjectPage. Breakout coding can access an instance of this class via
8
7
  * <code>this.extensionAPI</code>. Do not instantiate yourself.
@@ -14,7 +13,8 @@ sap.ui.define(
14
13
  function getMethods(oTemplateUtils, oController, oBase, oState) {
15
14
  return /** @lends sap.suite.ui.generic.template.ObjectPage.extensionAPI.ExtensionAPI.prototype */ {
16
15
  /**
17
- * Get the entries currently selected in one ui element (table, chart, or list)
16
+ * Generally, this method returns the currently selected contexts in one ui element (table, chart, or list).
17
+ * In case the context menu is opened, it returns the contexts applicable to the context menu.
18
18
  *
19
19
  * @param {string} sUiElementId the id identifying the ui element the selected context is requested for
20
20
  * @return {sap.ui.model.Context[]} contains one entry per entry selected
@@ -22,31 +22,13 @@ sap.ui.define(
22
22
  */
23
23
  getSelectedContexts: function(sUiElementId) {
24
24
  var oControl = oController.byId(sUiElementId);
25
- return oTemplateUtils.oServices.oPresentationControlHandlerFactory.getPresentationControlHandler(oTemplateUtils.oCommonUtils.getOwnerPresentationControl(oControl)).getSelectedContexts();
26
- },
27
-
28
- /**
29
- * Hides Section and/or SubSection's title for embedded components and custom section(s), if the Section and/or SubSection's title matches with the inner Control's title.
30
- * In case the control's resolved title is provided and is same as section's title, then the section's title is also automatically hidden.
31
- * It's meant to be invoked from the onSubSectionEnteredExtension ExtensionAPI.
32
- * @param {string} sSubSectionId the ID identifying the Sub-Section to which you want to hide the title
33
- * @param {string} [sTitle] Optional parameter which represents the resolved title of the inner conrol defined in the Resue Component or Custom Section/SubSection
34
- * @deprecated Since version 1.121.0 use API setAsTitleOwner instead.
35
- */
36
- hideDuplicateSectionOrSubSectionTitle: function(sSubSectionId, sTitle) {
37
- var oSubSection = oController.byId(sSubSectionId);
38
- if (!oSubSection) {
39
- oLogger.error("Control ID with " + sSubSectionId + " is not part of the viewport ");
40
- }
41
- var oSection = oSubSection.getParent();
42
- if (!sTitle || oSubSection.getTitle() === sTitle) {
43
- oSubSection.setShowTitle(false);
44
- oSection.addStyleClass("sapUiTableOnObjectPageAdjustmentsForSection");
45
- }
46
- if (!sTitle || oSection.getSubSections().length === 1 && oSection.getTitle() === sTitle) {
47
- oSection.setShowTitle(false);
48
- oSection.addStyleClass("sapUiTableOnObjectPageAdjustmentsForSection");
25
+ var oPresentationControl = oTemplateUtils.oCommonUtils.getOwnerPresentationControl(oControl);
26
+ // This focus info is added to state by sap.suite.ui.generic.template.lib.ContextMenuHandler when the context menu is opened
27
+ // If the state contains focus info, return the contexts applicable for context menu
28
+ if (oState.oFocusInfo && oState.oFocusInfo.smartControlId === oPresentationControl.getId()) {
29
+ return oState.oFocusInfo.applicableContexts;
49
30
  }
31
+ return oTemplateUtils.oServices.oPresentationControlHandlerFactory.getPresentationControlHandler(oPresentationControl).getSelectedContexts();
50
32
  },
51
33
 
52
34
  /**
@@ -6,7 +6,7 @@
6
6
  "type": "component",
7
7
  "i18n": "i18n/i18n.properties",
8
8
  "applicationVersion": {
9
- "version": "1.121.2"
9
+ "version": "1.122.0"
10
10
  },
11
11
  "title": "{{TITLE}}",
12
12
  "description": "{{DESCRIPTION}}",
@@ -139,6 +139,7 @@
139
139
  <table:AnalyticalTable id="{path: 'facet>', formatter: 'AH.getStableIdPartFromFacet'}::analyticalTable"
140
140
  visibleRowCountMode="Auto" enableColumnReordering="true"
141
141
  rowSelectionChange="._templateEventHandlers.onSelectionChange"
142
+ beforeOpenContextMenu="._templateEventHandlers.beforeOpenContextMenu($event, '{smartControlId>id}')"
142
143
  showColumnVisibilityMenu="false"
143
144
  enableColumnFreeze="true" enableCellFilter="true" rowActionCount="{= ${parts: [ {path: 'listEntitySet>'}, {path: 'parameter>/settings/subPages/'}, {path: 'parameter>/manifest'}, {path: 'facet>Target/AnnotationPath'},{path: 'parameter>/isDraftEnabled'}], formatter: 'AH.getRowActionCountForDetailPage'}}">
144
145
  <core:Fragment fragmentName="sap.suite.ui.generic.template.ObjectPage.view.fragments.SmartTableUiTableCommons" type="XML"/>
@@ -157,6 +158,7 @@
157
158
  visibleRowCountMode="Auto"
158
159
  expandFirstLevel="false"
159
160
  rowSelectionChange="._templateEventHandlers.onSelectionChange"
161
+ beforeOpenContextMenu="._templateEventHandlers.beforeOpenContextMenu($event, '{smartControlId>id}')"
160
162
  rowActionCount="{= ({parts: [{path: 'listEntitySet>'}, {path: 'parameter>/settings/subPages/'}], formatter: 'AH.hasSubObjectPage'} ? 1 : 0 )}">
161
163
  <core:Fragment fragmentName="sap.suite.ui.generic.template.ObjectPage.view.fragments.SmartTableUiTableCommons" type="XML"/>
162
164
  <table:columns>
@@ -172,6 +174,7 @@
172
174
  <table:Table id="{path: 'facet>', formatter: 'AH.getStableIdPartFromFacet'}::gridTable"
173
175
  enableColumnReordering="true" showColumnVisibilityMenu="false" visibleRowCountMode="Auto"
174
176
  rowSelectionChange="._templateEventHandlers.onSelectionChange"
177
+ beforeOpenContextMenu="._templateEventHandlers.beforeOpenContextMenu($event, '{smartControlId>id}')"
175
178
  enableColumnFreeze="true" enableCellFilter="true"
176
179
  rowActionCount="{= ${parts: [ {path: 'listEntitySet>'}, {path: 'parameter>/settings/subPages/'},{path: 'parameter>/manifest'}, {path: 'facet>Target/AnnotationPath'},{path: 'parameter>/isDraftEnabled'}], formatter: 'AH.getRowActionCountForDetailPage'}}">
177
180
  <core:Fragment fragmentName="sap.suite.ui.generic.template.ObjectPage.view.fragments.SmartTableUiTableCommons" type="XML"/>
@@ -190,6 +193,7 @@
190
193
  growing="true" growingThreshold="10"
191
194
  mode="{objectPageTableSettings>value/mode}"
192
195
  selectionChange="._templateEventHandlers.onSelectionChange"
196
+ beforeOpenContextMenu="._templateEventHandlers.beforeOpenContextMenu($event, '{smartControlId>id}')"
193
197
  delete="._templateEventHandlers.deleteEntry"
194
198
  itemPress="._templateEventHandlers.onListNavigate"
195
199
  updateFinished="._templateEventHandlers.checkUpdateFinished"
@@ -6,7 +6,7 @@
6
6
  "type": "component",
7
7
  "i18n": "i18n/i18n.properties",
8
8
  "applicationVersion": {
9
- "version": "1.121.2"
9
+ "version": "1.122.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.121.2"
9
+ "version": "1.122.0"
10
10
  },
11
11
  "title": "{{TITLE}}",
12
12
  "description": "{{DESCRIPTION}}",
@@ -2,7 +2,12 @@
2
2
 
3
3
  <core:Fragment fragmentName="sap.suite.ui.generic.template.fragments.TableColumns" type="XML" />
4
4
  <core:Fragment fragmentName="sap.suite.ui.generic.template.fragments.TableColumnListItem" type="XML" />
5
- <!-- <contextMenu>
5
+ <!--
6
+ <contextMenu>
6
7
  <core:Fragment fragmentName="sap.suite.ui.generic.template.fragments.SmartControlContextMenu" type="XML"/>
7
- </contextMenu> -->
8
+ </contextMenu>
9
+ <dependents>
10
+ <plugins.ContextMenuSetting scope="Selection"/>
11
+ </dependents>
12
+ -->
8
13
  </core:FragmentDefinition>
@@ -1,4 +1,4 @@
1
- <core:FragmentDefinition xmlns:core="sap.ui.core" xmlns:table="sap.ui.table"
1
+ <core:FragmentDefinition xmlns="sap.m" xmlns:core="sap.ui.core" xmlns:table="sap.ui.table"
2
2
  xmlns:template="http://schemas.sap.com/sapui5/extension/sap.ui.core.template/1"
3
3
  template:require="{AH: 'sap/suite/ui/generic/template/js/AnnotationHelper'}">
4
4
 
@@ -7,6 +7,7 @@
7
7
  enableNotification="true"
8
8
  selectionChange="._templateEventHandlers.onMultiSelectionChange"
9
9
  selectionMode="{tableSettings>mode}" />
10
+ <!-- <plugins.ContextMenuSetting scope="Selection"/> -->
10
11
  </table:dependents>
11
12
  <table:rowSettingsTemplate>
12
13
  <table:RowSettings
@@ -15,5 +16,5 @@
15
16
  </table:rowSettingsTemplate>
16
17
  <!-- <table:contextMenu>
17
18
  <core:Fragment fragmentName="sap.suite.ui.generic.template.fragments.SmartControlContextMenu" type="XML"/>
18
- </table:contextMenu> -->
19
+ </table:contextMenu> -->
19
20
  </core:FragmentDefinition>
@@ -1,10 +1,14 @@
1
- sap.ui.define(["sap/ui/dom/getFirstEditableInput", "sap/suite/ui/generic/template/genericUtilities/FeLogger"], function(getFirstEditableInput, FeLogger) {
1
+ sap.ui.define([
2
+ "sap/ui/dom/getFirstEditableInput",
3
+ "sap/suite/ui/generic/template/genericUtilities/FeLogger",
4
+ "sap/ui/core/Element"
5
+ ], function(getFirstEditableInput, FeLogger, Element) {
2
6
  "use strict";
3
7
 
4
8
  var oFeLogger = new FeLogger("genericUtilities.controlHelper");
5
9
  var oLogger = oFeLogger.getLogger();
6
10
 
7
- var byId = sap.ui.getCore().byId;
11
+ var byId = Element.getElementById;
8
12
 
9
13
  function isControlOfType(sPathToType, oControl){
10
14
  var FNClass = sap.ui.require(sPathToType);
@@ -14,7 +18,7 @@ sap.ui.define(["sap/ui/dom/getFirstEditableInput", "sap/suite/ui/generic/templat
14
18
  function getUI5ControlForDomElement(oDom){
15
19
  for (; oDom; oDom = oDom.parentNode) {
16
20
  if (oDom.hasAttribute && oDom.hasAttribute("data-sap-ui")) {
17
- return sap.ui.getCore().byId(oDom.id);
21
+ return byId(oDom.id);
18
22
  }
19
23
  }
20
24
  }
@@ -3,7 +3,7 @@ sap.ui.define([
3
3
  "sap/ui/core/format/DateFormat",
4
4
  "sap/base/security/encodeURL",
5
5
  "sap/m/DynamicDateUtil",
6
- "sap/ui/core/CalendarType"
6
+ "sap/base/i18n/date/CalendarType"
7
7
  ], function (FilterOperator, DateFormat, encodeURL, DynamicDateUtil, CalendarType) {
8
8
  "use strict";
9
9
 
@@ -0,0 +1,69 @@
1
+ sap.ui.define([
2
+ "sap/base/util/isEmptyObject",
3
+ "sap/suite/ui/generic/template/js/AnnotationHelper"
4
+ ], function (isEmptyObject, AnnotationHelper) {
5
+ "use strict";
6
+
7
+ var oHiddenColumnInfo = {
8
+ staticHiddenColumns: [],
9
+ columnKeyToCellHiddenPath: undefined
10
+ };
11
+
12
+ /*
13
+ * This method is called in the initialization and dataReceived phase of the specified SmartTable.
14
+ * It handles everything which can be done regarding hiding columns at this point in time.
15
+ * This is:
16
+ * - Check for columns which are hidden statically(Bool) or dynamically(Path)
17
+ * - Immediately hide the columns which are statically hidden at SmartTable init
18
+ * - Dynamically hide the cells based the Path property at SmartTable dataReceived event
19
+ */
20
+ function fnGetHiddenColumnInfo(oSmartTable) {
21
+ // Initialization which needs the control to be created
22
+ var oMetaModel = oSmartTable.getModel().getMetaModel(); // prepare metadata
23
+ var oEntitySet = oMetaModel.getODataEntitySet(oSmartTable.getEntitySet());
24
+ var oEntityType = oMetaModel.getODataEntityType(oEntitySet.entityType);
25
+ var aCustomData = oSmartTable.getCustomData();
26
+ var oCustomDataForLineItemQualifier = aCustomData.find(function(oCustomData){
27
+ return oCustomData.getKey() === "lineItemQualifier";
28
+ });
29
+ var sLineItemSuffix = (oCustomDataForLineItemQualifier && oCustomDataForLineItemQualifier.getValue()) ? ("#" + oCustomDataForLineItemQualifier.getValue()) : "";
30
+ var aDataFields = oEntityType["com.sap.vocabularies.UI.v1.LineItem" + sLineItemSuffix] || [];
31
+
32
+ var aStaticHiddenColumns = []; // list of keys of columns that are always hidden
33
+ var mColumnKeyToDynamicHiddenPath = Object.create(null); // map of column keys to pathes that determine whether the column is shown
34
+
35
+ aDataFields.forEach(fnAnalyzeColumnHideInfoForDataField.bind(null, aStaticHiddenColumns, mColumnKeyToDynamicHiddenPath, oMetaModel, oEntityType));
36
+ if (!isEmptyObject(mColumnKeyToDynamicHiddenPath) || aStaticHiddenColumns.length) { // if there is at least one column with hide info we store this analysis in the info object
37
+ oHiddenColumnInfo.staticHiddenColumns = aStaticHiddenColumns;
38
+ oHiddenColumnInfo.columnKeyToCellHiddenPath = mColumnKeyToDynamicHiddenPath;
39
+ }
40
+ return oHiddenColumnInfo;
41
+ }
42
+
43
+ /*
44
+ * Add the information derived from the UI:Hidden annotation for one line item to either
45
+ * aStaticHiddenColumns or mColumnKeyToDynamicHiddenPath, or none.
46
+ */
47
+ function fnAnalyzeColumnHideInfoForDataField(aStaticHiddenColumns, mColumnKeyToDynamicHiddenPath, oMetaModel, oEntityType, oDataField) {
48
+ // regular expression for ?
49
+ var rPath = /[A-Za-z].*[A-Za-z]/;
50
+
51
+ var sColumnKey = AnnotationHelper.createP13NColumnKey(oDataField);
52
+ var vExpression = AnnotationHelper.getBindingForHiddenPath(oDataField);
53
+ if (vExpression === "{= !${} }") {
54
+ aStaticHiddenColumns.push(sColumnKey);
55
+ }
56
+ if (typeof (vExpression) === "string") {
57
+ var sPath = vExpression.match(rPath) && vExpression.match(rPath)[0];
58
+ if (sPath && sPath.indexOf("/") === -1) {
59
+ mColumnKeyToDynamicHiddenPath[sColumnKey] = sPath;
60
+ }
61
+ } else if (!vExpression) {
62
+ aStaticHiddenColumns.push(sColumnKey);
63
+ }
64
+ }
65
+
66
+ return {
67
+ getHiddenColumnInfo: fnGetHiddenColumnInfo
68
+ };
69
+ });
@@ -15,7 +15,7 @@ sap.ui.define([
15
15
  var fnGetColorFromAnnotations = function (sCriticalityPath) {
16
16
  if (sCriticalityPath) {
17
17
  var sColorExp = sCriticalityPath.indexOf('/') > -1 ? sCriticalityPath.replaceAll('/', '.') : sCriticalityPath;
18
- return "${if(" + sColorExp + " == '0', 'Default', if(" + sColorExp + " == '1' , 'Attention', if(" + sColorExp + " == '2' , 'Warning', 'Good')))}";
18
+ return "${if(int(" + sColorExp + ") == 0, 'Default', if(int(" + sColorExp + ") == 1 , 'Attention', if(int(" + sColorExp + ") == 2 , 'Warning', 'Good')))}";
19
19
  }
20
20
  return 'Default';
21
21
  };
@@ -137,7 +137,7 @@ sap.ui.define([
137
137
  var aParts = oBindingInfoOfText.parts;
138
138
  if (aParts && aParts.length > 0) {
139
139
  aParts.forEach(function (part) {
140
- if (part.path !== oDataPointData.path) {
140
+ if (part.path !== oDataPointData.path && part.path !== "__$$SmartFieldNotExistingBindingPath") {
141
141
  oDataPointData.paths[part.path] = part.path;
142
142
  }
143
143
  });
@@ -250,7 +250,7 @@ sap.ui.define([
250
250
  if (aParts && aParts.length > 0) {
251
251
  for (var j = 0; j < aParts.length; j++) {
252
252
  var part = aParts[j];
253
- if (part.path !== oFieldData.path) {
253
+ if (part.path !== oFieldData.path && part.path !== "__$$SmartFieldNotExistingBindingPath") {
254
254
  oFieldData.paths[part.path] = part.path;
255
255
  }
256
256
  }
@@ -280,7 +280,7 @@ sap.ui.define([
280
280
  return oPath !== oField.path && oPath.indexOf("##@@") === -1;
281
281
  });
282
282
  }
283
- var sValue = oField.edmType === "Edm.Decimal" ? "${formatNumber(" + oField.path + ", 2)}" : "${" + oField.path + "}";
283
+ var sValue = oField.edmType === "Edm.Decimal" ? "${formatNumber(float(" + oField.path + "), 2)}" : "${" + oField.path + "}";
284
284
  var sId = "";
285
285
  var sDescription = "";
286
286
  var sPath;
@@ -173,7 +173,7 @@ sap.ui.define([
173
173
  // Parameter fnFallback will be the fallback function (see above) with oBeforeData already set accordingly.
174
174
  // Currently this infrastructure is used by one topic (namely 'focus', see class FocusHelper).
175
175
  // The implementation of this infrastructure is done in class BusyHelper.
176
- bEnablePlaceholder: bShellConfigPlaceholderEnabled, //holds the value of placeholder enablement shell and URL
176
+ bEnablePlaceholder: bShellConfigPlaceholderEnabled, //holds the value of placeholder enablement shell and URL (URL enablement will be added in constructor code of NavigationController).
177
177
  bStateHandlingSuspended: false, // holds the RTA or Key user mode
178
178
  nDelayedDraftTimerInSeconds: 20 // holds the timer interval value for draft data save and by default, the value is 20 seconds
179
179
  };
@@ -915,7 +915,7 @@ sap.ui.define([
915
915
  * @extends sap.ui.core.UIComponent
916
916
  * @abstract
917
917
  * @author SAP SE
918
- * @version 1.121.2
918
+ * @version 1.122.0
919
919
  * @name sap.suite.ui.generic.template.lib.AppComponent
920
920
  */
921
921
  return UIComponent.extend("sap.suite.ui.generic.template.lib.AppComponent", {
@@ -809,7 +809,18 @@ sap.ui.define(["sap/ui/base/Object",
809
809
  var mTargetEntities = oComponentUtils.getParameterModelForTemplating().oData.templateSpecific.targetEntities[oEntitySet.entityType].mTargetEntities;
810
810
  oControl = getClickedControl();
811
811
  sControlBindingContextPath = oControl.getBindingContext().getPath();
812
- sSourceClickedField = oControl && oControl.mProperties.fieldName;
812
+ if (oControl) {
813
+ if (oControl.isA("sap.ui.comp.navpopover.SmartLink")) {
814
+ sSourceClickedField = oControl && oControl.mProperties.fieldName;
815
+ } else if (oControl.isA("sap.m.ObjectIdentifier")) {
816
+ var oTextBinding = oControl.getBinding("text");
817
+ if (oTextBinding && oTextBinding.oType) {
818
+ sSourceClickedField = oTextBinding.sPath;
819
+ } else {
820
+ sSourceClickedField = oControl.getBinding("title").sPath;
821
+ }
822
+ }
823
+ }
813
824
 
814
825
  //SemanticObjectController may also decide to render some as links even as we do not, using forceLinkRendering property
815
826
  if (mTargetEntities[sSourceClickedField]) {
@@ -1321,6 +1332,36 @@ sap.ui.define(["sap/ui/base/Object",
1321
1332
  }
1322
1333
  }
1323
1334
 
1335
+ /**
1336
+ * This method is called in the onDataReceived event of the specified SmartTable.
1337
+ * It handles everything which can be done regarding hiding of cells at this point in time.
1338
+ */
1339
+ function fnHideTableCells(oSmartTable, oHiddenColumnInfo) {
1340
+ for (var sColumnKey in oHiddenColumnInfo.columnKeyToCellHiddenPath) {
1341
+ var sPath = oHiddenColumnInfo.columnKeyToCellHiddenPath[sColumnKey];
1342
+ fnHandleTableCellVisibility(oSmartTable, sColumnKey, sPath);
1343
+ }
1344
+ }
1345
+
1346
+ /**
1347
+ * This method is called for each Row of Table,to control the visibility of the Cell based on the Hidden property in LineItem.
1348
+ */
1349
+ function fnHandleTableCellVisibility(oSmartTable, sColumnKey, sPath) {
1350
+ var oSmartTableHandler = oServices.oPresentationControlHandlerFactory.getPresentationControlHandler(oSmartTable);
1351
+ var oTable = oSmartTable.getTable();
1352
+ var aItems = oTable.getRows ? oTable.getRows() : oTable.getItems();
1353
+ aItems.forEach(function(oItem) {
1354
+ var oColumn = oSmartTableHandler.getColumnByKey(sColumnKey);
1355
+ var oCell = oColumn && oItem.getCells()[oTable.indexOfColumn(oColumn)];
1356
+ oCell && oCell.bindProperty("visible", {
1357
+ path: sPath,
1358
+ formatter: function (bIsHidden) {
1359
+ return !bIsHidden;
1360
+ }
1361
+ });
1362
+ });
1363
+ }
1364
+
1324
1365
  // callback for the onBeforeRebindTable event of a smart table
1325
1366
  // oEvent is the original event
1326
1367
  // oCallbacks is an optional object which contains additional callbacks to be called.
@@ -1606,7 +1647,7 @@ sap.ui.define(["sap/ui/base/Object",
1606
1647
  var sEntitySet = oTable.getEntitySet();
1607
1648
  var oEditPromise = CRUDHelper.directEdit(oServices.oTransactionController, sEntitySet, oBindingContext.sPath, oBindingContext.getModel(), oServices.oApplication, oCommonUtils, oServices.oViewDependencyHelper, oViewProxy, bOpenInEditMode);
1608
1649
  oEditPromise.then(function(oResult){
1609
- oCommonUtils.navigateFromListItem(oResult.context, bReplace, bOpenInEditMode);
1650
+ oCommonUtils.navigateFromListItem(oResult.context, bReplace, true);
1610
1651
  }, function(oError){
1611
1652
  if (oError.lockedByUser) {
1612
1653
  var sLockText = oCommonUtils.getText("ST_GENERIC_DRAFT_LOCKED_BY_USER", [" ", oError.lockedByUser]);
@@ -1662,13 +1703,13 @@ sap.ui.define(["sap/ui/base/Object",
1662
1703
  var iViewLevel = oComponentUtils.getViewLevel();
1663
1704
  var aCurrentKeys = oServices.oApplication.getCurrentKeys(iViewLevel + 1);
1664
1705
  var bReplace = aCurrentKeys.length > iViewLevel + 1; // if the list from which the navigation is started is not the most right one, perform the navigation as a replace navigation
1665
- // This will care for:
1666
- // - wait until side-effects have been executed
1667
- // - app is not busy (otherwise do nothing)
1668
- // - send a data loss popup in case needed (might also result in doing nothing)
1669
- if (oEventSource.data("CrossNavigation") || (!oEventSource.data("CrossNavigation") && !oComponentUtils.isDraftEnabled())){
1706
+ if (oEventSource.data("CrossNavigation") || !oComponentUtils.isDraftEnabled()){
1707
+ // oCommonUtils.fnProcessDataLossOrDraftDiscardConfirmation will care for:
1708
+ // - wait until side-effects have been executed
1709
+ // - app is not busy (otherwise do nothing)
1710
+ // - send a data loss popup in case needed (might also result in doing nothing)
1670
1711
  oCommonUtils.fnProcessDataLossOrDraftDiscardConfirmation(onListNavigateImpl.bind(null, oEventSource, oEventParameters, oState, oBindingContext, bReplace), Function.prototype, "LeaveApp");
1671
- } else {
1712
+ } else if (!oServices.oApplication.getBusyHelper().isBusy()) { // if the app is already busy with something else stop navigation here
1672
1713
  onListNavigateImpl(oEventSource, oEventParameters, oState, oBindingContext, bReplace, oViewProxy);
1673
1714
  }
1674
1715
  }
@@ -2641,7 +2682,8 @@ sap.ui.define(["sap/ui/base/Object",
2641
2682
  onBeforeExport: fnOnBeforeExport,
2642
2683
  handleSideEffectForField: fnHandleSideEffectForField,
2643
2684
  onSmartFieldModeToggled: onSmartFieldModeToggled,
2644
- onRenderTeamsContactCollabOptions: fnRenderTeamsContactCollabOptions
2685
+ onRenderTeamsContactCollabOptions: fnRenderTeamsContactCollabOptions,
2686
+ hideTableCells: fnHideTableCells
2645
2687
  };
2646
2688
  }
2647
2689
 
@@ -527,7 +527,39 @@ sap.ui.define(["sap/ui/base/Object",
527
527
  function fnUpdateBreakoutEnablementForAction(mBreakOutActionEnabled, aContexts, oModel, sSelectedTabKey, oControl, oBreakoutAction){
528
528
  var sControlId = oBreakoutAction.id + ((sSelectedTabKey && !oBreakoutAction.determining) ? "-" + sSelectedTabKey : "");
529
529
  var bIsAnalyticalListPage = oControl && oControl.getId().indexOf("AnalyticalListPage") > -1;
530
- var bEnabled = !bIsAnalyticalListPage || !!mBreakOutActionEnabled[sControlId].enabled;
530
+ // Finding the default value of "enabled"
531
+ // For LR/OP, the default value is true.
532
+ // For ALP, the default value is taken from "mBreakoutActionEnabled" map.
533
+ //
534
+ // Reason for the special handling in ALP:
535
+ // This method is invoked twice in ALP. Once for smart table and once again for smart chart.
536
+ // In the first iteration (smart table actions), the calculated enablement value is stored on "mBreakoutActionEnabled".
537
+ // In the second iteration (smart chart actions), the enablement should be calculated only for the chart actions (oBreakoutAction.filter = "chart").
538
+ // As the previously calculated value for the table actions should be retained, the value stored on "mBreakoutActionEnabled" is used as the default value.
539
+ var bDefaultValue = !bIsAnalyticalListPage || !!mBreakOutActionEnabled[sControlId].enabled;
540
+ var bEnabled = fnIsBreakoutActionEnabled(oBreakoutAction, aContexts, oModel, oControl, bDefaultValue, bIsAnalyticalListPage);
541
+
542
+ mBreakOutActionEnabled[sControlId] = {
543
+ enabled: bEnabled
544
+ };
545
+ }
546
+
547
+ /**
548
+ * This method analyzes the applicable contexts and tells whether the breakout action should be enabled.
549
+ *
550
+ * If the context based analysis is not required (i.e the action doesn't require selection),
551
+ * it will simply return the default value <code>bDefaultValue</code>.
552
+ *
553
+ * @param {object} oBreakoutAction Manifest information about the breakout action
554
+ * @param {Array<sap.ui.model.Context>} aContexts Applicable contexts
555
+ * @param {sap.ui.model.Model} oModel Model of the smart control
556
+ * @param {sap.ui.core.Control} oControl The smart control
557
+ * @param {boolean} bDefaultValue The default value of "enabled".
558
+ * @param {boolean} bIsAnalyticalListPage Boolean flag that tells whether the current breakout action belong to the Analytical List Page
559
+ * @returns {boolean}
560
+ */
561
+ function fnIsBreakoutActionEnabled(oBreakoutAction, aContexts, oModel, oControl, bDefaultValue, bIsAnalyticalListPage) {
562
+ var bEnabled = bDefaultValue;
531
563
  var bFilterIsChart = oBreakoutAction.filter === "chart";
532
564
  if (oBreakoutAction.requiresSelection) {
533
565
  if (aContexts.length > 0) { // context selected
@@ -544,6 +576,8 @@ sap.ui.define(["sap/ui/base/Object",
544
576
  }
545
577
  } else if (controlHelper.isSmartChart(oControl)) {
546
578
  //table button chart ondata received
579
+ // For LR/OP, directly evaluate the drill stack filters and enable the action accordingly.
580
+ // For ALP, evaluate the drill stack filters only when oBreakoutAction.filter is "chart" and skip the evaluation for table based actions.
547
581
  if (!bIsAnalyticalListPage || bFilterIsChart) {
548
582
  // If enabled Selection is made on the chart but drilldown is performed later.
549
583
  bEnabled = oControl.getDrillStackFilters().length > 0;
@@ -553,11 +587,10 @@ sap.ui.define(["sap/ui/base/Object",
553
587
  bEnabled = bEnabled && bFilterIsChart; //table ondatareceived when chart selected
554
588
  }
555
589
  }
556
- mBreakOutActionEnabled[sControlId] = {
557
- enabled: bEnabled
558
- };
590
+ return bEnabled;
591
+
559
592
  }
560
-
593
+
561
594
  function fnUpdateBreakoutEnablement(mBreakOutActionEnabled, mBreakoutActions, aContexts, oModel, sSelectedTabKey, oControl) {
562
595
  for (var sActionId in mBreakoutActions) {
563
596
  var oBreakoutAction = mBreakoutActions[sActionId];
@@ -666,9 +699,6 @@ sap.ui.define(["sap/ui/base/Object",
666
699
  * Triggers navigation from a given list item.
667
700
  *
668
701
  * @param {sap.ui.model.context} selected context for navigation
669
- * @param {object} oTable The table from which navigation was triggered
670
- * control in the table
671
- * @public
672
702
  */
673
703
  function fnNavigateFromListItem(oContext, bReplace, bOpenInEditMode) {
674
704
  var iDisplayMode;
@@ -680,6 +710,7 @@ sap.ui.define(["sap/ui/base/Object",
680
710
  }
681
711
  if (bOpenInEditMode) {
682
712
  oServices.oApplication.setObjectInEditMode(true);
713
+ iDisplayMode = 6;
683
714
  }
684
715
  oComponentUtils.navigateAccordingToContext(oContext, iDisplayMode, bReplace);
685
716
  }
@@ -1762,6 +1793,7 @@ sap.ui.define(["sap/ui/base/Object",
1762
1793
  getToolbarActionEnablementInfo: getToolbarActionEnablementInfo,
1763
1794
  fillEnabledMapForBreakoutActions: fnFillEnabledMapForBreakoutActions,
1764
1795
  getBreakoutActions: fnGetBreakoutActions,
1796
+ isBreakoutActionEnabled: fnIsBreakoutActionEnabled,
1765
1797
  getSelectionPoints: getSelectionPoints,
1766
1798
  getDeleteRestrictions: fnGetDeleteRestrictions,
1767
1799
  getSmartTableDefaultVariant: fnGetSmartTableDefaultVariant,
@@ -8,9 +8,8 @@ sap.ui.define(["sap/ui/base/Object",
8
8
  "sap/base/util/extend",
9
9
  "sap/base/util/isEmptyObject",
10
10
  "sap/suite/ui/generic/template/genericUtilities/FeError",
11
- "sap/base/util/UriParameters",
12
11
  "sap/suite/ui/generic/template/lib/CommandComponentUtils"
13
- ], function(BaseObject, ManagedObjectModel, controlHelper, FeLogger, oDataModelHelper, CRUDActionHandler, StatePreserver, extend, isEmptyObject, FeError, UriParameters,
12
+ ], function(BaseObject, ManagedObjectModel, controlHelper, FeLogger, oDataModelHelper, CRUDActionHandler, StatePreserver, extend, isEmptyObject, FeError,
14
13
  CommandComponentUtils) {
15
14
  "use strict";
16
15
  var sClassName = "lib.ComponentUtils";
@@ -1039,7 +1038,7 @@ sap.ui.define(["sap/ui/base/Object",
1039
1038
 
1040
1039
  function isRenderingWaitingForViewportEntered () {
1041
1040
  var oManifestSettings = getSettings();
1042
- var useViewLazyLoadingFromUri = UriParameters.fromQuery(window.location.search).get("sap-fe-xx-lazyloadingtest");
1041
+ var useViewLazyLoadingFromUri = new URLSearchParams(window.location.search).get("sap-fe-xx-lazyloadingtest");
1043
1042
  return useViewLazyLoadingFromUri != null ? useViewLazyLoadingFromUri === "true" : oManifestSettings.renderingBehavior && oManifestSettings.renderingBehavior.waitForViewportEnter;
1044
1043
  }
1045
1044