@openui5/sap.ui.mdc 1.133.2 → 1.133.3

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 (96) hide show
  1. package/package.json +4 -4
  2. package/src/sap/ui/mdc/.library +1 -1
  3. package/src/sap/ui/mdc/ActionToolbar.js +1 -1
  4. package/src/sap/ui/mdc/Chart.js +1 -1
  5. package/src/sap/ui/mdc/Control.js +1 -1
  6. package/src/sap/ui/mdc/DefaultTypeMap.js +1 -1
  7. package/src/sap/ui/mdc/Element.js +1 -1
  8. package/src/sap/ui/mdc/Field.js +2 -2
  9. package/src/sap/ui/mdc/FilterBar.js +1 -1
  10. package/src/sap/ui/mdc/FilterField.js +2 -2
  11. package/src/sap/ui/mdc/Link.js +1 -1
  12. package/src/sap/ui/mdc/MultiValueField.js +1 -1
  13. package/src/sap/ui/mdc/ValueHelp.js +1 -1
  14. package/src/sap/ui/mdc/actiontoolbar/ActionToolbarAction.js +1 -1
  15. package/src/sap/ui/mdc/chart/ChartImplementationContainer.js +1 -1
  16. package/src/sap/ui/mdc/chart/ChartSelectionDetails.js +1 -1
  17. package/src/sap/ui/mdc/chart/PropertyHelper.js +1 -1
  18. package/src/sap/ui/mdc/chart/ToolbarControlFactory.js +1 -1
  19. package/src/sap/ui/mdc/condition/Condition.js +1 -1
  20. package/src/sap/ui/mdc/condition/ConditionConverter.js +1 -1
  21. package/src/sap/ui/mdc/condition/ConditionModel.js +1 -1
  22. package/src/sap/ui/mdc/condition/FilterConverter.js +90 -56
  23. package/src/sap/ui/mdc/condition/FilterOperatorUtil.js +40 -3
  24. package/src/sap/ui/mdc/condition/Operator.js +1 -1
  25. package/src/sap/ui/mdc/condition/OperatorDynamicDateOption.js +1 -1
  26. package/src/sap/ui/mdc/condition/RangeOperator.js +1 -1
  27. package/src/sap/ui/mdc/field/ConditionType.js +1 -1
  28. package/src/sap/ui/mdc/field/ConditionTypeMixin.js +1 -1
  29. package/src/sap/ui/mdc/field/ConditionsType.js +1 -1
  30. package/src/sap/ui/mdc/field/CustomFieldInfo.js +1 -1
  31. package/src/sap/ui/mdc/field/DynamicDateRangeConditionsType.js +1 -1
  32. package/src/sap/ui/mdc/field/FieldBase.js +1 -1
  33. package/src/sap/ui/mdc/field/FieldInfoBase.js +1 -1
  34. package/src/sap/ui/mdc/field/FieldInput.js +1 -1
  35. package/src/sap/ui/mdc/field/FieldInputRenderUtil.js +1 -1
  36. package/src/sap/ui/mdc/field/FieldMultiInput.js +1 -1
  37. package/src/sap/ui/mdc/field/ListFieldHelpItem.js +1 -1
  38. package/src/sap/ui/mdc/field/MultiValueFieldItem.js +1 -1
  39. package/src/sap/ui/mdc/field/TokenDisplay.js +1 -1
  40. package/src/sap/ui/mdc/field/TokenizerDisplay.js +1 -1
  41. package/src/sap/ui/mdc/filterbar/FilterBarBase.js +1 -1
  42. package/src/sap/ui/mdc/filterbar/PropertyHelper.js +1 -1
  43. package/src/sap/ui/mdc/filterbar/p13n/AdaptationFilterBar.js +1 -1
  44. package/src/sap/ui/mdc/filterbar/vh/FilterBar.js +1 -1
  45. package/src/sap/ui/mdc/flexibility/Chart.flexibility.js +1 -1
  46. package/src/sap/ui/mdc/flexibility/FilterBar.flexibility.js +1 -1
  47. package/src/sap/ui/mdc/flexibility/FilterItemFlex.js +1 -1
  48. package/src/sap/ui/mdc/flexibility/actiontoolbar/CombineAction.js +1 -1
  49. package/src/sap/ui/mdc/flexibility/actiontoolbar/SplitAction.js +1 -1
  50. package/src/sap/ui/mdc/library.js +2 -2
  51. package/src/sap/ui/mdc/link/Factory.js +1 -1
  52. package/src/sap/ui/mdc/link/LinkItem.js +1 -1
  53. package/src/sap/ui/mdc/link/Panel.js +1 -1
  54. package/src/sap/ui/mdc/link/PanelItem.js +1 -1
  55. package/src/sap/ui/mdc/link/SemanticObjectMapping.js +1 -1
  56. package/src/sap/ui/mdc/link/SemanticObjectMappingItem.js +1 -1
  57. package/src/sap/ui/mdc/link/SemanticObjectUnavailableAction.js +1 -1
  58. package/src/sap/ui/mdc/mixin/AdaptationMixin.js +1 -1
  59. package/src/sap/ui/mdc/mixin/DelegateMixin.js +1 -1
  60. package/src/sap/ui/mdc/mixin/FilterIntegrationMixin.js +1 -1
  61. package/src/sap/ui/mdc/mixin/PromiseMixin.js +1 -1
  62. package/src/sap/ui/mdc/mixin/PropertyHelperMixin.js +1 -1
  63. package/src/sap/ui/mdc/odata/TypeMap.js +1 -1
  64. package/src/sap/ui/mdc/odata/v4/TypeMap.js +1 -1
  65. package/src/sap/ui/mdc/p13n/PropertyHelper.js +1 -1
  66. package/src/sap/ui/mdc/table/ColumnSettings.js +1 -1
  67. package/src/sap/ui/mdc/table/CreationRow.js +1 -1
  68. package/src/sap/ui/mdc/table/DragDropConfig.js +1 -1
  69. package/src/sap/ui/mdc/table/PropertyHelper.js +1 -1
  70. package/src/sap/ui/mdc/table/ResponsiveColumnSettings.js +1 -1
  71. package/src/sap/ui/mdc/table/RowActionItem.js +1 -1
  72. package/src/sap/ui/mdc/table/RowSettings.js +1 -1
  73. package/src/sap/ui/mdc/table/V4AnalyticsPropertyHelper.js +1 -1
  74. package/src/sap/ui/mdc/table/utils/Personalization.js +1 -1
  75. package/src/sap/ui/mdc/ushell/SemanticObjectMapping.js +1 -1
  76. package/src/sap/ui/mdc/ushell/SemanticObjectMappingItem.js +1 -1
  77. package/src/sap/ui/mdc/ushell/SemanticObjectUnavailableAction.js +1 -1
  78. package/src/sap/ui/mdc/util/InfoBar.js +1 -1
  79. package/src/sap/ui/mdc/util/PromiseCache.js +1 -1
  80. package/src/sap/ui/mdc/util/PropertyHelper.js +1 -1
  81. package/src/sap/ui/mdc/util/PropertyHelperUtil.js +1 -1
  82. package/src/sap/ui/mdc/valuehelp/Dialog.js +1 -1
  83. package/src/sap/ui/mdc/valuehelp/FilterBar.js +1 -1
  84. package/src/sap/ui/mdc/valuehelp/Popover.js +1 -1
  85. package/src/sap/ui/mdc/valuehelp/base/Container.js +1 -1
  86. package/src/sap/ui/mdc/valuehelp/base/Content.js +1 -1
  87. package/src/sap/ui/mdc/valuehelp/base/DefineConditionPanel.js +1 -1
  88. package/src/sap/ui/mdc/valuehelp/base/DialogTab.js +1 -1
  89. package/src/sap/ui/mdc/valuehelp/base/FilterableListContent.js +1 -1
  90. package/src/sap/ui/mdc/valuehelp/base/ListContent.js +1 -1
  91. package/src/sap/ui/mdc/valuehelp/content/Bool.js +1 -1
  92. package/src/sap/ui/mdc/valuehelp/content/Conditions.js +1 -1
  93. package/src/sap/ui/mdc/valuehelp/content/FixedList.js +1 -1
  94. package/src/sap/ui/mdc/valuehelp/content/FixedListItem.js +1 -1
  95. package/src/sap/ui/mdc/valuehelp/content/MDCTable.js +1 -1
  96. package/src/sap/ui/mdc/valuehelp/content/MTable.js +1 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openui5/sap.ui.mdc",
