@openui5/sap.ui.core 1.110.0 → 1.111.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 (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 +2 -0
  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
@@ -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.0
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.0
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.0
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
@@ -78,6 +78,7 @@ sap.ui.define([
78
78
  groupId : true,
79
79
  groupProperties : true,
80
80
  httpHeaders : true,
81
+ ignoreAnnotationsFromMetadata : true,
81
82
  metadataUrlParams : true,
82
83
  odataVersion : true,
83
84
  operationMode : true,
@@ -132,6 +133,11 @@ sap.ui.define([
132
133
  * since 1.51.0
133
134
  * @param {object} [mParameters.httpHeaders]
134
135
  * Map of HTTP header names to their values, see {@link #changeHttpHeaders}
136
+ * @param {boolean} [mParameters.ignoreAnnotationsFromMetadata]
137
+ * Whether to ignore all annotations from service metadata and "cross-service references";
138
+ * only the value <code>true</code> is allowed. Only annotations from annotation files
139
+ * (see parameter "annotationURI") are loaded. This parameter is not inherited by value
140
+ * list models. @experimental as of version 1.111.0
135
141
  * @param {object} [mParameters.metadataUrlParams]
136
142
  * Additional map of URL parameters used specifically for $metadata requests. Note that
137
143
  * "sap-context-token" applies only to the service's root $metadata, but not to
@@ -221,7 +227,7 @@ sap.ui.define([
221
227
  * @extends sap.ui.model.Model
222
228
  * @public
223
229
  * @since 1.37.0
224
- * @version 1.110.0
230
+ * @version 1.111.0
225
231
  */
226
232
  ODataModel = Model.extend("sap.ui.model.odata.v4.ODataModel",
227
233
  /** @lends sap.ui.model.odata.v4.ODataModel.prototype */{
@@ -328,6 +334,10 @@ sap.ui.define([
328
334
  }
329
335
  this.bSharedRequests = mParameters.sharedRequests === true;
330
336
  this.bIgnoreETag = false;
337
+ if ("ignoreAnnotationsFromMetadata" in mParameters
338
+ && mParameters.ignoreAnnotationsFromMetadata !== true) {
339
+ throw new Error("Value for ignoreAnnotationsFromMetadata must be true");
340
+ }
331
341
 
332
342
  // BEWARE: do not share mHeaders between _MetadataRequestor and _Requestor!
333
343
  this.mHeaders = {"Accept-Language" : sLanguageTag};
@@ -335,7 +345,8 @@ sap.ui.define([
335
345
 
336
346
  mQueryParams = Object.assign({}, mUriParameters, mParameters.metadataUrlParams);
337
347
  this.oMetaModel = new ODataMetaModel(
338
- _MetadataRequestor.create(this.mMetadataHeaders, sODataVersion, mQueryParams),
348
+ _MetadataRequestor.create(this.mMetadataHeaders, sODataVersion,
349
+ mParameters.ignoreAnnotationsFromMetadata, mQueryParams),
339
350
  this.sServiceUrl + "$metadata", mParameters.annotationURI, this,
340
351
  mParameters.supportReferences, mQueryParams["sap-language"]);
341
352
  this.oInterface = {
@@ -717,7 +728,7 @@ sap.ui.define([
717
728
  * parameter (see {@link sap.ui.model.odata.v4.ODataModel#constructor}), paths with navigation
718
729
  * properties can be included and will contribute to the "5.1.2 System Query Option $expand".
719
730
  * @param {boolean} [mParameters.$$canonicalPath]
720
- * Whether a binding relative to a {@link sap.ui.model.odata.v4.Context} uses the canonical
731
+ * Whether a binding relative to an {@link sap.ui.model.odata.v4.Context} uses the canonical
721
732
  * path computed from its context's path for data service requests; only the value
722
733
  * <code>true</code> is allowed.
723
734
  * @param {string} [mParameters.$$groupId]
@@ -863,7 +874,7 @@ sap.ui.define([
863
874
  * An object holding the information needed for data aggregation, see
864
875
  * {@link sap.ui.model.odata.v4.ODataListBinding#setAggregation} for details.
865
876
  * @param {boolean} [mParameters.$$canonicalPath]
866
- * Whether a binding relative to a {@link sap.ui.model.odata.v4.Context} uses the canonical
877
+ * Whether a binding relative to an {@link sap.ui.model.odata.v4.Context} uses the canonical
867
878
  * path computed from its context's path for data service requests; only the value
868
879
  * <code>true</code> is allowed.
869
880
  * @param {boolean} [mParameters.$$getKeepAliveContext]
@@ -1267,6 +1278,17 @@ sap.ui.define([
1267
1278
  }
1268
1279
  };
1269
1280
 
1281
+ /**
1282
+ * Clears the session context represented by the "SAP-ContextId" header.
1283
+ *
1284
+ * @private
1285
+ * @since 1.111.0
1286
+ * @ui5-restricted sap.fe
1287
+ */
1288
+ ODataModel.prototype.clearSessionContext = function () {
1289
+ this.oRequestor.clearSessionContext();
1290
+ };
1291
+
1270
1292
  /**
1271
1293
  * Creates a binding context for the given path. A relative path can only be resolved if a
1272
1294
  * context is provided.
@@ -1309,7 +1331,7 @@ sap.ui.define([
1309
1331
  * The binding context with the resolved path and the model instance
1310
1332
  * @throws {Error}
1311
1333
  * If a relative path is provided without a context or in case of unsupported parameters or
1312
- * if the given context is a {@link sap.ui.model.odata.v4.Context}
1334
+ * if the given context is an {@link sap.ui.model.odata.v4.Context}
1313
1335
  *
1314
1336
  * @public
1315
1337
  * @see sap.ui.model.Model#createBindingContext
@@ -1369,7 +1391,7 @@ sap.ui.define([
1369
1391
  };
1370
1392
 
1371
1393
  /**
1372
- * Creates a {@link sap.ui.core.message.Message} from a given "raw" message object. For a
1394
+ * Creates an {@link sap.ui.core.message.Message} from a given "raw" message object. For a
1373
1395
  * bound message, targets are resolved if they are not yet resolved. A message is called a bound
1374
1396
  * message if is has a target, even if it is empty.
1375
1397
  *
@@ -2509,8 +2531,10 @@ sap.ui.define([
2509
2531
  /**
2510
2532
  * Resets all property changes, created entities, and entity deletions associated with the given
2511
2533
  * group ID which have not been successfully submitted via {@link #submitBatch}. Resets also
2512
- * invalid user input for the same group ID. This function does not reset the execution of OData
2513
- * operations (see {@link sap.ui.model.odata.v4.ODataContextBinding#execute}).
2534
+ * invalid user input for the same group ID and (since 1.111.0) inactive contexts which had
2535
+ * their activation prevented (see {@link sap.ui.model.odata.v4.Context#isInactive}). This
2536
+ * function does not reset the execution of OData operations
2537
+ * (see {@link sap.ui.model.odata.v4.ODataContextBinding#execute}).
2514
2538
  *
2515
2539
  * @param {string} [sGroupId]
2516
2540
  * A valid group ID as specified in {@link sap.ui.model.odata.v4.ODataModel}. If it is
@@ -2533,6 +2557,7 @@ sap.ui.define([
2533
2557
 
2534
2558
  if (this.isAutoGroup(sGroupId)) {
2535
2559
  this.oRequestor.cancelChanges("$parked." + sGroupId);
2560
+ this.oRequestor.cancelChanges("$inactive." + sGroupId, true);
2536
2561
  }
2537
2562
  this.oRequestor.cancelChanges(sGroupId);
2538
2563
 
@@ -317,7 +317,8 @@ sap.ui.define([
317
317
  };
318
318
 
319
319
  /**
320
- * Changes this binding's parameters and refreshes the binding.
320
+ * Changes this binding's parameters and refreshes the binding. Since 1.111.0, a list binding's
321
+ * header context is deselected.
321
322
  *
322
323
  * If there are pending changes that cannot be ignored, an error is thrown. Use
323
324
  * {@link #hasPendingChanges} to check if there are such pending changes. If there are, call
@@ -1055,7 +1056,8 @@ sap.ui.define([
1055
1056
  * @override
1056
1057
  * @see sap.ui.model.odata.v4.ODataBinding#hasPendingChangesInDependents
1057
1058
  */
1058
- ODataParentBinding.prototype.hasPendingChangesInDependents = function (bIgnoreKeptAlive0) {
1059
+ ODataParentBinding.prototype.hasPendingChangesInDependents = function (bIgnoreKeptAlive0,
1060
+ bIgnoreInactiveCaches) {
1059
1061
  return this.getDependentBindings().some(function (oDependent) {
1060
1062
  var oCache = oDependent.oCache,
1061
1063
  bHasPendingChanges,
@@ -1078,7 +1080,7 @@ sap.ui.define([
1078
1080
  } else if (oDependent.hasPendingChangesForPath("")) {
1079
1081
  return true;
1080
1082
  }
1081
- if (oDependent.mCacheByResourcePath) {
1083
+ if (oDependent.mCacheByResourcePath && !bIgnoreInactiveCaches) {
1082
1084
  bHasPendingChanges = Object.keys(oDependent.mCacheByResourcePath)
1083
1085
  .some(function (sPath) {
1084
1086
  var oCacheForPath = oDependent.mCacheByResourcePath[sPath];
@@ -1090,8 +1092,8 @@ sap.ui.define([
1090
1092
  return true;
1091
1093
  }
1092
1094
  }
1093
- // Ask dependents, they might have no cache, but pending changes in mCacheByResourcePath
1094
- return oDependent.hasPendingChangesInDependents(bIgnoreKeptAlive);
1095
+ return oDependent.hasPendingChangesInDependents(bIgnoreKeptAlive,
1096
+ bIgnoreInactiveCaches);
1095
1097
  })
1096
1098
  || this.oModel.withUnresolvedBindings("hasPendingChangesInCaches",
1097
1099
  this.getResolvedPath().slice(1));
@@ -1215,7 +1217,8 @@ sap.ui.define([
1215
1217
  * @override
1216
1218
  * @see sap.ui.model.odata.v4.ODataBinding#resetChangesInDependents
1217
1219
  */
1218
- ODataParentBinding.prototype.resetChangesInDependents = function (aPromises) {
1220
+ ODataParentBinding.prototype.resetChangesInDependents = function (aPromises,
1221
+ bIgnoreInactiveCaches) {
1219
1222
  this.getDependentBindings().forEach(function (oDependent) {
1220
1223
  aPromises.push(oDependent.oCachePromise.then(function (oCache) {
1221
1224
  if (oCache) {
@@ -1225,14 +1228,14 @@ sap.ui.define([
1225
1228
  }).unwrap());
1226
1229
 
1227
1230
  // mCacheByResourcePath may have changes nevertheless
1228
- if (oDependent.mCacheByResourcePath) {
1231
+ if (oDependent.mCacheByResourcePath && !bIgnoreInactiveCaches) {
1229
1232
  Object.keys(oDependent.mCacheByResourcePath).forEach(function (sPath) {
1230
1233
  oDependent.mCacheByResourcePath[sPath].resetChangesForPath("");
1231
1234
  });
1232
1235
  }
1233
1236
  // Reset dependents, they might have no cache, but pending changes in
1234
1237
  // mCacheByResourcePath
1235
- oDependent.resetChangesInDependents(aPromises);
1238
+ oDependent.resetChangesInDependents(aPromises, bIgnoreInactiveCaches);
1236
1239
  });
1237
1240
  };
1238
1241
 
@@ -1280,7 +1283,7 @@ sap.ui.define([
1280
1283
  * @param {boolean} bAsPrerenderingTask
1281
1284
  * Whether resume is done as a prerendering task
1282
1285
  * @throws {Error}
1283
- * If this binding is relative to a {@link sap.ui.model.odata.v4.Context} or if it is an
1286
+ * If this binding is relative to an {@link sap.ui.model.odata.v4.Context} or if it is an
1284
1287
  * operation binding or if it is not suspended
1285
1288
  *
1286
1289
  * @private
@@ -1328,7 +1331,7 @@ sap.ui.define([
1328
1331
  * @throws {Error}
1329
1332
  * If this binding
1330
1333
  * <ul>
1331
- * <li> is relative to a {@link sap.ui.model.odata.v4.Context},
1334
+ * <li> is relative to an {@link sap.ui.model.odata.v4.Context},
1332
1335
  * <li> is an operation binding,
1333
1336
  * <li> has {@link sap.ui.model.Binding#isSuspended} set to <code>false</code>,
1334
1337
  * <li> is not a root binding. Use {@link #getRootBinding} to determine the root binding.
@@ -1353,7 +1356,7 @@ sap.ui.define([
1353
1356
  *
1354
1357
  * @returns {Promise} A promise which is resolved when the binding is resumed.
1355
1358
  * @throws {Error}
1356
- * If this binding is relative to a {@link sap.ui.model.odata.v4.Context} or if it is an
1359
+ * If this binding is relative to an {@link sap.ui.model.odata.v4.Context} or if it is an
1357
1360
  * operation binding or if it is not suspended
1358
1361
  *
1359
1362
  * @protected
@@ -1394,7 +1397,7 @@ sap.ui.define([
1394
1397
  * @throws {Error}
1395
1398
  * If this binding
1396
1399
  * <ul>
1397
- * <li> is relative to a {@link sap.ui.model.odata.v4.Context},
1400
+ * <li> is relative to an {@link sap.ui.model.odata.v4.Context},
1398
1401
  * <li> is an operation binding,
1399
1402
  * <li> has {@link sap.ui.model.Binding#isSuspended} set to <code>true</code>,
1400
1403
  * <li> has pending changes that cannot be ignored,
@@ -42,7 +42,7 @@ sap.ui.define([
42
42
  * @mixes sap.ui.model.odata.v4.ODataBinding
43
43
  * @public
44
44
  * @since 1.37.0
45
- * @version 1.110.0
45
+ * @version 1.111.0
46
46
  * @borrows sap.ui.model.odata.v4.ODataBinding#getGroupId as #getGroupId
47
47
  * @borrows sap.ui.model.odata.v4.ODataBinding#getRootBinding as #getRootBinding
48
48
  * @borrows sap.ui.model.odata.v4.ODataBinding#getUpdateGroupId as #getUpdateGroupId
@@ -738,7 +738,7 @@ sap.ui.define([
738
738
  * <li> the new value is not primitive.
739
739
  * <li> no value has been read before and the binding does not have the parameter
740
740
  * <code>$$noPatch</code>.
741
- * <li> the binding is not relative to a {@link sap.ui.model.odata.v4.Context}.
741
+ * <li> the binding is not relative to an {@link sap.ui.model.odata.v4.Context}.
742
742
  * <li> the binding has the parameter <code>$$noPatch</code> and a group ID has been given.
743
743
  * </ul>
744
744
  *