@openui5/sap.ui.core 1.110.0 → 1.111.1

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 (279) hide show
  1. package/.eslintrc.json +1 -0
  2. package/package.json +1 -1
  3. package/src/jquery.sap.global.js +1 -1
  4. package/src/jquery.sap.properties.js +1 -1
  5. package/src/jquery.sap.resources.js +1 -1
  6. package/src/jquery.sap.script.js +1 -1
  7. package/src/jquery.sap.storage.js +3 -3
  8. package/src/sap/base/util/restricted/_CancelablePromise.js +1 -1
  9. package/src/sap/base/util/restricted/_castArray.js +1 -1
  10. package/src/sap/base/util/restricted/_compact.js +1 -1
  11. package/src/sap/base/util/restricted/_curry.js +1 -1
  12. package/src/sap/base/util/restricted/_debounce.js +1 -1
  13. package/src/sap/base/util/restricted/_difference.js +1 -1
  14. package/src/sap/base/util/restricted/_differenceBy.js +1 -1
  15. package/src/sap/base/util/restricted/_differenceWith.js +1 -1
  16. package/src/sap/base/util/restricted/_flatMap.js +1 -1
  17. package/src/sap/base/util/restricted/_flatMapDeep.js +1 -1
  18. package/src/sap/base/util/restricted/_flatMapDepth.js +1 -1
  19. package/src/sap/base/util/restricted/_flatten.js +1 -1
  20. package/src/sap/base/util/restricted/_flattenDeep.js +1 -1
  21. package/src/sap/base/util/restricted/_flattenDepth.js +1 -1
  22. package/src/sap/base/util/restricted/_intersection.js +1 -1
  23. package/src/sap/base/util/restricted/_intersectionBy.js +1 -1
  24. package/src/sap/base/util/restricted/_intersectionWith.js +1 -1
  25. package/src/sap/base/util/restricted/_isEqual.js +1 -1
  26. package/src/sap/base/util/restricted/_isEqualWith.js +1 -1
  27. package/src/sap/base/util/restricted/_isNil.js +1 -1
  28. package/src/sap/base/util/restricted/_max.js +1 -1
  29. package/src/sap/base/util/restricted/_merge.js +1 -1
  30. package/src/sap/base/util/restricted/_mergeWith.js +1 -1
  31. package/src/sap/base/util/restricted/_min.js +1 -1
  32. package/src/sap/base/util/restricted/_omit.js +1 -1
  33. package/src/sap/base/util/restricted/_pick.js +1 -1
  34. package/src/sap/base/util/restricted/_pickBy.js +1 -1
  35. package/src/sap/base/util/restricted/_throttle.js +1 -1
  36. package/src/sap/base/util/restricted/_toArray.js +1 -1
  37. package/src/sap/base/util/restricted/_union.js +1 -1
  38. package/src/sap/base/util/restricted/_unionBy.js +1 -1
  39. package/src/sap/base/util/restricted/_unionWith.js +1 -1
  40. package/src/sap/base/util/restricted/_uniq.js +1 -1
  41. package/src/sap/base/util/restricted/_uniqBy.js +1 -1
  42. package/src/sap/base/util/restricted/_uniqWith.js +1 -1
  43. package/src/sap/base/util/restricted/_without.js +1 -1
  44. package/src/sap/base/util/restricted/_xor.js +1 -1
  45. package/src/sap/base/util/restricted/_xorBy.js +1 -1
  46. package/src/sap/base/util/restricted/_xorWith.js +1 -1
  47. package/src/sap/base/util/restricted/_zipObject.js +1 -1
  48. package/src/sap/base/util/restricted/_zipObjectDeep.js +1 -1
  49. package/src/sap/ui/Device.js +3 -3
  50. package/src/sap/ui/Global.js +4 -4
  51. package/src/sap/ui/base/Event.js +1 -1
  52. package/src/sap/ui/base/EventProvider.js +1 -1
  53. package/src/sap/ui/base/Interface.js +1 -1
  54. package/src/sap/ui/base/ManagedObject.js +1 -1
  55. package/src/sap/ui/base/ManagedObjectMetadata.js +1 -1
  56. package/src/sap/ui/base/Metadata.js +1 -1
  57. package/src/sap/ui/base/Object.js +1 -1
  58. package/src/sap/ui/base/ObjectPool.js +1 -1
  59. package/src/sap/ui/core/.library +2 -2
  60. package/src/sap/ui/core/BusyIndicator.js +1 -1
  61. package/src/sap/ui/core/Component.js +58 -50
  62. package/src/sap/ui/core/ComponentContainer.js +1 -1
  63. package/src/sap/ui/core/ComponentMetadata.js +1 -1
  64. package/src/sap/ui/core/ComponentSupport.js +1 -1
  65. package/src/sap/ui/core/Configuration.js +4 -1
  66. package/src/sap/ui/core/Control.js +19 -7
  67. package/src/sap/ui/core/Core.js +2 -1
  68. package/src/sap/ui/core/CustomData.js +1 -1
  69. package/src/sap/ui/core/DeclarativeSupport.js +1 -1
  70. package/src/sap/ui/core/Element.js +98 -3
  71. package/src/sap/ui/core/ElementMetadata.js +1 -1
  72. package/src/sap/ui/core/EnabledPropagator.js +16 -1
  73. package/src/sap/ui/core/EventBus.js +1 -1
  74. package/src/sap/ui/core/Fragment.js +1 -1
  75. package/src/sap/ui/core/HTML.js +1 -1
  76. package/src/sap/ui/core/History.js +1 -1
  77. package/src/sap/ui/core/Icon.js +10 -6
  78. package/src/sap/ui/core/IndicationColorSupport.js +1 -1
  79. package/src/sap/ui/core/IntervalTrigger.js +1 -1
  80. package/src/sap/ui/core/InvisibleMessage.js +1 -1
  81. package/src/sap/ui/core/InvisibleRenderer.js +1 -1
  82. package/src/sap/ui/core/InvisibleText.js +1 -1
  83. package/src/sap/ui/core/Item.js +1 -1
  84. package/src/sap/ui/core/LabelEnablement.js +1 -1
  85. package/src/sap/ui/core/LayoutData.js +1 -1
  86. package/src/sap/ui/core/ListItem.js +1 -1
  87. package/src/sap/ui/core/LocalBusyIndicator.js +1 -1
  88. package/src/sap/ui/core/Locale.js +12 -11
  89. package/src/sap/ui/core/LocaleData.js +1 -1
  90. package/src/sap/ui/core/Manifest.js +1 -1
  91. package/src/sap/ui/core/Message.js +1 -1
  92. package/src/sap/ui/core/Patcher.js +35 -0
  93. package/src/sap/ui/core/Popup.js +1 -0
  94. package/src/sap/ui/core/RenderManager.js +286 -156
  95. package/src/sap/ui/core/Renderer.js +1 -1
  96. package/src/sap/ui/core/ResizeHandler.js +2 -2
  97. package/src/sap/ui/core/ScrollBar.js +1 -1
  98. package/src/sap/ui/core/SeparatorItem.js +1 -1
  99. package/src/sap/ui/core/Title.js +1 -1
  100. package/src/sap/ui/core/TooltipBase.js +1 -1
  101. package/src/sap/ui/core/UIArea.js +36 -4
  102. package/src/sap/ui/core/UIComponent.js +1 -1
  103. package/src/sap/ui/core/UIComponentMetadata.js +1 -1
  104. package/src/sap/ui/core/ValueStateSupport.js +1 -1
  105. package/src/sap/ui/core/VariantLayoutData.js +1 -1
  106. package/src/sap/ui/core/XMLComposite.js +1 -1
  107. package/src/sap/ui/core/XMLCompositeMetadata.js +1 -1
  108. package/src/sap/ui/core/_IconRegistry.js +1 -0
  109. package/src/sap/ui/core/cache/CacheManager.js +1 -1
  110. package/src/sap/ui/core/date/UI5Date.js +970 -0
  111. package/src/sap/ui/core/date/UniversalDate.js +803 -39
  112. package/src/sap/ui/core/date/UniversalDateUtils.js +170 -14
  113. package/src/sap/ui/core/delegate/ItemNavigation.js +1 -1
  114. package/src/sap/ui/core/delegate/ScrollEnablement.js +1 -1
  115. package/src/sap/ui/core/dnd/DragAndDrop.js +26 -15
  116. package/src/sap/ui/core/dnd/DragDropBase.js +1 -1
  117. package/src/sap/ui/core/dnd/DragDropInfo.js +1 -1
  118. package/src/sap/ui/core/dnd/DragInfo.js +5 -8
  119. package/src/sap/ui/core/dnd/DropInfo.js +1 -1
  120. package/src/sap/ui/core/format/DateFormat.js +39 -29
  121. package/src/sap/ui/core/format/FileSizeFormat.js +1 -0
  122. package/src/sap/ui/core/format/ListFormat.js +1 -0
  123. package/src/sap/ui/core/format/NumberFormat.js +31 -56
  124. package/src/sap/ui/core/format/TimezoneUtil.js +9 -7
  125. package/src/sap/ui/core/hyphenation/Hyphenation.js +1 -1
  126. package/src/sap/ui/core/library.js +22 -3
  127. package/src/sap/ui/core/message/ControlMessageProcessor.js +1 -1
  128. package/src/sap/ui/core/message/Message.js +1 -1
  129. package/src/sap/ui/core/message/MessageManager.js +1 -1
  130. package/src/sap/ui/core/message/MessageParser.js +1 -1
  131. package/src/sap/ui/core/message/MessageProcessor.js +1 -1
  132. package/src/sap/ui/core/mvc/HTMLView.js +1 -1
  133. package/src/sap/ui/core/mvc/JSONView.js +1 -1
  134. package/src/sap/ui/core/mvc/JSView.js +1 -1
  135. package/src/sap/ui/core/mvc/TemplateView.js +1 -1
  136. package/src/sap/ui/core/mvc/View.js +1 -1
  137. package/src/sap/ui/core/mvc/XMLView.js +1 -1
  138. package/src/sap/ui/core/plugin/DeclarativeSupport.js +1 -1
  139. package/src/sap/ui/core/plugin/LessSupport.js +1 -1
  140. package/src/sap/ui/core/plugin/TemplatingSupport.js +1 -1
  141. package/src/sap/ui/core/postmessage/Bus.js +1 -1
  142. package/src/sap/ui/core/postmessage/confirmationDialog.js +1 -1
  143. package/src/sap/ui/core/routing/Router.js +4 -3
  144. package/src/sap/ui/core/search/OpenSearchProvider.js +1 -1
  145. package/src/sap/ui/core/search/SearchProvider.js +1 -1
  146. package/src/sap/ui/core/service/Service.js +1 -1
  147. package/src/sap/ui/core/service/ServiceFactory.js +1 -1
  148. package/src/sap/ui/core/service/ServiceFactoryRegistry.js +1 -1
  149. package/src/sap/ui/core/support/Plugin.js +1 -1
  150. package/src/sap/ui/core/support/Support.js +1 -1
  151. package/src/sap/ui/core/support/plugins/ControlTree.js +14 -20
  152. package/src/sap/ui/core/support/plugins/Interaction.js +1 -1
  153. package/src/sap/ui/core/support/plugins/LocalStorage.js +1 -1
  154. package/src/sap/ui/core/support/plugins/Performance.js +1 -1
  155. package/src/sap/ui/core/support/plugins/Selector.js +1 -1
  156. package/src/sap/ui/core/support/plugins/TechInfo.js +1 -1
  157. package/src/sap/ui/core/support/plugins/Trace.js +1 -1
  158. package/src/sap/ui/core/support/plugins/ViewInfo.js +1 -1
  159. package/src/sap/ui/core/tmpl/DOMAttribute.js +1 -1
  160. package/src/sap/ui/core/tmpl/DOMElement.js +1 -1
  161. package/src/sap/ui/core/tmpl/HandlebarsTemplate.js +1 -1
  162. package/src/sap/ui/core/tmpl/Template.js +1 -1
  163. package/src/sap/ui/core/tmpl/TemplateControl.js +1 -1
  164. package/src/sap/ui/core/util/AsyncHintsHelper.js +1 -1
  165. package/src/sap/ui/core/util/Export.js +1 -1
  166. package/src/sap/ui/core/util/ExportCell.js +1 -1
  167. package/src/sap/ui/core/util/ExportColumn.js +1 -1
  168. package/src/sap/ui/core/util/ExportRow.js +1 -1
  169. package/src/sap/ui/core/util/ExportType.js +1 -1
  170. package/src/sap/ui/core/util/ExportTypeCSV.js +1 -1
  171. package/src/sap/ui/core/util/File.js +1 -1
  172. package/src/sap/ui/core/util/LibraryInfo.js +1 -1
  173. package/src/sap/ui/core/util/MockServer.js +1 -1
  174. package/src/sap/ui/core/util/PasteHelper.js +1 -1
  175. package/src/sap/ui/core/util/XMLPreprocessor.js +1 -0
  176. package/src/sap/ui/core/util/serializer/HTMLViewSerializer.js +1 -1
  177. package/src/sap/ui/core/util/serializer/Serializer.js +1 -1
  178. package/src/sap/ui/core/util/serializer/ViewSerializer.js +1 -1
  179. package/src/sap/ui/core/util/serializer/XMLViewSerializer.js +1 -1
  180. package/src/sap/ui/core/util/serializer/delegate/Delegate.js +1 -1
  181. package/src/sap/ui/core/util/serializer/delegate/HTML.js +1 -1
  182. package/src/sap/ui/core/util/serializer/delegate/XML.js +1 -1
  183. package/src/sap/ui/core/ws/ReadyState.js +1 -1
  184. package/src/sap/ui/core/ws/SapPcpWebSocket.js +1 -1
  185. package/src/sap/ui/core/ws/WebSocket.js +2 -1
  186. package/src/sap/ui/debug/ControlTree.js +1 -1
  187. package/src/sap/ui/debug/DebugEnv.js +1 -1
  188. package/src/sap/ui/debug/PropertyList.js +1 -1
  189. package/src/sap/ui/dom/isBehindOtherElement.js +11 -3
  190. package/src/sap/ui/model/ClientModel.js +1 -1
  191. package/src/sap/ui/model/CompositeDataState.js +1 -1
  192. package/src/sap/ui/model/CompositeType.js +1 -1
  193. package/src/sap/ui/model/DataState.js +1 -1
  194. package/src/sap/ui/model/MetaModel.js +1 -1
  195. package/src/sap/ui/model/Model.js +1 -11
  196. package/src/sap/ui/model/SelectionModel.js +1 -1
  197. package/src/sap/ui/model/SimpleType.js +1 -1
  198. package/src/sap/ui/model/TreeAutoExpandMode.js +1 -1
  199. package/src/sap/ui/model/Type.js +1 -1
  200. package/src/sap/ui/model/analytics/AnalyticalBinding.js +5 -1
  201. package/src/sap/ui/model/controlhelper/TreeBindingProxy.js +29 -15
  202. package/src/sap/ui/model/json/JSONModel.js +1 -1
  203. package/src/sap/ui/model/message/MessageModel.js +1 -1
  204. package/src/sap/ui/model/odata/ODataAnnotations.js +1 -1
  205. package/src/sap/ui/model/odata/ODataMessageParser.js +1 -1
  206. package/src/sap/ui/model/odata/ODataMetaModel.js +2 -2
  207. package/src/sap/ui/model/odata/ODataMetadata.js +1 -1
  208. package/src/sap/ui/model/odata/ODataModel.js +1 -1
  209. package/src/sap/ui/model/odata/type/Boolean.js +1 -1
  210. package/src/sap/ui/model/odata/type/Byte.js +1 -1
  211. package/src/sap/ui/model/odata/type/Currency.js +1 -1
  212. package/src/sap/ui/model/odata/type/Date.js +57 -21
  213. package/src/sap/ui/model/odata/type/DateTime.js +32 -3
  214. package/src/sap/ui/model/odata/type/DateTimeBase.js +62 -25
  215. package/src/sap/ui/model/odata/type/DateTimeOffset.js +35 -5
  216. package/src/sap/ui/model/odata/type/DateTimeWithTimezone.js +6 -5
  217. package/src/sap/ui/model/odata/type/Decimal.js +1 -1
  218. package/src/sap/ui/model/odata/type/Double.js +1 -1
  219. package/src/sap/ui/model/odata/type/Guid.js +1 -1
  220. package/src/sap/ui/model/odata/type/Int.js +1 -1
  221. package/src/sap/ui/model/odata/type/Int16.js +1 -1
  222. package/src/sap/ui/model/odata/type/Int32.js +1 -1
  223. package/src/sap/ui/model/odata/type/Int64.js +1 -1
  224. package/src/sap/ui/model/odata/type/ODataType.js +1 -1
  225. package/src/sap/ui/model/odata/type/Raw.js +1 -1
  226. package/src/sap/ui/model/odata/type/SByte.js +1 -1
  227. package/src/sap/ui/model/odata/type/Single.js +1 -1
  228. package/src/sap/ui/model/odata/type/Stream.js +1 -1
  229. package/src/sap/ui/model/odata/type/String.js +1 -1
  230. package/src/sap/ui/model/odata/type/Time.js +37 -2
  231. package/src/sap/ui/model/odata/type/TimeOfDay.js +39 -4
  232. package/src/sap/ui/model/odata/type/Unit.js +1 -1
  233. package/src/sap/ui/model/odata/v2/Context.js +1 -1
  234. package/src/sap/ui/model/odata/v2/ODataAnnotations.js +1 -1
  235. package/src/sap/ui/model/odata/v2/ODataContextBinding.js +1 -0
  236. package/src/sap/ui/model/odata/v2/ODataListBinding.js +11 -1
  237. package/src/sap/ui/model/odata/v2/ODataModel.js +4 -2
  238. package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +1 -1
  239. package/src/sap/ui/model/odata/v4/AnnotationHelper.js +1 -1
  240. package/src/sap/ui/model/odata/v4/Context.js +98 -23
  241. package/src/sap/ui/model/odata/v4/ODataBinding.js +39 -9
  242. package/src/sap/ui/model/odata/v4/ODataContextBinding.js +4 -4
  243. package/src/sap/ui/model/odata/v4/ODataListBinding.js +57 -21
  244. package/src/sap/ui/model/odata/v4/ODataMetaModel.js +3 -4
  245. package/src/sap/ui/model/odata/v4/ODataModel.js +33 -8
  246. package/src/sap/ui/model/odata/v4/ODataParentBinding.js +15 -12
  247. package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +2 -2
  248. package/src/sap/ui/model/odata/v4/lib/_AggregationCache.js +43 -8
  249. package/src/sap/ui/model/odata/v4/lib/_AggregationHelper.js +92 -28
  250. package/src/sap/ui/model/odata/v4/lib/_Cache.js +74 -24
  251. package/src/sap/ui/model/odata/v4/lib/_Helper.js +14 -3
  252. package/src/sap/ui/model/odata/v4/lib/_MetadataConverter.js +12 -4
  253. package/src/sap/ui/model/odata/v4/lib/_MetadataRequestor.js +8 -3
  254. package/src/sap/ui/model/odata/v4/lib/_Requestor.js +22 -14
  255. package/src/sap/ui/model/odata/v4/lib/_V2MetadataConverter.js +8 -1
  256. package/src/sap/ui/model/resource/ResourceModel.js +1 -1
  257. package/src/sap/ui/model/type/Boolean.js +1 -1
  258. package/src/sap/ui/model/type/Currency.js +1 -1
  259. package/src/sap/ui/model/type/Date.js +1 -1
  260. package/src/sap/ui/model/type/DateInterval.js +190 -155
  261. package/src/sap/ui/model/type/DateTime.js +1 -1
  262. package/src/sap/ui/model/type/DateTimeInterval.js +1 -1
  263. package/src/sap/ui/model/type/FileSize.js +1 -1
  264. package/src/sap/ui/model/type/Float.js +1 -1
  265. package/src/sap/ui/model/type/Integer.js +1 -1
  266. package/src/sap/ui/model/type/String.js +1 -1
  267. package/src/sap/ui/model/type/Time.js +1 -1
  268. package/src/sap/ui/model/type/TimeInterval.js +1 -1
  269. package/src/sap/ui/model/type/Unit.js +1 -1
  270. package/src/sap/ui/model/xml/XMLModel.js +1 -1
  271. package/src/sap/ui/qunit/utils/ControlIterator.js +1 -1
  272. package/src/sap/ui/qunit/utils/MemoryLeakCheck.js +1 -1
  273. package/src/sap/ui/qunit/utils/waitForThemeApplied.js +4 -5
  274. package/src/sap/ui/test/generic/TestBase.js +3 -3
  275. package/src/sap/ui/test/generic/_EnforceSemanticRendering.js +4 -4
  276. package/src/sap/ui/thirdparty/jquery-mobile-custom.js +9 -1
  277. package/src/sap/ui/util/Storage.js +1 -1
  278. package/src/ui5loader-autoconfig.js +14 -11
  279. package/src/ui5loader.js +152 -3