3
- "version": "1.133.2",
3
+ "version": "1.133.3",
4
4
  "description": "OpenUI5 UI Library sap.ui.mdc",
5
5
  "author": "SAP SE (https://www.sap.com)",
6
6
  "license": "Apache-2.0",
@@ -14,8 +14,8 @@
14
14
  "url": "https://github.com/SAP/openui5.git"
15
15
  },
16
16
  "dependencies": {
17
- "@openui5/sap.m": "1.133.2",
18
- "@openui5/sap.ui.core": "1.133.2",
19
- "@openui5/sap.ui.layout": "1.133.2"
17
+ "@openui5/sap.m": "1.133.3",
18
+ "@openui5/sap.ui.core": "1.133.3",
19
+ "@openui5/sap.ui.layout": "1.133.3"
20
20
  }
21
21
  }
@@ -6,7 +6,7 @@
6
6
  <copyright>OpenUI5
7
7
  * (c) Copyright 2009-2025 SAP SE or an SAP affiliate company.
8
8
  * Licensed under the Apache License, Version 2.0 - see LICENSE.txt.</copyright>
9
- <version>1.133.2</version>
9
+ <version>1.133.3</version>
10
10
 
11
11
  <documentation>UI5 library: sap.ui.mdc</documentation>
12
12
 
