@openui5/sap.ui.core 1.133.0 → 1.134.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 (285) hide show
  1. package/.reuse/dep5 +0 -7
  2. package/THIRDPARTY.txt +1 -22
  3. package/package.json +1 -1
  4. package/src/jquery.sap.global.js +1 -1
  5. package/src/jquery.sap.properties.js +1 -1
  6. package/src/jquery.sap.resources.js +1 -1
  7. package/src/jquery.sap.script.js +1 -1
  8. package/src/jquery.sap.storage.js +3 -3
  9. package/src/sap/base/Event.js +1 -1
  10. package/src/sap/base/Eventing.js +1 -1
  11. package/src/sap/base/config.js +1 -1
  12. package/src/sap/base/i18n/LanguageTag.js +1 -1
  13. package/src/sap/base/i18n/date/TimezoneUtils.js +1 -1
  14. package/src/sap/base/util/LoaderExtensions.js +2 -8
  15. package/src/sap/base/util/mixedFetch.js +0 -1
  16. package/src/sap/base/util/restricted/_CancelablePromise.js +1 -1
  17. package/src/sap/base/util/restricted/_castArray.js +1 -1
  18. package/src/sap/base/util/restricted/_compact.js +1 -1
  19. package/src/sap/base/util/restricted/_curry.js +1 -1
  20. package/src/sap/base/util/restricted/_debounce.js +1 -1
  21. package/src/sap/base/util/restricted/_difference.js +1 -1
  22. package/src/sap/base/util/restricted/_differenceBy.js +1 -1
  23. package/src/sap/base/util/restricted/_differenceWith.js +1 -1
  24. package/src/sap/base/util/restricted/_flatMap.js +1 -1
  25. package/src/sap/base/util/restricted/_flatMapDeep.js +1 -1
  26. package/src/sap/base/util/restricted/_flatMapDepth.js +1 -1
  27. package/src/sap/base/util/restricted/_flatten.js +1 -1
  28. package/src/sap/base/util/restricted/_flattenDeep.js +1 -1
  29. package/src/sap/base/util/restricted/_flattenDepth.js +1 -1
  30. package/src/sap/base/util/restricted/_intersection.js +1 -1
  31. package/src/sap/base/util/restricted/_intersectionBy.js +1 -1
  32. package/src/sap/base/util/restricted/_intersectionWith.js +1 -1
  33. package/src/sap/base/util/restricted/_isEqual.js +1 -1
  34. package/src/sap/base/util/restricted/_isEqualWith.js +1 -1
  35. package/src/sap/base/util/restricted/_isNil.js +1 -1
  36. package/src/sap/base/util/restricted/_max.js +1 -1
  37. package/src/sap/base/util/restricted/_merge.js +1 -1
  38. package/src/sap/base/util/restricted/_mergeWith.js +1 -1
  39. package/src/sap/base/util/restricted/_min.js +1 -1
  40. package/src/sap/base/util/restricted/_omit.js +1 -1
  41. package/src/sap/base/util/restricted/_pick.js +1 -1
  42. package/src/sap/base/util/restricted/_pickBy.js +1 -1
  43. package/src/sap/base/util/restricted/_throttle.js +1 -1
  44. package/src/sap/base/util/restricted/_toArray.js +1 -1
  45. package/src/sap/base/util/restricted/_union.js +1 -1
  46. package/src/sap/base/util/restricted/_unionBy.js +1 -1
  47. package/src/sap/base/util/restricted/_unionWith.js +1 -1
  48. package/src/sap/base/util/restricted/_uniq.js +1 -1
  49. package/src/sap/base/util/restricted/_uniqBy.js +1 -1
  50. package/src/sap/base/util/restricted/_uniqWith.js +1 -1
  51. package/src/sap/base/util/restricted/_without.js +1 -1
  52. package/src/sap/base/util/restricted/_xor.js +1 -1
  53. package/src/sap/base/util/restricted/_xorBy.js +1 -1
  54. package/src/sap/base/util/restricted/_xorWith.js +1 -1
  55. package/src/sap/base/util/restricted/_zipObject.js +1 -1
  56. package/src/sap/base/util/restricted/_zipObjectDeep.js +1 -1
  57. package/src/sap/base/util/syncFetch.js +0 -1
  58. package/src/sap/ui/Device.js +3 -3
  59. package/src/sap/ui/Global.js +3 -3
  60. package/src/sap/ui/base/Event.js +1 -1
  61. package/src/sap/ui/base/EventProvider.js +1 -1
  62. package/src/sap/ui/base/Interface.js +1 -1
  63. package/src/sap/ui/base/ManagedObject.js +14 -11
  64. package/src/sap/ui/base/ManagedObjectMetadata.js +1 -1
  65. package/src/sap/ui/base/Metadata.js +1 -1
  66. package/src/sap/ui/base/Object.js +1 -1
  67. package/src/sap/ui/base/ObjectPool.js +1 -1
  68. package/src/sap/ui/base/SyncPromise.js +17 -1
  69. package/src/sap/ui/core/.library +1 -6
  70. package/src/sap/ui/core/AppCacheBuster.js +4 -9
  71. package/src/sap/ui/core/BusyIndicator.js +1 -1
  72. package/src/sap/ui/core/Component.js +1 -1
  73. package/src/sap/ui/core/ComponentContainer.js +1 -1
  74. package/src/sap/ui/core/ComponentMetadata.js +1 -1
  75. package/src/sap/ui/core/ComponentSupport.js +1 -1
  76. package/src/sap/ui/core/Configuration.js +1 -1
  77. package/src/sap/ui/core/Control.js +1 -1
  78. package/src/sap/ui/core/Core.js +2 -2
  79. package/src/sap/ui/core/CustomData.js +1 -1
  80. package/src/sap/ui/core/DeclarativeSupport.js +1 -1
  81. package/src/sap/ui/core/Element.js +1 -1
  82. package/src/sap/ui/core/ElementMetadata.js +1 -1
  83. package/src/sap/ui/core/EnabledPropagator.js +1 -1
  84. package/src/sap/ui/core/EventBus.js +1 -1
  85. package/src/sap/ui/core/Fragment.js +1 -1
  86. package/src/sap/ui/core/HTML.js +1 -1
  87. package/src/sap/ui/core/History.js +1 -1
  88. package/src/sap/ui/core/Icon.js +1 -1
  89. package/src/sap/ui/core/IconPool.js +20 -3
  90. package/src/sap/ui/core/IndicationColorSupport.js +1 -1
  91. package/src/sap/ui/core/IntervalTrigger.js +1 -1
  92. package/src/sap/ui/core/InvisibleMessage.js +1 -1
  93. package/src/sap/ui/core/InvisibleRenderer.js +1 -1
  94. package/src/sap/ui/core/InvisibleText.js +1 -1
  95. package/src/sap/ui/core/Item.js +1 -1
  96. package/src/sap/ui/core/LabelEnablement.js +1 -1
  97. package/src/sap/ui/core/LayoutData.js +1 -1
  98. package/src/sap/ui/core/ListItem.js +1 -1
  99. package/src/sap/ui/core/LocalBusyIndicator.js +1 -1
  100. package/src/sap/ui/core/Locale.js +1 -1
  101. package/src/sap/ui/core/LocaleData.js +6 -1
  102. package/src/sap/ui/core/Manifest.js +1 -1
  103. package/src/sap/ui/core/Message.js +1 -1
  104. package/src/sap/ui/core/RenderManager.js +1 -1
  105. package/src/sap/ui/core/Renderer.js +1 -1
  106. package/src/sap/ui/core/ResizeHandler.js +1 -1
  107. package/src/sap/ui/core/ScrollBar.js +1 -1
  108. package/src/sap/ui/core/SeparatorItem.js +1 -1
  109. package/src/sap/ui/core/Title.js +1 -1
  110. package/src/sap/ui/core/TooltipBase.js +1 -1
  111. package/src/sap/ui/core/UIArea.js +1 -1
  112. package/src/sap/ui/core/UIComponent.js +1 -1
  113. package/src/sap/ui/core/UIComponentMetadata.js +1 -1
  114. package/src/sap/ui/core/ValueStateSupport.js +1 -1
  115. package/src/sap/ui/core/VariantLayoutData.js +1 -1
  116. package/src/sap/ui/core/XMLComposite.js +1 -1
  117. package/src/sap/ui/core/XMLCompositeMetadata.js +1 -1
  118. package/src/sap/ui/core/date/UI5Date.js +1 -1
  119. package/src/sap/ui/core/delegate/ItemNavigation.js +1 -1
  120. package/src/sap/ui/core/delegate/ScrollEnablement.js +1 -1
  121. package/src/sap/ui/core/dnd/DragAndDrop.js +14 -7
  122. package/src/sap/ui/core/dnd/DragDropBase.js +1 -1
  123. package/src/sap/ui/core/dnd/DragDropInfo.js +1 -1
  124. package/src/sap/ui/core/dnd/DragInfo.js +1 -1
  125. package/src/sap/ui/core/dnd/DropInfo.js +1 -1
  126. package/src/sap/ui/core/fieldhelp/FieldHelp.js +186 -84
  127. package/src/sap/ui/core/fieldhelp/FieldHelpUtil.js +2 -0
  128. package/src/sap/ui/core/format/FormatUtils.js +1 -1
  129. package/src/sap/ui/core/format/NumberFormat.js +10 -11
  130. package/src/sap/ui/core/format/TimezoneUtil.js +1 -1
  131. package/src/sap/ui/core/getCompatibilityVersion.js +1 -1
  132. package/src/sap/ui/core/hyphenation/Hyphenation.js +1 -1
  133. package/src/sap/ui/core/library.js +32 -3
  134. package/src/sap/ui/core/message/ControlMessageProcessor.js +1 -1
  135. package/src/sap/ui/core/message/Message.js +1 -1
  136. package/src/sap/ui/core/message/MessageManager.js +1 -1
  137. package/src/sap/ui/core/message/MessageParser.js +1 -1
  138. package/src/sap/ui/core/message/MessageProcessor.js +1 -1
  139. package/src/sap/ui/core/messagebundle_ko.properties +1 -1
  140. package/src/sap/ui/core/mvc/HTMLView.js +1 -1
  141. package/src/sap/ui/core/mvc/JSONView.js +1 -1
  142. package/src/sap/ui/core/mvc/JSView.js +1 -1
  143. package/src/sap/ui/core/mvc/TemplateView.js +1 -1
  144. package/src/sap/ui/core/mvc/View.js +1 -1
  145. package/src/sap/ui/core/mvc/XMLView.js +1 -1
  146. package/src/sap/ui/core/plugin/DeclarativeSupport.js +1 -1
  147. package/src/sap/ui/core/plugin/LessSupport.js +1 -1
  148. package/src/sap/ui/core/plugin/TemplatingSupport.js +1 -1
  149. package/src/sap/ui/core/postmessage/Bus.js +1 -1
  150. package/src/sap/ui/core/postmessage/confirmationDialog.js +1 -1
  151. package/src/sap/ui/core/search/OpenSearchProvider.js +1 -1
  152. package/src/sap/ui/core/search/SearchProvider.js +1 -1
  153. package/src/sap/ui/core/service/Service.js +1 -1
  154. package/src/sap/ui/core/service/ServiceFactory.js +1 -1
  155. package/src/sap/ui/core/service/ServiceFactoryRegistry.js +1 -1
  156. package/src/sap/ui/core/support/Plugin.js +1 -1
  157. package/src/sap/ui/core/support/Support.js +1 -1
  158. package/src/sap/ui/core/support/plugins/ControlTree.js +1 -1
  159. package/src/sap/ui/core/support/plugins/Interaction.js +1 -1
  160. package/src/sap/ui/core/support/plugins/LocalStorage.js +1 -1
  161. package/src/sap/ui/core/support/plugins/Performance.js +1 -1
  162. package/src/sap/ui/core/support/plugins/Selector.js +1 -1
  163. package/src/sap/ui/core/support/plugins/TechInfo.js +1 -1
  164. package/src/sap/ui/core/support/plugins/Trace.js +1 -1
  165. package/src/sap/ui/core/support/plugins/ViewInfo.js +1 -1
  166. package/src/sap/ui/core/theming/Parameters.js +1 -6
  167. package/src/sap/ui/core/tmpl/DOMAttribute.js +1 -1
  168. package/src/sap/ui/core/tmpl/DOMElement.js +1 -1
  169. package/src/sap/ui/core/tmpl/HandlebarsTemplate.js +1 -1
  170. package/src/sap/ui/core/tmpl/Template.js +1 -1
  171. package/src/sap/ui/core/tmpl/TemplateControl.js +1 -1
  172. package/src/sap/ui/core/util/AsyncHintsHelper.js +1 -1
  173. package/src/sap/ui/core/util/Export.js +1 -1
  174. package/src/sap/ui/core/util/ExportCell.js +1 -1
  175. package/src/sap/ui/core/util/ExportColumn.js +1 -1
  176. package/src/sap/ui/core/util/ExportRow.js +1 -1
  177. package/src/sap/ui/core/util/ExportType.js +1 -1
  178. package/src/sap/ui/core/util/ExportTypeCSV.js +1 -1
  179. package/src/sap/ui/core/util/File.js +1 -1
  180. package/src/sap/ui/core/util/LibraryInfo.js +1 -1
  181. package/src/sap/ui/core/util/MockServer.js +1 -1
  182. package/src/sap/ui/core/util/PasteHelper.js +1 -1
  183. package/src/sap/ui/core/util/serializer/HTMLViewSerializer.js +1 -1
  184. package/src/sap/ui/core/util/serializer/Serializer.js +1 -1
  185. package/src/sap/ui/core/util/serializer/ViewSerializer.js +1 -1
  186. package/src/sap/ui/core/util/serializer/XMLViewSerializer.js +1 -1
  187. package/src/sap/ui/core/util/serializer/delegate/Delegate.js +1 -1
  188. package/src/sap/ui/core/util/serializer/delegate/HTML.js +1 -1
  189. package/src/sap/ui/core/util/serializer/delegate/XML.js +1 -1
  190. package/src/sap/ui/core/webc/WebComponent.js +1 -1
  191. package/src/sap/ui/core/webc/WebComponentMetadata.js +1 -1
  192. package/src/sap/ui/core/ws/ReadyState.js +1 -1
  193. package/src/sap/ui/core/ws/SapPcpWebSocket.js +1 -1
  194. package/src/sap/ui/core/ws/WebSocket.js +1 -1
  195. package/src/sap/ui/debug/ControlTree.js +1 -1
  196. package/src/sap/ui/debug/DebugEnv.js +1 -1
  197. package/src/sap/ui/debug/PropertyList.js +1 -1
  198. package/src/sap/ui/model/ClientModel.js +1 -1
  199. package/src/sap/ui/model/ClientTreeBinding.js +5 -1
  200. package/src/sap/ui/model/CompositeDataState.js +1 -1
  201. package/src/sap/ui/model/CompositeType.js +1 -1
  202. package/src/sap/ui/model/DataState.js +1 -1
  203. package/src/sap/ui/model/MetaModel.js +1 -1
  204. package/src/sap/ui/model/Model.js +1 -1
  205. package/src/sap/ui/model/SelectionModel.js +1 -1
  206. package/src/sap/ui/model/SimpleType.js +1 -1
  207. package/src/sap/ui/model/TreeAutoExpandMode.js +1 -1
  208. package/src/sap/ui/model/Type.js +1 -1
  209. package/src/sap/ui/model/analytics/AnalyticalBinding.js +1 -1
  210. package/src/sap/ui/model/analytics/AnalyticalTreeBindingAdapter.js +51 -13
  211. package/src/sap/ui/model/json/JSONModel.js +1 -1
  212. package/src/sap/ui/model/message/MessageModel.js +1 -1
  213. package/src/sap/ui/model/odata/ODataAnnotations.js +1 -1
  214. package/src/sap/ui/model/odata/ODataMessageParser.js +1 -1
  215. package/src/sap/ui/model/odata/ODataMetaModel.js +46 -14
  216. package/src/sap/ui/model/odata/ODataMetadata.js +2 -2
  217. package/src/sap/ui/model/odata/ODataModel.js +2 -2
  218. package/src/sap/ui/model/odata/type/Boolean.js +1 -1
  219. package/src/sap/ui/model/odata/type/Byte.js +1 -1
  220. package/src/sap/ui/model/odata/type/Currency.js +1 -1
  221. package/src/sap/ui/model/odata/type/Date.js +1 -1
  222. package/src/sap/ui/model/odata/type/DateTime.js +1 -1
  223. package/src/sap/ui/model/odata/type/DateTimeBase.js +1 -1
  224. package/src/sap/ui/model/odata/type/DateTimeOffset.js +1 -1
  225. package/src/sap/ui/model/odata/type/DateTimeWithTimezone.js +1 -1
  226. package/src/sap/ui/model/odata/type/Decimal.js +1 -1
  227. package/src/sap/ui/model/odata/type/Double.js +1 -1
  228. package/src/sap/ui/model/odata/type/Guid.js +1 -1
  229. package/src/sap/ui/model/odata/type/Int.js +1 -1
  230. package/src/sap/ui/model/odata/type/Int16.js +1 -1
  231. package/src/sap/ui/model/odata/type/Int32.js +1 -1
  232. package/src/sap/ui/model/odata/type/Int64.js +1 -1
  233. package/src/sap/ui/model/odata/type/ODataType.js +1 -1
  234. package/src/sap/ui/model/odata/type/Raw.js +1 -1
  235. package/src/sap/ui/model/odata/type/SByte.js +1 -1
  236. package/src/sap/ui/model/odata/type/Single.js +1 -1
  237. package/src/sap/ui/model/odata/type/Stream.js +1 -1
  238. package/src/sap/ui/model/odata/type/String.js +1 -1
  239. package/src/sap/ui/model/odata/type/Time.js +1 -1
  240. package/src/sap/ui/model/odata/type/TimeOfDay.js +1 -1
  241. package/src/sap/ui/model/odata/type/Unit.js +1 -1
  242. package/src/sap/ui/model/odata/v2/Context.js +1 -1
  243. package/src/sap/ui/model/odata/v2/ODataAnnotations.js +4 -3
  244. package/src/sap/ui/model/odata/v2/ODataListBinding.js +2 -2
  245. package/src/sap/ui/model/odata/v2/ODataModel.js +26 -17
  246. package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +1 -1
  247. package/src/sap/ui/model/odata/v4/Context.js +5 -8
  248. package/src/sap/ui/model/odata/v4/ODataBinding.js +7 -6
  249. package/src/sap/ui/model/odata/v4/ODataContextBinding.js +3 -4
  250. package/src/sap/ui/model/odata/v4/ODataListBinding.js +116 -44
  251. package/src/sap/ui/model/odata/v4/ODataMetaModel.js +3 -3
  252. package/src/sap/ui/model/odata/v4/ODataModel.js +52 -31
  253. package/src/sap/ui/model/odata/v4/ODataParentBinding.js +4 -3
  254. package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +3 -4
  255. package/src/sap/ui/model/odata/v4/lib/_AggregationCache.js +25 -1
  256. package/src/sap/ui/model/odata/v4/lib/_AggregationHelper.js +9 -9
  257. package/src/sap/ui/model/odata/v4/lib/_Cache.js +84 -11
  258. package/src/sap/ui/model/odata/v4/lib/_Requestor.js +18 -1
  259. package/src/sap/ui/model/resource/ResourceModel.js +1 -1
  260. package/src/sap/ui/model/type/Boolean.js +1 -1
  261. package/src/sap/ui/model/type/Currency.js +1 -1
  262. package/src/sap/ui/model/type/Date.js +1 -1
  263. package/src/sap/ui/model/type/DateInterval.js +1 -1
  264. package/src/sap/ui/model/type/DateTime.js +1 -1
  265. package/src/sap/ui/model/type/DateTimeInterval.js +1 -1
  266. package/src/sap/ui/model/type/FileSize.js +1 -1
  267. package/src/sap/ui/model/type/Float.js +1 -1
  268. package/src/sap/ui/model/type/Integer.js +1 -1
  269. package/src/sap/ui/model/type/String.js +1 -1
  270. package/src/sap/ui/model/type/Time.js +1 -1
  271. package/src/sap/ui/model/type/TimeInterval.js +1 -1
  272. package/src/sap/ui/model/type/Unit.js +1 -1
  273. package/src/sap/ui/model/xml/XMLModel.js +1 -1
  274. package/src/sap/ui/qunit/utils/ControlIterator.js +1 -1
  275. package/src/sap/ui/qunit/utils/MemoryLeakCheck.js +1 -1
  276. package/src/sap/ui/test/BranchTracking.js +1 -1
  277. package/src/sap/ui/test/TestUtils.js +82 -14
  278. package/src/sap/ui/test/actions/EnterText.js +2 -20
  279. package/src/sap/ui/test/generic/TestBase.js +1 -1
  280. package/src/sap/ui/test/starter/_setupAndStart.js +11 -2
  281. package/src/sap/ui/test/starter/_utils.js +0 -1
  282. package/src/sap/ui/util/Storage.js +1 -1
  283. package/src/ui5loader.js +4 -1
  284. package/test/sap/ui/qunit/TestRunner.js +4 -1
  285. package/LICENSES/LicenseRef-tzdata-PublicDomain.txt +0 -5