@@ -24,8 +24,8 @@ sap.ui.define([
24
24
  * @author SAP SE
25
25
  * @class Implementation of an OData V4 model's context.
26
26
  *
27
- * The context is a pointer to model data as returned by a query from a
28
- * {@link sap.ui.model.odata.v4.ODataContextBinding} or a
27
+ * The context is a pointer to model data as returned by a query from an
28
+ * {@link sap.ui.model.odata.v4.ODataContextBinding} or an
29
29
  * {@link sap.ui.model.odata.v4.ODataListBinding}. Contexts are always and only
30
30
  * created by such bindings. A context for a context binding points to the complete query
31
31
  * result. A context for a list binding points to one specific entry in the binding's
@@ -42,7 +42,7 @@ sap.ui.define([
42
42
  * @hideconstructor
43
43
  * @public
44
44
  * @since 1.39.0
45
- * @version 1.110.0
45
+ * @version 1.111.1
46
46
  */
47
47
  Context = BaseContext.extend("sap.ui.model.odata.v4.Context", {
48
48
  constructor : constructor
@@ -98,6 +98,7 @@ sap.ui.define([
98
98
  this.bInactive = bInactive || undefined; // be in sync with the annotation
99
99
  this.iIndex = iIndex;
100
100
  this.bKeepAlive = false;
101
+ this.bSelected = false;
101
102
  this.fnOnBeforeDestroy = undefined;
102
103
  }
103
104
 
@@ -353,9 +354,11 @@ sap.ui.define([
353
354
  });
354
355
  this.oBinding = undefined;
355
356
  this.oCreatedPromise = undefined;
357
+ // keep oDeletePromise so that isDeleted does not unexpectedly become false
356
358
  this.oSyncCreatePromise = undefined;
357
359
  this.bInactive = undefined;
358
360
  this.bKeepAlive = undefined;
361
+ this.bSelected = false;
359
362
  // When removing oModel, ManagedObject#getBindingContext does not return the destroyed
360
363
  // context although the control still refers to it
361
364
  this.oModel = undefined;
@@ -452,7 +455,7 @@ sap.ui.define([
452
455
  if (oGroupLock) {
453
456
  oGroupLock.unlock();
454
457
  }
455
- throw new Error("must not modify a deleted entity: " + this);
458
+ throw new Error("Must not modify a deleted entity: " + this);
456
459
  }
457
460
  if (oGroupLock && this.isTransient() && !this.isInactive()) {
458
461
  oValue = this.getValue();
@@ -964,8 +967,8 @@ sap.ui.define([
964
967
  || this.getBinding().hasPendingChangesForPath(this.sPath)
965
968
  || this.oModel.getDependentBindings(this).some(function (oDependentBinding) {
966
969
  return oDependentBinding.oCache
967
- ? oDependentBinding.hasPendingChanges()
968
- : oDependentBinding.hasPendingChangesInDependents();
970
+ ? oDependentBinding._hasPendingChanges(false, true)
971
+ : oDependentBinding.hasPendingChangesInDependents(false, true);
969
972
  })
970
973
  || this.oModel.withUnresolvedBindings("hasPendingChangesInCaches", this.sPath.slice(1));
971
974
  };
@@ -1048,6 +1051,19 @@ sap.ui.define([
1048
1051
  return this.bKeepAlive;
1049
1052
  };
1050
1053
 
1054
+ /**
1055
+ * Tells whether this context is currently selected.
1056
+ *
1057
+ * @returns {boolean} Whether this context is currently selected
1058
+ *
1059
+ * @experimental As of version 1.111.0
1060
+ * @public
1061
+ * @see #setSelected
1062
+ */
1063
+ Context.prototype.isSelected = function () {
1064
+ return this.bSelected;
1065
+ };
1066
+
1051
1067
  /**
1052
1068
  * For a context created using {@link sap.ui.model.odata.v4.ODataListBinding#create}, the
1053
1069
  * method returns <code>true</code> if the context is transient, meaning that the promise
@@ -1394,6 +1410,12 @@ sap.ui.define([
1394
1410
  * container (example "/com.sap.gateway.default.iwbep.tea_busi.v0001.Container/TEAMS") of the
1395
1411
  * service. All (navigation) properties in the complete model matching such an absolute path
1396
1412
  * are updated. Since 1.85.0, "14.4.11 Expression edm:String" is accepted as well.
1413
+ *
1414
+ * Since 1.108.8, a property path matching the "com.sap.vocabularies.Common.v1.Messages"
1415
+ * annotation of a list binding's entity type is treated specially for a row context of a list
1416
+ * binding: It is loaded even if it has not yet been requested by that list binding. This way,
1417
+ * exactly the messages for a single row can be updated. Same for a "*" segment or an empty
1418
+ * navigation property path.
1397
1419
  * @param {string} [sGroupId]
1398
1420
  * The group ID to be used (since 1.69.0); if not specified, the update group ID for the
1399
1421
  * context's binding is used, see {@link #getUpdateGroupId}. If a different group ID is
@@ -1552,7 +1574,7 @@ sap.ui.define([
1552
1574
  * The absolute paths to request side effects for
1553
1575
  * @param {string} sGroupId
1554
1576
  * The effective group ID
1555
- * @returns {sap.ui.base.SyncPromise}
1577
+ * @returns {sap.ui.base.SyncPromise|undefined}
1556
1578
  * A promise resolving without a defined result, or rejecting with an error if loading of side
1557
1579
  * effects fails, or <code>undefined</code> if there is nothing to do
1558
1580
  *
@@ -1618,27 +1640,31 @@ sap.ui.define([
1618
1640
  };
1619
1641
 
1620
1642
  /**
1621
- * Resets all pending changes of this context, see {@link #hasPendingChanges}. Resets also
1622
- * invalid user input. If this context is currently {@link #delete deleted} on the client, but
1623
- * not yet on the server, this method cancels the deletion and restores the context.
1643
+ * Resets all property changes, created entities, and entity deletions of this context. Resets
1644
+ * also invalid user input and inactive contexts which had their activation prevented (see
1645
+ * {@link sap.ui.model.odata.v4.Context#isInactive}). This function does not reset the execution
1646
+ * of OData operations (see {@link sap.ui.model.odata.v4.ODataContextBinding#execute}). For a
1647
+ * context which is currently {@link #delete deleted} on the client, but not yet on the server,
1648
+ * this method cancels the deletion and restores the context.
1624
1649
  *
1625
- * Note: This is an experimental API. Currently only PATCH and DELETE changes for row contexts
1626
- * of an absolute {@link sap.ui.model.odata.v4.ODataListBinding} are supported.
1650
+ * Note: This is an experimental API. Currently only row contexts of an
1651
+ * {@link sap.ui.model.odata.v4.ODataListBinding} are supported.
1627
1652
  *
1628
1653
  * @returns {Promise}
1629
1654
  * A promise which is resolved without a defined result as soon as all changes in the context
1630
- * itself are canceled
1655
+ * and its current dependent bindings are canceled
1631
1656
  * @throws {Error} If
1632
1657
  * <ul>
1633
1658
  * <li> the binding's root binding is suspended,
1634
1659
  * <li> a change of this context has already been sent to the server and there is no response
1635
1660
  * yet,
1636
- * <li> this context is transient but not inactive and therefore should rather be reset via
1661
+ * <li> this context is transient, but not inactive and therefore should rather be reset via
1637
1662
  * {@link #delete}.
1638
1663
  * </ul>
1639
1664
  *
1640
1665
  * @experimental As of version 1.109.0
1641
1666
  * @public
1667
+ * @see #hasPendingChanges
1642
1668
  */
1643
1669
  Context.prototype.resetChanges = function () {
1644
1670
  var aPromises = this.oDeletePromise
@@ -1654,6 +1680,8 @@ sap.ui.define([
1654
1680
  if (this.bInactive === 1) {
1655
1681
  this.bInactive = true;
1656
1682
  }
1683
+ this.oBinding.resetChangesInDependents(aPromises, true);
1684
+
1657
1685
  return Promise.all(aPromises).then(function () {});
1658
1686
  };
1659
1687
 
@@ -1668,15 +1696,20 @@ sap.ui.define([
1668
1696
  };
1669
1697
 
1670
1698
  /**
1671
- * Sets a new unique number for this context's generation, just like
1672
- * {@link sap.ui.model.odata.v4.Context.createNewContext} does for a new context.
1699
+ * Sets the inactive flag to <code>true</code>
1700
+ *
1701
+ * Note: this is a private and internal API. Do not call this!
1702
+ *
1703
+ * @throws {Error} - If this context is not inactive
1673
1704
  *
1674
1705
  * @private
1675
- * @see #getGeneration
1706
+ * @see #isInactive
1676
1707
  */
1677
- Context.prototype.setNewGeneration = function () {
1678
- iGenerationCounter += 1;
1679
- this.iGeneration = iGenerationCounter;
1708
+ Context.prototype.setInactive = function () {
1709
+ if (!this.bInactive) {
1710
+ throw new Error("Not inactive: " + this.bInactive);
1711
+ }
1712
+ this.bInactive = true;
1680
1713
  };
1681
1714
 
1682
1715
  /**
@@ -1755,6 +1788,18 @@ sap.ui.define([
1755
1788
  this.fnOnBeforeDestroy = bKeepAlive ? fnOnBeforeDestroy : undefined;
1756
1789
  };
1757
1790
 
1791
+ /**
1792
+ * Sets a new unique number for this context's generation, just like
1793
+ * {@link sap.ui.model.odata.v4.Context.createNewContext} does for a new context.
1794
+ *
1795
+ * @private
1796
+ * @see #getGeneration
1797
+ */
1798
+ Context.prototype.setNewGeneration = function () {
1799
+ iGenerationCounter += 1;
1800
+ this.iGeneration = iGenerationCounter;
1801
+ };
1802
+
1758
1803
  /**
1759
1804
  * Sets a new value for the property identified by the given path. The path is relative to this
1760
1805
  * context and is expected to point to a structural property with primitive type or, since
@@ -1833,9 +1878,36 @@ sap.ui.define([
1833
1878
  };
1834
1879
 
1835
1880
  /**
1836
- * Returns a string representation of this object including the {@link #getPath binding path},
1837
- * {@link #getIndex index}, and state (see also "Context states" of
1838
- * {@link topic:c9723f8265f644af91c0ed941e114d46 Creating an Entity}).
1881
+ * Determines whether this context is currently selected.
1882
+ *
1883
+ * @param {boolean} bSelected - Whether this context is currently selected
1884
+ * @throws {Error}
1885
+ * If this context does not belong to a list binding, or if it is {@link #isDeleted deleted}
1886
+ * and <code>bSelected</code> is <code>true</code>
1887
+ *
1888
+ * @experimental As of version 1.111.0
1889
+ * @public
1890
+ * @see #isSelected
1891
+ */
1892
+ Context.prototype.setSelected = function (bSelected) {
1893
+ if (!this.oBinding.getHeaderContext) {
1894
+ throw new Error("Unsupported context: " + this);
1895
+ }
1896
+ if (bSelected && this.isDeleted()) {
1897
+ throw new Error("Must not select a deleted entity: " + this);
1898
+ }
1899
+ this.bSelected = bSelected;
1900
+ };
1901
+
1902
+ /**
1903
+ * Returns a string representation of this object including the following information:
1904
+ * <ul>
1905
+ * <li> {@link #getPath Binding path},
1906
+ * <li> {@link #getIndex Index},
1907
+ * <li> State (see also "Context states" of
1908
+ * {@link topic:c9723f8265f644af91c0ed941e114d46 Creating an Entity}), including whether
1909
+ * this context is {@link #isSelected selected}.
1910
+ * </ul>
1839
1911
  *
1840
1912
  * @returns {string} A string description of this binding
1841
1913
  *
@@ -1869,6 +1941,9 @@ sap.ui.define([
1869
1941
  // no default
1870
1942
  }
1871
1943
  }
1944
+ if (this.bSelected) {
1945
+ sSuffix += ";selected";
1946
+ }
1872
1947
  sSuffix = "[" + this.iIndex + sSuffix + "]";
1873
1948
  }
1874
1949
 
@@ -56,6 +56,28 @@ sap.ui.define([
56
56
  this.sResumeChangeReason = undefined;
57
57
  }
58
58
 
59
+ /**
60
+ * Returns <code>true</code> if this binding or its dependent bindings have changes.
61
+ *
62
+ * Note: This private function is needed in order to hide the additional parameter
63
+ * <code>bIgnoreInactiveCaches</code> from the public API {@link #hasPendingChanges}.
64
+ *
65
+ * @param {boolean} [bIgnoreKeptAlive]
66
+ * Whether to ignore changes which will not be lost by certain APIs, see
67
+ * {@link #hasPendingChanges}
68
+ * @param {boolean} [bIgnoreInactiveCaches]
69
+ * Whether to ignore changes in inactive caches
70
+ * @returns {boolean}
71
+ * <code>true</code> if the binding is resolved and has pending changes
72
+ *
73
+ * @private
74
+ */
75
+ ODataBinding.prototype._hasPendingChanges = function (bIgnoreKeptAlive, bIgnoreInactiveCaches) {
76
+ return this.isResolved()
77
+ && (this.hasPendingChangesForPath("", bIgnoreKeptAlive)
78
+ || this.hasPendingChangesInDependents(bIgnoreKeptAlive, bIgnoreInactiveCaches));
79
+ };
80
+
59
81
  /**
60
82
  * Adjusts the paths of all contexts of this binding by replacing the given transient predicate
61
83
  * with the given predicate. Recursively adjusts all child bindings.
@@ -385,7 +407,9 @@ sap.ui.define([
385
407
  * @private
386
408
  */
387
409
  ODataBinding.prototype.doDeregisterChangeListener = function (sPath, oListener) {
388
- this.oCache.deregisterChangeListener(sPath, oListener);
410
+ if (this.oCache) {
411
+ this.oCache.deregisterChangeListener(sPath, oListener);
412
+ }
389
413
  };
390
414
 
391
415
  /**
@@ -618,9 +642,9 @@ sap.ui.define([
618
642
  *
619
643
  * @param {sap.ui.model.Context|sap.ui.model.odata.v4.Context} [oContext=this.oContext]
620
644
  * A context; if omitted, the binding's context is used
621
- * @returns {SyncPromise} A promise resolving with the resource path or <code>undefined</code>
622
- * for an unresolved binding. If computation of the canonical path fails, the promise is
623
- * rejected.
645
+ * @returns {sap.ui.base.SyncPromise} A promise resolving with the resource path or
646
+ * <code>undefined</code> for an unresolved binding. If computation of the canonical path
647
+ * fails, the promise is rejected.
624
648
  *
625
649
  * @private
626
650
  */
@@ -873,7 +897,11 @@ sap.ui.define([
873
897
  * created entities, or entity deletions which have not been sent successfully to the server.
874
898
  * This function does not take the execution of OData operations
875
899
  * (see {@link sap.ui.model.odata.v4.ODataContextBinding#execute}) into account. Since 1.98.0,
876
- * {@link sap.ui.model.odata.v4.Context#isInactive inactive} contexts are ignored.
900
+ * {@link sap.ui.model.odata.v4.Context#isInactive inactive} contexts are ignored, unless
901
+ * (since 1.100.0) their
902
+ * {@link sap.ui.model.odata.v4.ODataListBinding#event:createActivate activation} has been
903
+ * prevented and {@link sap.ui.model.odata.v4.Context#isInactive} therefore returns
904
+ * <code>1</code>.
877
905
  *
878
906
  * Note: If this binding is relative, its data is cached separately for each parent context
879
907
  * path. This method returns <code>true</code> if there are pending changes for the current
@@ -900,9 +928,7 @@ sap.ui.define([
900
928
  * @since 1.39.0
901
929
  */
902
930
  ODataBinding.prototype.hasPendingChanges = function (bIgnoreKeptAlive) {
903
- return this.isResolved()
904
- && (this.hasPendingChangesForPath("", bIgnoreKeptAlive)
905
- || this.hasPendingChangesInDependents(bIgnoreKeptAlive));
931
+ return this._hasPendingChanges(bIgnoreKeptAlive);
906
932
  };
907
933
 
908
934
  /**
@@ -957,6 +983,8 @@ sap.ui.define([
957
983
  * @param {boolean} [bIgnoreKeptAlive]
958
984
  * Whether to ignore changes which will not be lost by APIs like sort or filter because they
959
985
  * relate to a deleted context or a context which is kept alive
986
+ * @param {boolean} [bIgnoreInactiveCaches]
987
+ * Whether to ignore changes in inactive caches
960
988
  * @returns {boolean}
961
989
  * <code>true</code> if this binding has pending changes
962
990
  *
@@ -1052,7 +1080,7 @@ sap.ui.define([
1052
1080
  * Refreshes the binding. Prompts the model to retrieve data from the server using the given
1053
1081
  * group ID and notifies the control that new data is available.
1054
1082
  *
1055
- * Refresh is supported for bindings which are not relative to a
1083
+ * Refresh is supported for bindings which are not relative to an
1056
1084
  * {@link sap.ui.model.odata.v4.Context}.
1057
1085
  *
1058
1086
  * Note: When calling {@link #refresh} multiple times, the result of the request triggered by
@@ -1301,6 +1329,8 @@ sap.ui.define([
1301
1329
  *
1302
1330
  * @param {sap.ui.base.SyncPromise[]} aPromises
1303
1331
  * List of promises which is extended for each call to {@link #resetChangesInDependents}.
1332
+ * @param {boolean} [bIgnoreInactiveCaches]
1333
+ * Whether to ignore changes in inactive caches
1304
1334
  * @throws {Error}
1305
1335
  * If there is a change of this binding which has been sent to the server and for which there
1306
1336
  * is no response yet.
@@ -74,7 +74,7 @@ sap.ui.define([
74
74
  * @mixes sap.ui.model.odata.v4.ODataParentBinding
75
75
  * @public
76
76
  * @since 1.37.0
77
- * @version 1.110.0
77
+ * @version 1.111.1
78
78
  *
79
79
  * @borrows sap.ui.model.odata.v4.ODataBinding#getGroupId as #getGroupId
80
80
  * @borrows sap.ui.model.odata.v4.ODataBinding#getRootBinding as #getRootBinding
@@ -559,7 +559,7 @@ sap.ui.define([
559
559
  * actions only
560
560
  * @param {function} [fnOnStrictHandlingFailed]
561
561
  * Callback for strict handling; supported for actions only
562
- * @returns {SyncPromise}
562
+ * @returns {sap.ui.base.SyncPromise}
563
563
  * The request promise
564
564
  * @throws {Error} If
565
565
  * <ul>
@@ -916,10 +916,10 @@ sap.ui.define([
916
916
  * value context at all or the existing context as described above is currently part of the
917
917
  * list's collection (that is, has an index).
918
918
  * <br>
919
- * A return value context is a {@link sap.ui.model.odata.v4.Context} which represents a bound
919
+ * A return value context is an {@link sap.ui.model.odata.v4.Context} which represents a bound
920
920
  * operation response. It is created only if the operation is bound and has a single entity
921
921
  * return value from the same entity set as the operation's binding parameter and has a
922
- * parent context which is a {@link sap.ui.model.odata.v4.Context} and points to an entity
922
+ * parent context which is an {@link sap.ui.model.odata.v4.Context} and points to an entity
923
923
  * from an entity set. It is destroyed the next time this operation binding is executed again!
924
924
  * <br>
925
925
  * If a return value context is created, it must be used instead of
@@ -57,7 +57,7 @@ sap.ui.define([
57
57
  * @mixes sap.ui.model.odata.v4.ODataParentBinding
58
58
  * @public
59
59
  * @since 1.37.0
60
- * @version 1.110.0
60
+ * @version 1.111.1
61
61
  * @borrows sap.ui.model.odata.v4.ODataBinding#getGroupId as #getGroupId
62
62
  * @borrows sap.ui.model.odata.v4.ODataBinding#getRootBinding as #getRootBinding
63
63
  * @borrows sap.ui.model.odata.v4.ODataBinding#getUpdateGroupId as #getUpdateGroupId
@@ -302,7 +302,8 @@ sap.ui.define([
302
302
 
303
303
  /**
304
304
  * Applies the given map of parameters to this binding's parameters and triggers the
305
- * creation of a new cache if called with a change reason.
305
+ * creation of a new cache if called with a change reason. Since 1.111.0, the header context is
306
+ * deselected.
306
307
  *
307
308
  * @param {object} mParameters
308
309
  * Map of binding parameters, {@link sap.ui.model.odata.v4.ODataModel#constructor}
@@ -326,8 +327,9 @@ sap.ui.define([
326
327
  throw new Error("Cannot combine $$aggregation and $apply");
327
328
  }
328
329
  if (!sChangeReason) { // called from c'tor or #setAggregation
329
- _AggregationHelper.validateAggregation(mParameters.$$aggregation, this.sPath,
330
- this.oModel.oInterface.fetchMetadata, this.oModel.bAutoExpandSelect);
330
+ _AggregationHelper.validateAggregationAndSetPath(mParameters.$$aggregation,
331
+ this.oModel.bAutoExpandSelect, this.oModel.oInterface.fetchMetadata,
332
+ this.getResolvedPath());
331
333
  }
332
334
  sApply = _AggregationHelper.buildApply(mParameters.$$aggregation).$apply;
333
335
  }
@@ -356,6 +358,7 @@ sap.ui.define([
356
358
  this.fetchCache(this.oContext);
357
359
  this.reset(sChangeReason);
358
360
  if (this.oHeaderContext) {
361
+ this.oHeaderContext.setSelected(false);
359
362
  // Update after the refresh event, otherwise $count is fetched before the request
360
363
  this.oHeaderContext.checkUpdate();
361
364
  }
@@ -973,6 +976,10 @@ sap.ui.define([
973
976
  bReset = false,
974
977
  that = this;
975
978
 
979
+ if (oContext.isDeleted()) {
980
+ return oContext.oDeletePromise; // do not delete twice
981
+ }
982
+
976
983
  this.iDeletedContexts += 1;
977
984
 
978
985
  return oContext.doDelete(oGroupLock, sEditUrl, sPath, oETagEntity, this,
@@ -1712,7 +1719,7 @@ sap.ui.define([
1712
1719
 
1713
1720
  /**
1714
1721
  * Filters the list with the given filters. Since 1.97.0, if filters are unchanged, no request
1715
- * is sent, regardless of pending changes.
1722
+ * is sent, regardless of pending changes. Since 1.111.0, the header context is deselected.
1716
1723
  *
1717
1724
  * If there are pending changes that cannot be ignored, an error is thrown. Use
1718
1725
  * {@link #hasPendingChanges} to check if there are such pending changes. If there are, call
@@ -1807,6 +1814,7 @@ sap.ui.define([
1807
1814
  this.fetchCache(this.oContext);
1808
1815
  this.reset(ChangeReason.Filter);
1809
1816
  if (this.oHeaderContext) {
1817
+ this.oHeaderContext.setSelected(false);
1810
1818
  // Update after the refresh event, otherwise $count is fetched before the request
1811
1819
  this.oHeaderContext.checkUpdate();
1812
1820
  }
@@ -1838,15 +1846,32 @@ sap.ui.define([
1838
1846
  * Returns the current object holding the information needed for data aggregation, see
1839
1847
  * {@link #setAggregation}.
1840
1848
  *
1849
+ * @param {boolean} [bVerbose]
1850
+ * Whether to additionally return the "$"-prefixed values described below which obviously
1851
+ * cannot be given back to the setter (@experimental as of version 1.111.0). They are
1852
+ * retrieved from the pair of "Org.OData.Aggregation.V1.RecursiveHierarchy" and
1853
+ * "com.sap.vocabularies.Hierarchy.v1.RecursiveHierarchy" annotations at this binding's
1854
+ * entity type, identified via the <code>hierarchyQualifier</code> given to
1855
+ * {@link #setAggregation}.
1856
+ * <ul>
1857
+ * <li> "$DistanceFromRootProperty" holds the path to the property which provides the raw
1858
+ * value for "@$ui5.node.level" (minus one) and should be used only to interpret the
1859
+ * response retrieved via {@link #getDownloadUrl}.
1860
+ * <li> "$NodeProperty" holds the path to the property which provides the hierarchy node
1861
+ * value. That property is always $select'ed automatically and can be accessed as usual.
1862
+ * </ul>
1841
1863
  * @returns {object}
1842
1864
  * The current data aggregation object, incl. some default values
1843
1865
  *
1844
1866
  * @public
1845
1867
  * @since 1.109.0
1846
1868
  */
1847
- ODataListBinding.prototype.getAggregation = function () {
1869
+ ODataListBinding.prototype.getAggregation = function (bVerbose) {
1848
1870
  return _Helper.clone(this.mParameters.$$aggregation, function (sKey, vValue) {
1849
- return sKey[0] === "$" ? undefined : vValue;
1871
+ return sKey[0] === "$"
1872
+ && !(bVerbose && ["$DistanceFromRootProperty", "$NodeProperty"].includes(sKey))
1873
+ ? undefined
1874
+ : vValue;
1850
1875
  });
1851
1876
  };
1852
1877
 
@@ -2980,15 +3005,21 @@ sap.ui.define([
2980
3005
  * A removed context is destroyed unless it is
2981
3006
  * {@link sap.ui.model.odata.v4.Context#isKeepAlive kept alive} and still exists on the
2982
3007
  * server.
3008
+ * @param {boolean} [bKeepCacheOnError]
3009
+ * If <code>true</code>, the binding data remains unchanged if the refresh fails
3010
+ * @param {boolean} [bWithMessages]
3011
+ * Whether the "@com.sap.vocabularies.Common.v1.Messages" path is treated specially
2983
3012
  * @returns {sap.ui.base.SyncPromise}
2984
3013
  * A promise which resolves without a defined value when the entity is updated in the cache,
2985
3014
  * or rejects if the refresh failed.
2986
3015
  * @throws {Error}
2987
- * If the given context does not represent a single entity (see {@link #getHeaderContext})
3016
+ * If the given context does not represent a single entity (see {@link #getHeaderContext}), or
3017
+ * if <code>bAllowRemoval && bWithMessages</code> are combined
2988
3018
  *
2989
3019
  * @private
2990
3020
  */
2991
- ODataListBinding.prototype.refreshSingle = function (oContext, oGroupLock, bAllowRemoval) {
3021
+ ODataListBinding.prototype.refreshSingle = function (oContext, oGroupLock, bAllowRemoval,
3022
+ bKeepCacheOnError, bWithMessages) {
2992
3023
  var sContextPath = oContext.getPath(),
2993
3024
  sResourcePathPrefix = sContextPath.slice(1),
2994
3025
  that = this;
@@ -2996,6 +3027,9 @@ sap.ui.define([
2996
3027
  if (oContext === this.oHeaderContext) {
2997
3028
  throw new Error("Unsupported header context: " + oContext);
2998
3029
  }
3030
+ if (bAllowRemoval && bWithMessages) {
3031
+ throw new Error("Unsupported: bAllowRemoval && bWithMessages");
3032
+ }
2999
3033
 
3000
3034
  return this.withCache(function (oCache, sPath, oBinding) {
3001
3035
  var bDataRequested = false,
@@ -3064,7 +3098,7 @@ sap.ui.define([
3064
3098
  ? oCache.refreshSingleWithRemove(oGroupLock, sPath, oContext.getModelIndex(),
3065
3099
  sPredicate, bKeepAlive, fireDataRequested, onRemove)
3066
3100
  : oCache.refreshSingle(oGroupLock, sPath, oContext.getModelIndex(), sPredicate,
3067
- bKeepAlive, fireDataRequested))
3101
+ bKeepAlive, bWithMessages, fireDataRequested))
3068
3102
  .then(function () {
3069
3103
  var aUpdatePromises = [];
3070
3104
 
@@ -3075,7 +3109,7 @@ sap.ui.define([
3075
3109
  if (bAllowRemoval) {
3076
3110
  aUpdatePromises.push(
3077
3111
  oContext.refreshDependentBindings(sResourcePathPrefix,
3078
- oGroupLock.getGroupId()));
3112
+ oGroupLock.getGroupId(), false, bKeepCacheOnError));
3079
3113
  }
3080
3114
  }
3081
3115
 
@@ -3097,7 +3131,7 @@ sap.ui.define([
3097
3131
  // call refreshInternal on all dependent bindings to ensure that all resulting data
3098
3132
  // requests are in the same batch request
3099
3133
  aPromises.push(oContext.refreshDependentBindings(sResourcePathPrefix,
3100
- oGroupLock.getGroupId()));
3134
+ oGroupLock.getGroupId(), false, bKeepCacheOnError));
3101
3135
  }
3102
3136
 
3103
3137
  return SyncPromise.all(aPromises);
@@ -3215,8 +3249,8 @@ sap.ui.define([
3215
3249
  ODataListBinding.prototype.requestDownloadUrl = _Helper.createRequestMethod("fetchDownloadUrl");
3216
3250
 
3217
3251
  /**
3218
- * Requests a {@link sap.ui.model.Filter} object which can be used to filter the list binding by
3219
- * entries with model messages. With the filter callback, you can define if a message is
3252
+ * Requests an {@link sap.ui.model.Filter} object which can be used to filter the list binding
3253
+ * by entries with model messages. With the filter callback, you can define if a message is
3220
3254
  * considered when creating the filter for entries with messages.
3221
3255
  *
3222
3256
  * The resulting filter does not consider application or control filters specified for this list
@@ -3228,7 +3262,7 @@ sap.ui.define([
3228
3262
  * given {@link sap.ui.core.message.Message} is considered. If no callback function is given,
3229
3263
  * all messages are considered.
3230
3264
  * @returns {Promise<sap.ui.model.Filter|null>}
3231
- * A Promise that resolves with a {@link sap.ui.model.Filter} representing the entries with
3265
+ * A Promise that resolves with an {@link sap.ui.model.Filter} representing the entries with
3232
3266
  * messages; it resolves with <code>null</code> if the binding is not resolved or if there is
3233
3267
  * no message for any entry
3234
3268
  *
@@ -3324,7 +3358,7 @@ sap.ui.define([
3324
3358
  }
3325
3359
 
3326
3360
  if (this.oCache && this.oCache.getPendingRequestsPromise()) {
3327
- return this.oCache.getPendingRequestsPromise().then(function () {
3361
+ return SyncPromise.resolve(this.oCache.getPendingRequestsPromise()).then(function () {
3328
3362
  // Note: This is quite early! Transient predicate not yet replaced inside path,
3329
3363
  // #isTransient not yet updated etc. Be careful below!
3330
3364
  return that.requestSideEffects(sGroupId, aPaths, oContext);
@@ -3337,7 +3371,7 @@ sap.ui.define([
3337
3371
  if (aPredicates) {
3338
3372
  aPromises = this.oCache
3339
3373
  ? [this.oCache.requestSideEffects(this.lockGroup(sGroupId), aPaths, aPredicates,
3340
- bSingle)]
3374
+ bSingle, /*bWithMessages*/bSingle)]
3341
3375
  : []; // can happen if invoked via absolute side effect
3342
3376
  this.visitSideEffects(sGroupId, aPaths, bSingle ? oContext : undefined, aPromises);
3343
3377
 
@@ -3347,7 +3381,8 @@ sap.ui.define([
3347
3381
  }
3348
3382
  }
3349
3383
  if (bSingle) {
3350
- return this.refreshSingle(oContext, this.lockGroup(sGroupId), false);
3384
+ return this.refreshSingle(oContext, this.lockGroup(sGroupId), /*bAllowRemoval*/false,
3385
+ /*bKeepCacheOnError*/true, /*bWithMessages*/true);
3351
3386
  }
3352
3387
  if (this.iCurrentEnd === 0) {
3353
3388
  return SyncPromise.resolve();
@@ -3730,8 +3765,9 @@ sap.ui.define([
3730
3765
  if (!this.oHeaderContext) {
3731
3766
  this.oHeaderContext = Context.create(this.oModel, this, sResolvedPath);
3732
3767
  }
3733
- if (this.bHasPathReductionToParent && this.oModel.bAutoExpandSelect
3734
- && !this.mParameters.$$aggregation) {
3768
+ if (this.mParameters.$$aggregation) {
3769
+ _AggregationHelper.setPath(this.mParameters.$$aggregation, sResolvedPath);
3770
+ } else if (this.bHasPathReductionToParent && this.oModel.bAutoExpandSelect) {
3735
3771
  this.sChangeReason = "AddVirtualContext"; // JIRA: CPOUI5ODATAV4-848
3736
3772
  }
3737
3773
  if (oContext.getBinding
@@ -3951,7 +3987,7 @@ sap.ui.define([
3951
3987
  * @param {object} oEntityType The metadata for the entity type
3952
3988
  * @param {sap.ui.model.odata.v4.ODataMetaModel} oMetaModel The meta model
3953
3989
  * @param {string} sMetaPath The meta path
3954
- * @returns {sap.ui.model.Filter} a {@link sap.ui.model.Filter} for the given key predicate
3990
+ * @returns {sap.ui.model.Filter} an {@link sap.ui.model.Filter} for the given key predicate
3955
3991
  *
3956
3992
  * @private
3957
3993
  */
@@ -157,7 +157,7 @@ sap.ui.define([
157
157
  * @hideconstructor
158
158
  * @public
159
159
  * @since 1.37.0
160
- * @version 1.110.0
160
+ * @version 1.111.1
161
161
  */
162
162
  ODataMetaModel = MetaModel.extend("sap.ui.model.odata.v4.ODataMetaModel", {
163
163
  constructor : constructor
@@ -211,7 +211,7 @@ sap.ui.define([
211
211
  * A namespace, for example "foo.bar.", of a schema.
212
212
  * @param {function} fnLog
213
213
  * The log function
214
- * @returns {object|SyncPromise|undefined}
214
+ * @returns {object|sap.ui.base.SyncPromise|undefined}
215
215
  * The schema, or a promise which is resolved without details or rejected with an error, or
216
216
  * <code>undefined</code>.
217
217
  * @throws {Error}
@@ -3016,8 +3016,7 @@ sap.ui.define([
3016
3016
  * @see #getUI5Type
3017
3017
  * @since 1.37.0
3018
3018
  */
3019
- ODataMetaModel.prototype.requestUI5Type
3020
- = _Helper.createRequestMethod("fetchUI5Type");
3019
+ ODataMetaModel.prototype.requestUI5Type = _Helper.createRequestMethod("fetchUI5Type");
3021
3020
 
3022
3021
  /**
3023
3022
  * Request unit customizing based on the code list reference given in the entity container's