@@ -33,7 +33,7 @@ sap.ui.define([
33
33
  * The content aggregation of the control must not be used.
34
34
  * @extends sap.m.OverflowToolbar
35
35
  * @author SAP SE
36
- * @version 1.133.2
36
+ * @version 1.133.3
37
37
  * @constructor
38
38
  * @since 1.58
39
39
  * @private
@@ -79,7 +79,7 @@ sap.ui.define([
79
79
  * @extends sap.ui.mdc.Control
80
80
  * @borrows sap.ui.mdc.mixin.FilterIntegrationMixin.rebind as #rebind
81
81
  * @author SAP SE
82
- * @version 1.133.2
82
+ * @version 1.133.3
83
83
  * @constructor
84
84
  *
85
85
  * @public
@@ -23,7 +23,7 @@ sap.ui.define([
23
23
  * @extends sap.ui.core.Control
24
24
  * @abstract
25
25
  * @author SAP SE
26
- * @version 1.133.2
26
+ * @version 1.133.3
27
27
  * @alias sap.ui.mdc.Control
28
28
  *
29
29
  * @borrows sap.ui.mdc.mixin.DelegateMixin.awaitControlDelegate as #awaitControlDelegate
@@ -29,7 +29,7 @@ sap.ui.define([
29
29
  * </ul>
30
30
  *
31
31
  * @author SAP SE
32
- * @version 1.133.2
32
+ * @version 1.133.3
33
33
  * @public
34
34
  * @since 1.114.0
35
35
  * @namespace
@@ -23,7 +23,7 @@ sap.ui.define([
23
23
  * @extends sap.ui.core.Element
24
24
  * @abstract
25
25
  * @author SAP SE
26
- * @version 1.133.2
26
+ * @version 1.133.3
27
27
  * @alias sap.ui.mdc.Element
28
28
  *
29
29
  * @borrows sap.ui.mdc.mixin.DelegateMixin.awaitControlDelegate as #awaitControlDelegate
@@ -54,13 +54,13 @@ sap.ui.define([
54
54
  * @implements sap.ui.core.IFormContent, sap.ui.core.ISemanticFormContent, sap.m.IOverflowToolbarContent
55
55
  *
56
56
  * @author SAP SE
57
- * @version 1.133.2
57
+ * @version 1.133.3
58
58
  *
59
59
  * @constructor
60
60
  * @alias sap.ui.mdc.Field
61
61
  * @see {@link topic:1dd2aa91115d43409452a271d11be95b sap.ui.mdc}
62
62
  * @see {@link topic:5260b9ca249f465ab33769b9edb442aa Field Building Block (OData V4)}
63
- * @version 1.133.2
63
+ * @version 1.133.3
64
64
  * @since 1.54.0
65
65
  * @public
66
66
  */
@@ -42,7 +42,7 @@ sap.ui.define([
42
42
  * The metadata information is provided via the {@link module:sap/ui/mdc/FilterBarDelegate FilterBarDelegate} implementation. This implementation has to be provided by the application.
43
43
  * @extends sap.ui.mdc.filterbar.FilterBarBase
44
44
  * @author SAP SE
45
- * @version 1.133.2
45
+ * @version 1.133.3
46
46
  * @constructor
47
47
  * @public
48
48
  * @since 1.61.0
@@ -53,13 +53,13 @@ sap.ui.define([
53
53
  * @implements sap.ui.core.IFormContent, sap.ui.core.ISemanticFormContent, sap.m.IOverflowToolbarContent
54
54
  *
55
55
  * @author SAP SE
56
- * @version 1.133.2
56
+ * @version 1.133.3
57
57
  *
58
58
  * @constructor
59
59
  * @alias sap.ui.mdc.FilterField
60
60
  * @see {@link topic:1dd2aa91115d43409452a271d11be95b sap.ui.mdc}
61
61
  * @see {@link topic:2df783760a8e4540ad19ce5ec3ed91c8 FilterField Building Block (OData V4)}
62
- * @version 1.133.2
62
+ * @version 1.133.3
63
63
  * @since 1.48.0
64
64
  * @public
65
65
  */
@@ -71,7 +71,7 @@ sap.ui.define([
71
71
  * @extends sap.ui.mdc.field.FieldInfoBase
72
72
  *
73
73
  * @author SAP SE
74
- * @version 1.133.2
74
+ * @version 1.133.3
75
75
  *
76
76
  * @constructor
77
77
  * @alias sap.ui.mdc.Link
@@ -44,7 +44,7 @@ sap.ui.define([
44
44
  * @constructor
45
45
  * @alias sap.ui.mdc.MultiValueField
46
46
  * @author SAP SE
47
- * @version 1.133.2
47
+ * @version 1.133.3
48
48
  * @since 1.93.0
49
49
  *
50
50
  * @public
@@ -67,7 +67,7 @@ sap.ui.define([
67
67
  * and {@link sap.ui.mdc.FilterField FilterField} controls using the <code>valueHelp</code> association. One <code>ValueHelp</code> element instance can be
68
68
  * assigned to multiple fields (like in different table rows). It should be placed in the control tree on the container holding the fields.
69
69
  * @extends sap.ui.mdc.Element
70
- * @version 1.133.2
70
+ * @version 1.133.3
71
71
  * @constructor
72
72
  * @abstract
73
73
  * @public
@@ -20,7 +20,7 @@ sap.ui.define([
20
20
  * The action for an {@link sap.ui.mdc.ActionToolbar ActionToolbar} control with given layout information that determines where the wrapped control is displayed on the <code>ActionToolbar</code>.
21
21
  * @extends sap.ui.core.Control
22
22
  * @author SAP SE
23
- * @version 1.133.2
23
+ * @version 1.133.3
24
24
  * @constructor
25
25
  * @since 1.58
26
26
  * @private
@@ -21,7 +21,7 @@ sap.ui.define([
21
21
  * @class The <code>ChartImplementationContainer</code> creates a container for the <code>content</code> (chart) and <code>noDataContent</code>. Based on the <code>showNoDataStruct</code> the <code>content</code> or <code>noDataContent</code> will be shown.
22
22
  * @extends sap.ui.core.Control
23
23
  * @author SAP SE
24
- * @version 1.133.2
24
+ * @version 1.133.3
25
25
  * @constructor
26
26
  *
27
27
  * @public
@@ -38,7 +38,7 @@ sap.ui.define([
38
38
  * @class The <code>ChartSelectionDetails</code> control creates a <code>sap.m.SelectionDetails</code> popover based on metadata and the configuration specified.
39
39
  * @extends sap.m.SelectionDetails
40
40
  * @author SAP SE
41
- * @version 1.133.2
41
+ * @version 1.133.3
42
42
  * @constructor
43
43
  * @public
44
44
  * @experimental As of version 1.88
@@ -26,7 +26,7 @@ sap.ui.define([
26
26
  * @extends sap.ui.mdc.util.PropertyHelper
27
27
  *
28
28
  * @author SAP SE
29
- * @version 1.133.2
29
+ * @version 1.133.3
30
30
  *
31
31
  * @private
32
32
  * @since 1.83
@@ -49,7 +49,7 @@ sap.ui.define([
49
49
  * @namespace
50
50
  * @alias sap.ui.mdc.chart.ToolbarControlFactory
51
51
  * @author SAP SE
52
- * @version 1.133.2
52
+ * @version 1.133.3
53
53
  * @since 1.123
54
54
  * @experimental
55
55
  * @private
@@ -33,7 +33,7 @@ sap.ui.define([
33
33
  *
34
34
  * @namespace
35
35
  * @author SAP SE
36
- * @version 1.133.2
36
+ * @version 1.133.3
37
37
  * @since 1.61.0
38
38
  * @alias sap.ui.mdc.condition.Condition
39
39
  *
@@ -24,7 +24,7 @@ sap.ui.define([
24
24
  *
25
25
  * @namespace
26
26
  * @author SAP SE
27
- * @version 1.133.2
27
+ * @version 1.133.3
28
28
  * @private
29
29
  * @ui5-restricted sap.ui.mdc
30
30
  * @since 1.74.0
@@ -33,7 +33,7 @@ sap.ui.define([
33
33
  * @extends sap.ui.model.json.JSONModel
34
34
  *
35
35
  * @author SAP SE
36
- * @version 1.133.2
36
+ * @version 1.133.3
37
37
  * @since 1.48.0
38
38
  * @alias sap.ui.mdc.condition.ConditionModel
39
39
  *
@@ -26,7 +26,7 @@ sap.ui.define([
26
26
  *
27
27
  * @namespace
28
28
  * @author SAP SE
29
- * @version 1.133.2
29
+ * @version 1.133.3
30
30
  * @since 1.78.0
31
31
  * @alias sap.ui.mdc.condition.FilterConverter
32
32
  *
@@ -86,58 +86,102 @@ sap.ui.define([
86
86
  * @ui5-restricted sap.ui.mdc
87
87
  */
88
88
  createFilters: function(oConditions, oConditionTypes, fConvert2FilterCallback, bCaseSensitive) {
89
- let i, aLocalIncludeFilters, aLocalExcludeFilters, oOperator, oFilter, oNewFilter, oCondition, oAnyOrAllFilterParam;
89
+ let i, aLocalIncludeFilters, aLocalExcludeFilters, oOperator, oFilter, oNewFilter, oCondition;
90
90
  const aOverallFilters = [];
91
91
 
92
- const convertAnyAllFilter = function(oFilter, sOperator, sPattern) {
93
- // var sOperator = FilterOperator.Any;
94
- // var sPattern = "*/";
95
- const sVariable = "L1";
96
-
97
- // in case of nested inner filters call the convertAnyAllFilters for all sub filters.
98
- if (!oFilter.sPath && oFilter.aFilters) {
99
- let oFilterParam;
100
- oFilter.aFilters.forEach((oFilter) => { oFilterParam = convertAnyAllFilter(oFilter, sOperator, sPattern);} );
101
- return oFilterParam || false;
102
- }
92
+ const convertAnyAllFilter = function(oFilter, sFieldPath, sPropertyPath) {
93
+ if ([FilterOperator.Any,FilterOperator.All].includes(oFilter.getOperator())) {
94
+ // existing Any/All filters are not changed
95
+ return {filter: null, anyAllFilters: [oFilter]};
96
+ } else if (!oFilter.getPath() && oFilter.getFilters()) {
97
+ // in case of nested inner filters call the convertAnyAllFilters for all sub filters.
98
+ const aFilters = [];
99
+ let aAnyAllFilters = [];
100
+ oFilter.getFilters().forEach((oFilter) => {
101
+ // aFilters.push(convertAnyAllFilter(oFilter, sFieldPath, sPropertyPath));
102
+ const oConverted = convertAnyAllFilter(oFilter, sFieldPath, sPropertyPath);
103
+ if (oConverted.filter) {
104
+ aFilters.push(oConverted.filter);
105
+ }
106
+ if (oConverted.anyAllFilters.length > 0) {
107
+ aAnyAllFilters = aAnyAllFilters.concat(oConverted.anyAllFilters);
108
+ }
109
+ });
103
110
 
104
- if (oFilter.sPath?.indexOf(sPattern) > -1) {
105
- const aSections = oFilter.sPath.split(sPattern);
106
- if (aSections.length === 2) {
107
- const [sNavPath, sPropertyPath] = aSections;
108
- oFilter.sPath = sVariable + "/" + sPropertyPath;
109
-
110
- // the Any/All filter parameter for all filters of one condition
111
- return {
112
- path: sNavPath,
113
- operator: sOperator,
114
- variable: sVariable,
115
- condition: null // this will be set later with the filter statement for all ANY/ALL filters
116
- };
117
- } else {
118
- throw new Error("FilterConverter: not supported binding " + oFilter.sPath);
111
+ let oNewFilter;
112
+ if (aFilters.length === 1) {
113
+ [oNewFilter] = aFilters;
114
+ } else if (aFilters.length > 1){
115
+ oNewFilter = new Filter({filters: aFilters, and: oFilter.isAnd()});
119
116
  }
117
+ return {filter: oNewFilter, anyAllFilters: aAnyAllFilters};
118
+ } else if (oFilter.getPath() === sFieldPath) {
119
+ oFilter.sPath = sPropertyPath;
120
+ return {filter: oFilter, anyAllFilters: []};
120
121
  }
121
- return false;
122
+ return oFilter;
122
123
  };
123
124
 
124
- const convertToAnyOrAllFilter = function(oFilter) {
125
- // ANY condition handling e.g. fieldPath "navPath*/propertyPath"
126
- const oFilterParam = convertAnyAllFilter(oFilter, FilterOperator.Any, "*/");
127
- if (oFilterParam) {
128
- return oFilterParam;
129
- } else {
130
- // ALL condition handling e.g. fieldPath "navPath+/propertyPath"
131
- return convertAnyAllFilter(oFilter, FilterOperator.All, "+/");
125
+ // Include-filters are combined in an OR-filter put into an All or A-filter
126
+ // Exclude-filters are combined in an AND-filter and put into an All-filter (As the searched entry must be in none of the targets.)
127
+ // Special case "empty", here the filter is created in the operator to allow custom empty-operators.
128
+ const convertToAnyOrAllFilter = function(aFilters, sFieldPath, bExclude) {
129
+ const [sNavPath, sPattern, sPropertyPath, sWrongPart] = sFieldPath.split(/([\*\+]\/)/);
130
+ if (sPattern && aFilters.length > 0) {
131
+ let oFilter;
132
+
133
+ if (aFilters.length === 1) {
134
+ [oFilter] = aFilters;
135
+ } else if (aFilters.length > 1) {
136
+ oFilter = new Filter({ filters: aFilters, and: bExclude });
137
+ }
138
+
139
+ if (oFilter) {
140
+ const sVariable = "L1";
141
+
142
+ if (!sWrongPart) { // only one occurence of pattern allowed
143
+ const oConverted = convertAnyAllFilter(oFilter, sFieldPath, sVariable + "/" + sPropertyPath);
144
+ let oNewFilter;
145
+ if (oConverted.filter) {
146
+ // the Any/All filter parameter for all filters of one FieldPath
147
+ oNewFilter = new Filter({
148
+ path: sNavPath,
149
+ operator: sPattern === "*/" && !bExclude ? FilterOperator.Any : FilterOperator.All, // exclude filters are All-filters, even in Any case
150
+ variable: sVariable,
151
+ condition: oConverted.filter
152
+ });
153
+ }
154
+ if (oConverted.anyAllFilters.length > 0) {
155
+ if (oNewFilter) {
156
+ oConverted.anyAllFilters.push(oNewFilter);
157
+ oNewFilter = new Filter({
158
+ filters: oConverted.anyAllFilters,
159
+ and: bExclude
160
+ });
161
+ } else if (oConverted.anyAllFilters.length === 1) {
162
+ [oNewFilter] = oConverted.anyAllFilters;
163
+ } else {
164
+ oNewFilter = new Filter({
165
+ filters: oConverted.anyAllFilters,
166
+ and: bExclude
167
+ });
168
+ }
169
+ }
170
+
171
+ return [oNewFilter];
172
+ } else {
173
+ throw new Error("FilterConverter: not supported binding " + sFieldPath);
174
+ }
175
+ }
132
176
  }
133
- };
134
177
 
178
+ return aFilters; // just use unchanged Filter
179
+ };
135
180
 
136
181
  // OR-combine filters for each property
137
182
  for (const sFieldPath in oConditions) {
138
183
  aLocalIncludeFilters = [];
139
184
  aLocalExcludeFilters = [];
140
- oAnyOrAllFilterParam = null;
141
185
  const aConditions = oConditions[sFieldPath];
142
186
 
143
187
  if (sFieldPath === "$search") {
@@ -201,19 +245,17 @@ sap.ui.define([
201
245
  continue;
202
246
  }
203
247
 
204
- // support for Any/all filters for include operations
205
- // Any/All condition handling e.g. fieldPath "navPath*/propertyPath" or "navPath+/propertyPath"
206
- oAnyOrAllFilterParam = convertToAnyOrAllFilter(oFilter);
207
248
  aLocalIncludeFilters.push(oFilter);
208
249
  } else {
209
-
210
- // support for Any/All filters for exclude operations
211
- // Any/All condition handling e.g. fieldPath "navPath*/propertyPath" or "navPath+/propertyPath"
212
- oAnyOrAllFilterParam = convertToAnyOrAllFilter(oFilter);
213
250
  aLocalExcludeFilters.push(oFilter);
214
251
  }
215
252
  }
216
253
 
254
+ // support for Any or All filters - update the Any/All Filter in the include and exclude-filters
255
+ // Any/All condition handling e.g. fieldPath "navPath*/propertyPath" or "navPath+/propertyPath"
256
+ aLocalIncludeFilters = convertToAnyOrAllFilter(aLocalIncludeFilters, sFieldPath, false);
257
+ aLocalExcludeFilters = convertToAnyOrAllFilter(aLocalExcludeFilters, sFieldPath, true);
258
+
217
259
  // take the single Filter or combine all with OR
218
260
  oFilter = undefined;
219
261
  if (aLocalIncludeFilters.length === 1) {
@@ -234,15 +276,6 @@ sap.ui.define([
234
276
  oNewFilter = new Filter({ filters: aLocalExcludeFilters, and: true }); // to have all filters for differents path AND grouped
235
277
  }
236
278
 
237
- // support for Any or All filters - update the Any/All Filter in the OverAllFilters array
238
- if (oAnyOrAllFilterParam) {
239
- // oAnyOrAllFilterParam.path = NavPath,
240
- // oAnyOrAllFilterParam.operator = "Any/All",
241
- // oAnyOrAllFilterParam.variable = "L1"
242
- oAnyOrAllFilterParam.condition = oNewFilter;
243
- oNewFilter = new Filter(oAnyOrAllFilterParam);
244
- }
245
-
246
279
  if (oNewFilter) {
247
280
  aOverallFilters.push(oNewFilter);
248
281
  }
@@ -280,7 +313,8 @@ sap.ui.define([
280
313
  return "(" + sRes + ")";
281
314
  } else {
282
315
  if (oFilter.sOperator === FilterOperator.Any || oFilter.sOperator === FilterOperator.All) {
283
- sRes = oFilter.sVariable + ":" + oFilter.sPath + " " + oFilter.sOperator + " " + FilterConverter.prettyPrintFilters(oFilter.oCondition);
316
+ sRes = oFilter.sVariable ? oFilter.sVariable + ":" : "";
317
+ sRes = sRes + oFilter.sPath + " " + oFilter.sOperator + " " + FilterConverter.prettyPrintFilters(oFilter.oCondition);
284
318
  } else {
285
319
  if (oFilter.bCaseSensitive === false) {
286
320
  sRes = "tolower(" + oFilter.sPath + ") " + oFilter.sOperator + " tolower('" + oFilter.oValue1 + "')";
@@ -68,7 +68,7 @@ sap.ui.define([
68
68
  *
69
69
  * @namespace
70
70
  * @author SAP SE
71
- * @version 1.133.2
71
+ * @version 1.133.3
72
72
  * @since 1.73.0
73
73
  * @alias sap.ui.mdc.condition.FilterOperatorUtil
74
74
  *
@@ -531,7 +531,23 @@ sap.ui.define([
531
531
  tokenText: _getText(OperatorName.Empty, false),
532
532
  valueTypes: [],
533
533
  getModelFilter: function(oCondition, sFieldPath, oType, bCaseSensitive, sBaseType) {
534
- if (sBaseType === BaseType.String) { // depending on backend and/or Type configuration filter is "" or null
534
+ const oAnyAllPath = _getAnyAllPath(sFieldPath);
535
+ if (oAnyAllPath) {
536
+ // Any or All Filter -> Empty needs to filter for non-existance of navigation targets
537
+ // once the NOT-filtering exists this can be changed into NOT-Any (at least for oData V4)
538
+ return new Filter({
539
+ path: oAnyAllPath.navPath,
540
+ operator: ModelOperator.All,
541
+ variable: "L1",
542
+ condition: new Filter({
543
+ filters: [ // create a Filter that cannot bring a result
544
+ new Filter({path: "L1/" + oAnyAllPath.propertyPath, operator: ModelOperator.EQ, value1: null}),
545
+ new Filter({path: "L1/" + oAnyAllPath.propertyPath, operator: ModelOperator.NE, value1: null})
546
+ ],
547
+ and: true
548
+ })
549
+ });
550
+ } else if (sBaseType === BaseType.String) { // depending on backend and/or Type configuration filter is "" or null
535
551
  let isNullable = false;
536
552
  if (oType) {
537
553
  const vResult = oType.parseValue("", "string");
@@ -568,7 +584,14 @@ sap.ui.define([
568
584
  valueTypes: [],
569
585
  exclude: true,
570
586
  getModelFilter: function(oCondition, sFieldPath, oType, bCaseSensitive, sBaseType) {
571
- if (sBaseType === BaseType.String) { // depending on backend and/or Type configuration filter is "" or null
587
+ const oAnyAllPath = _getAnyAllPath(sFieldPath);
588
+ if (oAnyAllPath) {
589
+ // Any or All Filter -> NotEmpty needs to filter for existance of navigation targets
590
+ return new Filter({
591
+ path: oAnyAllPath.navPath,
592
+ operator: ModelOperator.Any
593
+ });
594
+ } else if (sBaseType === BaseType.String) { // depending on backend and/or Type configuration filter is "" or null
572
595
  let isNullable = false;
573
596
  if (oType) {
574
597
  const vResult = oType.parseValue("", "string");
@@ -2563,6 +2586,20 @@ sap.ui.define([
2563
2586
 
2564
2587
  }
2565
2588
 
2589
+ function _getAnyAllPath(sFieldPath) {
2590
+
2591
+ const [sNavPath, sPattern, sPropertyPath, sWrongPart] = sFieldPath.split(/([\*\+]\/)/);
2592
+ if (sPattern) {
2593
+ // Any or All Filter -> Empty needs to filter for non-existance of navigation targets
2594
+ if (!sWrongPart) { // only one occurence of pattern allowed
2595
+ return {navPath: sNavPath, propertyPath: sPropertyPath};
2596
+ } else {
2597
+ throw new Error("FilterOperatorUtil: not supported binding " + sFieldPath);
2598
+ }
2599
+ }
2600
+
2601
+ }
2602
+
2566
2603
  return FilterOperatorUtil;
2567
2604
 
2568
2605
  }, /* bExport= */
@@ -136,7 +136,7 @@ sap.ui.define([
136
136
  * @param {function} [oConfiguration.getTextForCopy] Function to determine the text copied into clipboard
137
137
  * @constructor
138
138
  * @author SAP SE
139
- * @version 1.133.2
139
+ * @version 1.133.3
140
140
  * @public
141
141
  * @alias sap.ui.mdc.condition.Operator
142
142
  * @since 1.73.0
@@ -51,7 +51,7 @@ sap.ui.define([
51
51
  * @extends sap.m.DynamicDateOption
52
52
  *
53
53
  * @author SAP SE
54
- * @version 1.133.2
54
+ * @version 1.133.3
55
55
  *
56
56
  * @private
57
57
  * @ui5-restricted sap.ui.mdc
@@ -39,7 +39,7 @@ sap.ui.define([
39
39
  * @param {int[]|function} [oConfiguration.defaultValues] Array of values for the defaults of <code>RangeOperators</code> parameter. This can be a function, which returns the array of values. If not used the default for the values is 1.
40
40
  * @constructor
41
41
  * @author SAP SE
42
- * @version 1.133.2
42
+ * @version 1.133.3
43
43
  * @public
44
44
  * @alias sap.ui.mdc.condition.RangeOperator
45
45
  * @since 1.74.0
@@ -61,7 +61,7 @@ sap.ui.define([
61
61
  * @extends sap.ui.model.SimpleType
62
62
  *
63
63
  * @author SAP SE
64
- * @version 1.133.2
64
+ * @version 1.133.3
65
65
  *
66
66
  * @since 1.62.0
67
67
  * @public
@@ -26,7 +26,7 @@ sap.ui.define([
26
26
  *
27
27
  * @namespace
28
28
  * @author SAP SE
29
- * @version 1.133.2
29
+ * @version 1.133.3
30
30
  * @since 1.121.0
31
31
  * @alias sap.ui.mdc.field.ConditionTypeUtils
32
32
  *
@@ -54,7 +54,7 @@ sap.ui.define([
54
54
  * @extends sap.ui.model.SimpleType
55
55
  *
56
56
  * @author SAP SE
57
- * @version 1.133.2
57
+ * @version 1.133.3
58
58
  *
59
59
  * @since 1.62.0
60
60
  * @public
@@ -16,7 +16,7 @@ sap.ui.define([
16
16
  * @param {object} [mSettings] Initial settings for the new control
17
17
  * @class A field help used in the <code>FieldInfo</code> aggregation in <code>FieldBase</code> controls that allows you to add custom content.
18
18
  * @extends sap.ui.mdc.field.FieldInfoBase
19
- * @version 1.133.2
19
+ * @version 1.133.3
20
20
  * @constructor
21
21
  * @private
22
22
  * @ui5-restricted sap.fe
@@ -50,7 +50,7 @@ sap.ui.define([
50
50
  * @extends sap.ui.mdc.field.ConditionsType
51
51
  *
52
52
  * @author SAP SE
53
- * @version 1.133.2
53
+ * @version 1.133.3
54
54
  *
55
55
  * @since 1.96.0
56
56
  * @public
@@ -99,7 +99,7 @@ sap.ui.define([
99
99
  * @implements sap.ui.core.IFormContent, sap.ui.core.ISemanticFormContent, sap.m.IOverflowToolbarContent, sap.ui.core.ILabelable
100
100
  *
101
101
  * @author SAP SE
102
- * @version 1.133.2
102
+ * @version 1.133.3
103
103
  *
104
104
  * @constructor
105
105
  * @alias sap.ui.mdc.field.FieldBase
@@ -31,7 +31,7 @@ sap.ui.define([
31
31
  * A <code>FieldInfoBase</code> element is a base class that shows any kind of information related to the <code>Field</code> control, for example, navigation targets or contact details.
32
32
  * This is the basis for link-features. If the link is pressed a popover might be opened.
33
33
  * @extends sap.ui.mdc.Element
34
- * @version 1.133.2
34
+ * @version 1.133.3
35
35
  * @constructor
36
36
  * @since 1.54.0
37
37
  * @public
@@ -21,7 +21,7 @@ sap.ui.define([
21
21
  * The <code>FieldInput</code> control is used to render an input field inside a control based on {@link sap.ui.mdc.field.FieldBase FieldBase}.
22
22
  * It enhances the {@link sap.m.Input Input} control to add ARIA attributes and other {@link sap.ui.mdc.field.FieldBase FieldBase}-specific logic.
23
23
  * @extends sap.m.Input
24
- * @version 1.133.2
24
+ * @version 1.133.3
25
25
  * @constructor
26
26
  * @abstract
27
27
  * @private
@@ -16,7 +16,7 @@ sap.ui.define([
16
16
  * @class Functions uses in <code>FieldInputRenderer</code> and <code>FieldMultiInputRenderer</code> to adjust aria attributes.
17
17
  *
18
18
  * @author SAP SE
19
- * @version 1.133.2
19
+ * @version 1.133.3
20
20
  * @since 1.86.0
21
21
  * @alias sap.ui.mdc.field.FieldInputRenderUtil
22
22
  *
@@ -28,7 +28,7 @@ sap.ui.define([
28
28
  * The <code>FieldMultiInput</code> control is used to render a multi-input field inside a control based on {@link sap.ui.mdc.field.FieldBase FieldBase}.
29
29
  * It enhances the {@link sap.m.MultiInput MultiInput} control to add ARIA attributes and other {@link sap.ui.mdc.field.FieldBase FieldBase}-specific logic.
30
30
  * @extends sap.m.MultiInput
31
- * @version 1.133.2
31
+ * @version 1.133.3
32
32
  * @constructor
33
33
  * @abstract
34
34
  * @private
@@ -23,7 +23,7 @@ sap.ui.define([
23
23
  * @extends sap.ui.mdc.valuehelp.content.FixedListItem
24
24
  *
25
25
  * @author SAP SE
26
- * @version 1.133.2
26
+ * @version 1.133.3
27
27
  *
28
28
  * @private
29
29
  * @ui5-restricted sap.fe