@@ -93,7 +93,7 @@ sap.ui.define([
93
93
  serviceUrl : true,
94
94
  sharedRequests : true,
95
95
  supportReferences : true,
96
- /** @deprecated As of Version 1.110.0 */
96
+ /** @deprecated As of version 1.110.0 */
97
97
  synchronizationMode : true,
98
98
  updateGroupId : true,
99
99
  withCredentials : true
@@ -240,7 +240,7 @@ sap.ui.define([
240
240
  * @extends sap.ui.model.Model
241
241
  * @public
242
242
  * @since 1.37.0
243
- * @version 1.133.0
243
+ * @version 1.134.0
244
244
  */
245
245
  ODataModel = Model.extend("sap.ui.model.odata.v4.ODataModel",
246
246
  /** @lends sap.ui.model.odata.v4.ODataModel.prototype */{
@@ -278,7 +278,7 @@ sap.ui.define([
278
278
  // do not pass any parameters to Model
279
279
  Model.call(this);
280
280
 
281
- /** @deprecated As of Version 1.110.0 */
281
+ /** @deprecated As of version 1.110.0 */
282
282
  if ("synchronizationMode" in mParameters && mParameters.synchronizationMode !== "None") {
283
283
  throw new Error("Synchronization mode must be 'None'");
284
284
  }
@@ -774,8 +774,8 @@ sap.ui.define([
774
774
  * @param {string|string[]} [mParameters.$select]
775
775
  * A comma separated list or an array of items which determine the value for the
776
776
  * "5.1.3 System Query Option $select". Since 1.75.0, when using the "autoExpandSelect" model
777
- * parameter (see {@link sap.ui.model.odata.v4.ODataModel#constructor}), paths with navigation
778
- * properties can be included and will contribute to the "5.1.2 System Query Option $expand".
777
+ * parameter (see {@link #constructor}), paths with navigation properties can be included and
778
+ * will contribute to the "5.1.2 System Query Option $expand".
779
779
  * @param {boolean} [mParameters.$$canonicalPath]
780
780
  * Whether a binding relative to an {@link sap.ui.model.odata.v4.Context} uses the canonical
781
781
  * path computed from its context's path for data service requests; only the value
@@ -783,7 +783,7 @@ sap.ui.define([
783
783
  * @param {string} [mParameters.$$groupId]
784
784
  * The group ID to be used for <b>read</b> requests initiated by this binding; if not
785
785
  * specified, either the parent binding's group ID (if the binding is relative) or the
786
- * model's group ID is used, see {@link sap.ui.model.odata.v4.ODataModel#constructor}.
786
+ * model's group ID is used, see {@link #constructor}.
787
787
  * Valid values are <code>undefined</code>, '$auto', '$auto.*', '$direct' or application group
788
788
  * IDs as specified in {@link sap.ui.model.odata.v4.ODataModel}.
789
789
  * @param {boolean} [mParameters.$$inheritExpandSelect]
@@ -802,8 +802,7 @@ sap.ui.define([
802
802
  * @param {string} [mParameters.$$updateGroupId]
803
803
  * The group ID to be used for <b>update</b> requests initiated by this binding;
804
804
  * if not specified, either the parent binding's update group ID (if the binding is relative)
805
- * or the model's update group ID is used, see
806
- * {@link sap.ui.model.odata.v4.ODataModel#constructor}.
805
+ * or the model's update group ID is used, see {@link #constructor}.
807
806
  * For valid values, see parameter "$$groupId".
808
807
  * @returns {sap.ui.model.odata.v4.ODataContextBinding}
809
808
  * The context binding
@@ -917,8 +916,8 @@ sap.ui.define([
917
916
  * @param {string|string[]} [mParameters.$select]
918
917
  * A comma separated list or an array of items which determine the value for the
919
918
  * "5.1.3 System Query Option $select". Since 1.75.0, when using the "autoExpandSelect" model
920
- * parameter (see {@link sap.ui.model.odata.v4.ODataModel#constructor}), paths with navigation
921
- * properties can be included and will contribute to the "5.1.2 System Query Option $expand".
919
+ * parameter (see {@link #constructor}), paths with navigation properties can be included and
920
+ * will contribute to the "5.1.2 System Query Option $expand".
922
921
  * @param {object} [mParameters.$$aggregation]
923
922
  * An object holding the information needed for data aggregation, see
924
923
  * {@link sap.ui.model.odata.v4.ODataListBinding#setAggregation} for details.
@@ -940,7 +939,7 @@ sap.ui.define([
940
939
  * @param {string} [mParameters.$$groupId]
941
940
  * The group ID to be used for <b>read</b> requests initiated by this binding; if not
942
941
  * specified, either the parent binding's group ID (if the binding is relative) or the
943
- * model's group ID is used, see {@link sap.ui.model.odata.v4.ODataModel#constructor}.
942
+ * model's group ID is used, see {@link #constructor}.
944
943
  * Valid values are <code>undefined</code>, '$auto', '$auto.*', '$direct' or application group
945
944
  * IDs as specified in {@link sap.ui.model.odata.v4.ODataModel}.
946
945
  * @param {sap.ui.model.odata.OperationMode} [mParameters.$$operationMode]
@@ -964,13 +963,13 @@ sap.ui.define([
964
963
  * the main list becoming available faster, while the separate properties are merged as soon
965
964
  * as the data is received. Note that the separate properties must be single valued and part
966
965
  * of the '$expand' system query option, either automatically via the "autoExpandSelect" model
967
- * parameter (see {@link sap.ui.model.odata.v4.ODataModel#constructor}) or manually. The
968
- * <code>$$separate</code> parameter must not be combined with <code>$$aggregation</code>.
966
+ * parameter (see {@link #constructor}) or manually. The <code>$$separate</code> parameter
967
+ * must not be combined with <code>$$aggregation</code>.
969
968
  * @param {boolean} [mParameters.$$sharedRequest]
970
969
  * Whether multiple bindings for the same resource path share the data, so that it is
971
970
  * requested only once.
972
971
  * This parameter can be inherited from the model's parameter "sharedRequests", see
973
- * {@link sap.ui.model.odata.v4.ODataModel#constructor}. Supported since 1.80.0
972
+ * {@link #constructor}. Supported since 1.80.0
974
973
  * <b>Note:</b> These bindings are read-only, so they may be especially useful for value
975
974
  * lists; state messages (since 1.108.0) and the following APIs are <b>not</b> allowed
976
975
  * <ul>
@@ -1005,8 +1004,7 @@ sap.ui.define([
1005
1004
  * @param {string} [mParameters.$$updateGroupId]
1006
1005
  * The group ID to be used for <b>update</b> requests initiated by this binding;
1007
1006
  * if not specified, either the parent binding's update group ID (if the binding is relative)
1008
- * or the model's update group ID is used,
1009
- * see {@link sap.ui.model.odata.v4.ODataModel#constructor}.
1007
+ * or the model's update group ID is used, see {@link #constructor}.
1010
1008
  * For valid values, see parameter "$$groupId".
1011
1009
  * @returns {sap.ui.model.odata.v4.ODataListBinding}
1012
1010
  * The list binding
@@ -1081,7 +1079,7 @@ sap.ui.define([
1081
1079
  * @param {string} [mParameters.$$groupId]
1082
1080
  * The group ID to be used for <b>read</b> requests initiated by this binding; if not
1083
1081
  * specified, either the parent binding's group ID (if the binding is relative) or the
1084
- * model's group ID is used, see {@link sap.ui.model.odata.v4.ODataModel#constructor}.
1082
+ * model's group ID is used, see {@link #constructor}.
1085
1083
  * Valid values are <code>undefined</code>, '$auto', '$auto.*', '$direct' or application group
1086
1084
  * IDs as specified in {@link sap.ui.model.odata.v4.ODataModel}.
1087
1085
  * @param {boolean} [mParameters.$$ignoreMessages]
@@ -1842,7 +1840,7 @@ sap.ui.define([
1842
1840
  * The group ID
1843
1841
  *
1844
1842
  * @public
1845
- * @see sap.ui.model.odata.v4.ODataModel#constructor
1843
+ * @see #constructor
1846
1844
  * @since 1.41.0
1847
1845
  */
1848
1846
  ODataModel.prototype.getGroupId = function () {
@@ -1861,7 +1859,7 @@ sap.ui.define([
1861
1859
  * @throws {Error} If the name of the group property is not 'submit'
1862
1860
  *
1863
1861
  * @private
1864
- * @see sap.ui.model.odata.v4.ODataModel#constructor
1862
+ * @see #constructor
1865
1863
  */
1866
1864
  ODataModel.prototype.getGroupProperty = function (sGroupId, sPropertyName) {
1867
1865
  switch (sPropertyName) {
@@ -1892,7 +1890,7 @@ sap.ui.define([
1892
1890
  *
1893
1891
  * @public
1894
1892
  * @see #changeHttpHeaders
1895
- * @since 1.71
1893
+ * @since 1.71.0
1896
1894
  */
1897
1895
  ODataModel.prototype.getHttpHeaders = function (bIncludeContextId) {
1898
1896
  var mHeadersCopy = Object.assign({}, this.mHeaders);
@@ -2173,8 +2171,7 @@ sap.ui.define([
2173
2171
 
2174
2172
  /**
2175
2173
  * Returns this model's root URL of the service to request data from (as defined by the
2176
- * "serviceUrl" model parameter, see {@link sap.ui.model.odata.v4.ODataModel#constructor}),
2177
- * without query options.
2174
+ * "serviceUrl" model parameter, see {@link #constructor}), without query options.
2178
2175
  *
2179
2176
  * @returns {string} The service URL
2180
2177
  *
@@ -2192,7 +2189,7 @@ sap.ui.define([
2192
2189
  * The update group ID
2193
2190
  *
2194
2191
  * @public
2195
- * @see sap.ui.model.odata.v4.ODataModel#constructor
2192
+ * @see #constructor
2196
2193
  * @since 1.41.0
2197
2194
  */
2198
2195
  ODataModel.prototype.getUpdateGroupId = function () {
@@ -2692,7 +2689,7 @@ sap.ui.define([
2692
2689
  * in case of success, or rejected with an instance of <code>Error</code> in case of failure,
2693
2690
  * e.g. when the given context does not point to an entity
2694
2691
  *
2695
- * @deprecated since 1.39.0
2692
+ * @deprecated As of version 1.39.0
2696
2693
  * Use {@link sap.ui.model.odata.v4.Context#requestCanonicalPath} instead.
2697
2694
  * @public
2698
2695
  * @since 1.37.0
@@ -2770,7 +2767,7 @@ sap.ui.define([
2770
2767
  * given group ID are running.
2771
2768
  *
2772
2769
  * @public
2773
- * @see sap.ui.model.odata.v4.ODataModel#constructor
2770
+ * @see #constructor
2774
2771
  * @see #hasPendingChanges
2775
2772
  * @since 1.39.0
2776
2773
  */
@@ -2857,6 +2854,31 @@ sap.ui.define([
2857
2854
  this.oAnnotationChangePromise = oAnnotationChangePromise;
2858
2855
  };
2859
2856
 
2857
+ /**
2858
+ * Sets the "odata.continue-on-error" preference once for the <b>current</b> batch request
2859
+ * associated with the given group ID. This method can be called early on, when that batch queue
2860
+ * is still empty, or even synchronously after {@link #submitBatch} - just as long as the $batch
2861
+ * request is not already being sent to the server. It needs to be called again for future
2862
+ * batch requests with the same group ID.
2863
+ *
2864
+ * @param {string} sGroupId
2865
+ * A valid group ID as specified in {@link sap.ui.model.odata.v4.ODataModel}. Note that
2866
+ * '$auto' should be avoided to control exactly which requests are affected by this
2867
+ * preference. Using a {@link module:sap/base/util/uid UID} may be one way to achieve this,
2868
+ * but take care to replace dashes with underscores.
2869
+ * @throws {Error}
2870
+ * If the given group ID is not a valid group ID or has
2871
+ * {@link sap.ui.model.odata.v4.SubmitMode.Direct}
2872
+ *
2873
+ * @private
2874
+ * @since 1.134.0
2875
+ * @ui5-restricted sap.fe
2876
+ */
2877
+ ODataModel.prototype.setContinueOnError = function (sGroupId) {
2878
+ this.checkBatchGroupId(sGroupId);
2879
+ this.oRequestor.setContinueOnError(sGroupId);
2880
+ };
2881
+
2860
2882
  /**
2861
2883
  * Sets a listener for HTTP responses which is called every time with the full set of headers
2862
2884
  * received.
@@ -2923,7 +2945,7 @@ sap.ui.define([
2923
2945
  * There are several preconditions on the usage of this API:
2924
2946
  * <ul>
2925
2947
  * <li> Optimistic batch handling requires the "earlyRequests" model parameter; see
2926
- * {@link sap.ui.model.odata.v4.ODataModel#constructor},
2948
+ * {@link #constructor},
2927
2949
  * <li> the setter has to be called before the first $batch request is sent,
2928
2950
  * <li> the setter may only be called once for an OData model,
2929
2951
  * <li> the callback has to return a boolean, or a <code>Promise</code> resolving with a
@@ -2979,9 +3001,8 @@ sap.ui.define([
2979
3001
  * @param {function(Error):Promise<undefined>} fnRetryAfter
2980
3002
  * A "Retry-After" handler
2981
3003
  *
2982
- * @private
2983
- * @ui5-restricted sap.fe
2984
- * @since 1.129.0
3004
+ * @public
3005
+ * @since 1.134.0
2985
3006
  */
2986
3007
  ODataModel.prototype.setRetryAfterHandler = function (fnRetryAfter) {
2987
3008
  this.fnRetryAfter = fnRetryAfter;
@@ -3110,14 +3131,14 @@ sap.ui.define([
3110
3131
  });
3111
3132
  };
3112
3133
 
3113
- /** @deprecated */
3134
+ /** @deprecated As of version 1.120.0 */
3114
3135
  (() => {
3115
3136
  const fnOriginalExtend = ODataModel.extend;
3116
3137
  /**
3117
3138
  * DO NOT EXTEND THIS CLASS.
3118
3139
  *
3119
3140
  * @returns {function} The created class / constructor function
3120
- * @deprecated
3141
+ * @deprecated As of version 1.120.0
3121
3142
  */
3122
3143
  ODataModel.extend = function () {
3123
3144
  Log.error("[FUTURE FATAL] sap.ui.model.odata.v4.ODataModel must not be extended");
@@ -294,8 +294,9 @@ sap.ui.define([
294
294
  * @throws {Error} If
295
295
  * <ul>
296
296
  * <li> there are pending changes that cannot be ignored,
297
- * <li> the binding is {@link #isTransient transient} (part of a
298
- * {@link sap.ui.model.odata.v4.ODataListBinding#create deep create}),
297
+ * <li> the binding is part of a
298
+ * {@link sap.ui.model.odata.v4.ODataListBinding#create deep create} because it is
299
+ * relative to a {@link sap.ui.model.odata.v4.Context#isTransient transient} context,
299
300
  * <li> <code>mParameters</code> is missing, contains binding-specific or unsupported
300
301
  * parameters, contains unsupported values, or contains the property "$expand" or
301
302
  * "$select" when the model is in auto-$expand/$select mode.
@@ -644,7 +645,7 @@ sap.ui.define([
644
645
  * Destroys the object. The object must not be used anymore after this function was called.
645
646
  *
646
647
  * @public
647
- * @since 1.61
648
+ * @since 1.61.0
648
649
  */
649
650
  ODataParentBinding.prototype.destroy = function () {
650
651
  this.mAggregatedQueryOptions = undefined;
@@ -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.133.0
45
+ * @version 1.134.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
@@ -136,8 +136,7 @@ sap.ui.define([
136
136
  * when it gets a new type via {@link #setType}, or when the data state is reset via
137
137
  * {@link sap.ui.model.odata.v4.ODataModel#resetChanges},
138
138
  * {@link sap.ui.model.odata.v4.ODataContextBinding#resetChanges},
139
- * {@link sap.ui.model.odata.v4.ODataListBinding#resetChanges} or
140
- * {@link sap.ui.model.odata.v4.ODataPropertyBinding#resetChanges},
139
+ * {@link sap.ui.model.odata.v4.ODataListBinding#resetChanges} or {@link #resetChanges},
141
140
  * <li> {@link sap.ui.model.ChangeReason.Refresh Refresh} when the binding is refreshed,
142
141
  * <li> {@link sap.ui.model.ChangeReason.Context Context} when the parent context is
143
142
  * changed.
@@ -560,7 +559,7 @@ sap.ui.define([
560
559
  * determined, or rejected in case of an error
561
560
  *
562
561
  * @public
563
- * @since 1.69
562
+ * @since 1.69.0
564
563
  */
565
564
  ODataPropertyBinding.prototype.requestValue = function () {
566
565
  var that = this;
@@ -251,7 +251,13 @@ sap.ui.define([
251
251
  if (oKeptElement && oKeptElement !== oElement
252
252
  && !(oKeptElement instanceof SyncPromise)) {
253
253
  if (!sHierarchyQualifier || aElements.includes(oKeptElement)) {
254
- throw new Error("Duplicate key predicate: " + sPredicate);
254
+ const sNewPredicate = oCache.fixDuplicatePredicate(oElement, sPredicate);
255
+ if (sNewPredicate) {
256
+ sPredicate = sNewPredicate;
257
+ oKeptElement = oElement; // leads to no-op for _Helper.updateNonExisting
258
+ } else {
259
+ throw new Error("Duplicate key predicate: " + sPredicate);
260
+ }
255
261
  }
256
262
  if (!oKeptElement["@odata.etag"]
257
263
  || oElement["@odata.etag"] === oKeptElement["@odata.etag"]) {
@@ -706,6 +712,9 @@ sap.ui.define([
706
712
  if (sParentFilter) {
707
713
  oCache.$parentFilter = sParentFilter;
708
714
  }
715
+ if (!oAggregation.hierarchyQualifier) {
716
+ oCache.fixDuplicatePredicate = _AggregationCache.fixDuplicatePredicate.bind(oCache);
717
+ }
709
718
 
710
719
  return oCache;
711
720
  };
@@ -2771,5 +2780,20 @@ sap.ui.define([
2771
2780
  sDeepResourcePath, bSharedRequest);
2772
2781
  };
2773
2782
 
2783
+ // @override sap.ui.model.odata.v4.lib._Cache#fixDuplicatePredicate
2784
+ _AggregationCache.fixDuplicatePredicate = function (oElement, sPredicate) {
2785
+ if (sPredicate === "('')" || sPredicate.includes("=''")) {
2786
+ Log.warning("Duplicate key predicate: " + sPredicate, this.toString(),
2787
+ "sap.ui.model.odata.v4.lib._AggregationCache");
2788
+ const sNewPredicate = sPredicate.slice(0, -1) + ",$duplicate=" + _Helper.uid() + ")";
2789
+ _Helper.setPrivateAnnotation(oElement, "predicate", sNewPredicate);
2790
+ if (this.aElements.$byPredicate[sPredicate] === oElement) {
2791
+ delete this.aElements.$byPredicate[sPredicate];
2792
+ this.aElements.$byPredicate[sNewPredicate] = oElement;
2793
+ }
2794
+ return sNewPredicate;
2795
+ }
2796
+ };
2797
+
2774
2798
  return _AggregationCache;
2775
2799
  }, /* bExport= */false);
@@ -1190,9 +1190,9 @@ sap.ui.define([
1190
1190
  // returns true if the array contains a filter affected by the side effect path
1191
1191
  function hasAffectedFilter(aFilters0) {
1192
1192
  return aFilters0.some(function (oFilter) {
1193
- return oFilter.aFilters
1194
- ? hasAffectedFilter(oFilter.aFilters)
1195
- : isAffected(oFilter.sPath);
1193
+ return oFilter.getFilters()
1194
+ ? hasAffectedFilter(oFilter.getFilters())
1195
+ : isAffected(oFilter.getPath());
1196
1196
  });
1197
1197
  }
1198
1198
 
@@ -1330,9 +1330,9 @@ sap.ui.define([
1330
1330
  * Whether the filter relates to an aggregate
1331
1331
  */
1332
1332
  function isRelatedToAggregate(oFilter0) {
1333
- return oFilter0.aFilters
1334
- ? oFilter0.aFilters.some(isRelatedToAggregate)
1335
- : oFilter0.sPath in oAggregation.aggregate;
1333
+ return oFilter0.getFilters()
1334
+ ? oFilter0.getFilters().some(isRelatedToAggregate)
1335
+ : oFilter0.getPath() in oAggregation.aggregate;
1336
1336
  }
1337
1337
 
1338
1338
  /*
@@ -1357,9 +1357,9 @@ sap.ui.define([
1357
1357
  * A filter
1358
1358
  */
1359
1359
  function split(oFilter0) {
1360
- if (oFilter0.aFilters && oFilter0.bAnd) {
1361
- oFilter0.aFilters.forEach(split);
1362
- } else if (oFilter0.sPath && isRelatedToUnit(oFilter0.sPath)) {
1360
+ if (oFilter0.getFilters() && oFilter0.isAnd()) {
1361
+ oFilter0.getFilters().forEach(split);
1362
+ } else if (oFilter0.getPath() && isRelatedToUnit(oFilter0.getPath())) {
1363
1363
  aFiltersNoAggregate.push(oFilter0);
1364
1364
  aFiltersNoThese.push(oFilter0); // avoid "$these/..." here
1365
1365
  aFiltersOnAggregate.push(oFilter0);
@@ -2913,6 +2913,24 @@ sap.ui.define([
2913
2913
  this.oSyncPromiseAll = undefined; // from now on, fetchValue has to wait again
2914
2914
  };
2915
2915
 
2916
+ /**
2917
+ * Checks whether an element with a duplicate key predicate is allowed to be imported into
2918
+ * aElements, and if so, creates a new unique key predicate.
2919
+ *
2920
+ * @param {object} oElement
2921
+ * The element with the duplicate key predicate
2922
+ * @param {string} sPredicate
2923
+ * The duplicate key predicate
2924
+ * @returns {string|undefined}
2925
+ * The newly created predicate, or <code>undefined</code> if the predicate cannot be fixed
2926
+ *
2927
+ * @public
2928
+ */
2929
+ // eslint-disable-next-line no-unused-vars
2930
+ _CollectionCache.prototype.fixDuplicatePredicate = function (oElement, sPredicate) {
2931
+ // Note: overridden by _AggregationCache.fixDuplicatePredicate
2932
+ };
2933
+
2916
2934
  /**
2917
2935
  * Returns a filter that excludes all created entities in this cache's collection and all
2918
2936
  * entities that have been deleted on the client, but not on the server yet.
@@ -3178,28 +3196,35 @@ sap.ui.define([
3178
3196
  if (sPredicate) {
3179
3197
  oKeptElement = aElements.$byPredicate[sPredicate];
3180
3198
  if (oKeptElement) {
3199
+ if (iCreated && aElements.lastIndexOf(oKeptElement, iCreated - 1) >= 0) {
3200
+ // client-side filter for newly created persisted
3201
+ iOffset += 1;
3202
+ aElements[iStart + iResultLength - iOffset] = undefined;
3203
+ continue;
3204
+ }
3205
+
3206
+ const iIndex = aElements.indexOf(oKeptElement);
3207
+ if (iIndex >= 0 && iIndex !== iStart + i - iOffset) {
3208
+ const sNewPredicate = this.fixDuplicatePredicate(oElement, sPredicate);
3209
+ if (sNewPredicate) {
3210
+ sPredicate = sNewPredicate;
3211
+ oKeptElement = oElement; // leads to no-op for _Helper.updateNonExisting
3212
+ } else {
3213
+ throw new Error("Duplicate key predicate: " + sPredicate);
3214
+ }
3215
+ }
3216
+
3181
3217
  // only check for ETag change if the cache contains one; otherwise either the
3182
3218
  // cache element is empty (via #addKeptElement) or the server did not send
3183
3219
  // one last time
3184
3220
  if (!oKeptElement["@odata.etag"]
3185
3221
  || oElement["@odata.etag"] === oKeptElement["@odata.etag"]) {
3186
- if (iCreated && aElements.lastIndexOf(oKeptElement, iCreated - 1) >= 0) {
3187
- // client-side filter for newly created persisted
3188
- iOffset += 1;
3189
- aElements[iStart + iResultLength - iOffset] = undefined;
3190
- continue;
3191
- }
3192
3222
  _Helper.updateNonExisting(oKeptElement, oElement);
3193
3223
  oElement = oKeptElement;
3194
3224
  } else if (this.hasPendingChangesForPath(sPredicate)) {
3195
3225
  throw new Error("Modified on client and on server: "
3196
3226
  + this.sResourcePath + sPredicate);
3197
3227
  } // else: ETag changed, ignore kept element!
3198
-
3199
- const iIndex = aElements.indexOf(oKeptElement);
3200
- if (iIndex >= 0 && iIndex !== iStart + i - iOffset) {
3201
- throw new Error("Duplicate key predicate: " + sPredicate);
3202
- }
3203
3228
  }
3204
3229
  aElements.$byPredicate[sPredicate] = oElement;
3205
3230
  }
@@ -3683,6 +3708,54 @@ sap.ui.define([
3683
3708
  return oPromise;
3684
3709
  };
3685
3710
 
3711
+ /**
3712
+ * Sends a request for the elements identified by the given key predicates. Returns predicates
3713
+ * for elements matching the current filter, arranged according to the current sort order.
3714
+ *
3715
+ * @param {string[]} aPredicates
3716
+ * A list of key predicates for known elements, in no special order
3717
+ * @param {sap.ui.model.odata.v4.lib._GroupLock} oGroupLock
3718
+ * A lock for the group ID
3719
+ * @returns {Promise<string[]>}
3720
+ * A promise that resolves with an array of predicates (see above), or rejects with an
3721
+ * instance of <code>Error</code> in case of failure, for exmaple if the cache is shared
3722
+ *
3723
+ * @public
3724
+ */
3725
+ _CollectionCache.prototype.requestFilteredOrderedPredicates = async function (aPredicates,
3726
+ oGroupLock) {
3727
+ this.checkSharedRequest();
3728
+
3729
+ const mTypeForMetaPath = this.getTypes();
3730
+ const aKeyFilters = aPredicates.map((sPredicate) => _Helper.getKeyFilter(
3731
+ this.aElements.$byPredicate[sPredicate], this.sMetaPath, mTypeForMetaPath));
3732
+
3733
+ const mQueryOptions = {...this.mQueryOptions};
3734
+ delete mQueryOptions.$count;
3735
+ mQueryOptions.$filter = mQueryOptions.$filter
3736
+ ? `${mQueryOptions.$filter} and (${aKeyFilters.join(" or ")})`
3737
+ : aKeyFilters.join(" or ");
3738
+ mQueryOptions.$top = aKeyFilters.length;
3739
+ const sResourcePath = this.sResourcePath
3740
+ + this.oRequestor.buildQueryString(this.sMetaPath, mQueryOptions, false, true, true);
3741
+
3742
+ const oResponse = await this.oRequestor.request("GET", sResourcePath, oGroupLock);
3743
+
3744
+ this.visitResponse(oResponse, mTypeForMetaPath, undefined, undefined, 0);
3745
+
3746
+ return oResponse.value.map((oNewElement) => {
3747
+ const sPredicate = _Helper.getPrivateAnnotation(oNewElement, "predicate");
3748
+ const oOldElement = this.aElements.$byPredicate[sPredicate];
3749
+ _Helper.copySelected(oOldElement, oNewElement);
3750
+ this.aElements.$byPredicate[sPredicate] = oNewElement;
3751
+ this.aElements[this.aElements.indexOf(oOldElement)] = oNewElement;
3752
+ _Helper.fireChanges(this.mChangeListeners, sPredicate, oOldElement, true);
3753
+ _Helper.fireChanges(this.mChangeListeners, sPredicate, oNewElement);
3754
+
3755
+ return sPredicate;
3756
+ });
3757
+ };
3758
+
3686
3759
  /**
3687
3760
  * Requests the separate properties for the given range and merges them into the aElements list.
3688
3761
  *
@@ -1290,6 +1290,9 @@ sap.ui.define([
1290
1290
  }
1291
1291
  });
1292
1292
  aResultingRequests.iChangeSet = aRequests.iChangeSet;
1293
+ if (aRequests.bContinueOnError) {
1294
+ aResultingRequests.bContinueOnError = true;
1295
+ }
1293
1296
 
1294
1297
  return aResultingRequests;
1295
1298
  };
@@ -1972,7 +1975,8 @@ sap.ui.define([
1972
1975
  return this.processOptimisticBatch(aRequests, sGroupId)
1973
1976
  || this.sendRequest("POST", "$batch" + this.sQueryParams,
1974
1977
  Object.assign(oBatchRequest.headers, mBatchHeaders,
1975
- bHasChanges ? undefined : {"sap-cancel-on-close" : "true"}),
1978
+ bHasChanges ? undefined : {"sap-cancel-on-close" : "true"},
1979
+ aRequests.bContinueOnError ? {Prefer : "odata.continue-on-error"} : undefined),
1976
1980
  oBatchRequest.body
1977
1981
  ).then(function (oResponse) {
1978
1982
  if (oResponse.messages !== null) {
@@ -2136,6 +2140,19 @@ sap.ui.define([
2136
2140
  });
2137
2141
  };
2138
2142
 
2143
+ /**
2144
+ * Sets the "odata.continue-on-error" preference once for the <b>current</b> batch request
2145
+ * associated with the given group ID.
2146
+ *
2147
+ * @param {string} sGroupId
2148
+ * The group ID
2149
+ *
2150
+ * @public
2151
+ */
2152
+ _Requestor.prototype.setContinueOnError = function (sGroupId) {
2153
+ this.getOrCreateBatchQueue(sGroupId).bContinueOnError = true;
2154
+ };
2155
+
2139
2156
  /**
2140
2157
  * Sets the session context. Starts a keep-alive timer in case there is a session context and
2141
2158
  * a timeout of 60 seconds or more is indicated. This timer runs for at most 30 minutes.
@@ -227,7 +227,7 @@ sap.ui.define([
227
227
  *
228
228
  * @extends sap.ui.model.Model
229
229
  * @public
230
- * @version 1.133.0
230
+ * @version 1.134.0
231
231
  */
232
232
  var ResourceModel = Model.extend("sap.ui.model.resource.ResourceModel", /** @lends sap.ui.model.resource.ResourceModel.prototype */ {
233
233
 
@@ -19,7 +19,7 @@ sap.ui.define(["sap/ui/core/Lib", 'sap/ui/model/SimpleType', 'sap/ui/model/Forma
19
19
  * @extends sap.ui.model.SimpleType
20
20
  *
21
21
  * @author SAP SE
22
- * @version 1.133.0
22
+ * @version 1.134.0
23
23
  *
24
24
  * @public
25
25
  * @param {object} [oFormatOptions]
@@ -34,7 +34,7 @@ sap.ui.define([
34
34
  * @extends sap.ui.model.CompositeType
35
35
  *
36
36
  * @author SAP SE
37
- * @version 1.133.0
37
+ * @version 1.134.0
38
38
  *
39
39
  * @public
40
40
  * @param {object} [oFormatOptions]
@@ -27,7 +27,7 @@ sap.ui.define([
27
27
  * @extends sap.ui.model.SimpleType
28
28
  *
29
29
  * @author SAP SE
30
- * @version 1.133.0
30
+ * @version 1.134.0
31
31
  *
32
32
  * @public
33
33
  * @param {object} [oFormatOptions] Formatting options. For a list of all available options, see {@link sap.ui.core.format.DateFormat.getDateInstance DateFormat}.
@@ -25,7 +25,7 @@ sap.ui.define([
25
25
  * @extends sap.ui.model.CompositeType
26
26
  *
27
27
  * @author SAP SE
28
- * @version 1.133.0
28
+ * @version 1.134.0
29
29
  *
30
30
  * @alias sap.ui.model.type.DateInterval
31
31
  * @param {object} [oFormatOptions]
@@ -19,7 +19,7 @@ sap.ui.define(['./Date', 'sap/ui/core/format/DateFormat'],
19
19
  * @extends sap.ui.model.type.Date
20
20
  *
21
21
  * @author SAP SE
22
- * @version 1.133.0
22
+ * @version 1.134.0
23
23
  *
24
24
  * @public
25
25
  * @param {object} [oFormatOptions] Formatting options. For a list of all available options, see {@link sap.ui.core.format.DateFormat.getDateTimeInstance DateFormat}.
@@ -19,7 +19,7 @@ sap.ui.define(['./DateInterval', 'sap/ui/core/format/DateFormat'],
19
19
  * @extends sap.ui.model.type.DateInterval
20
20
  *
21
21
  * @author SAP SE
22
- * @version 1.133.0
22
+ * @version 1.134.0
23
23
  *
24
24
  * @public
25
25
  * @param {object} [oFormatOptions] Formatting options. For a list of all available options, see {@link sap.ui.core.format.DateFormat.getDateTimeInstance DateFormat}.
@@ -25,7 +25,7 @@ sap.ui.define([
25
25
  * @extends sap.ui.model.SimpleType
26
26
  *
27
27
  * @author SAP SE
28
- * @version 1.133.0
28
+ * @version 1.134.0
29
29
  *
30
30
  * @public
31
31
  * @param {object} [oFormatOptions]
@@ -26,7 +26,7 @@ sap.ui.define([
26
26
  * @extends sap.ui.model.SimpleType
27
27
  *
28
28
  * @author SAP SE
29
- * @version 1.133.0
29
+ * @version 1.134.0
30
30
  *
31
31
  * @public
32
32
  * @param {object} [oFormatOptions]
@@ -26,7 +26,7 @@ sap.ui.define([
26
26
  * @extends sap.ui.model.SimpleType
27
27
  *
28
28
  * @author SAP SE
29
- * @version 1.133.0
29
+ * @version 1.134.0
30
30
  *
31
31
  * @public
32
32
  * @param {object} [oFormatOptions]
@@ -25,7 +25,7 @@ sap.ui.define([
25
25
  * @extends sap.ui.model.SimpleType
26
26
  *
27
27
  * @author SAP SE
28
- * @version 1.133.0
28
+ * @version 1.134.0
29
29
  *
30
30
  * @alias sap.ui.model.type.String
31
31
  * @param {object} [oFormatOptions]
@@ -19,7 +19,7 @@ sap.ui.define(['./Date', 'sap/ui/core/format/DateFormat'],
19
19
  * @extends sap.ui.model.type.Date
20
20
  *
21
21
  * @author SAP SE
22
- * @version 1.133.0
22
+ * @version 1.134.0
23
23
  *
24
24
  * @public
25
25
  * @param {object} [oFormatOptions] Formatting options. For a list of all available options, see {@link sap.ui.core.format.DateFormat.getTimeInstance DateFormat}.