@openui5/sap.ui.core 1.99.0 → 1.100.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 (355) hide show
  1. package/THIRDPARTY.txt +2 -2
  2. package/package.json +1 -1
  3. package/src/jquery.sap.global.js +6 -3
  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/Log.js +1 -1
  9. package/src/sap/base/strings/whitespaceReplacer.js +1 -1
  10. package/src/sap/base/util/LoaderExtensions.js +1 -10
  11. package/src/sap/base/util/UriParameters.js +2 -2
  12. package/src/sap/base/util/restricted/_CancelablePromise.js +1 -1
  13. package/src/sap/base/util/restricted/_castArray.js +1 -1
  14. package/src/sap/base/util/restricted/_compact.js +1 -1
  15. package/src/sap/base/util/restricted/_curry.js +1 -1
  16. package/src/sap/base/util/restricted/_debounce.js +1 -1
  17. package/src/sap/base/util/restricted/_difference.js +1 -1
  18. package/src/sap/base/util/restricted/_differenceBy.js +1 -1
  19. package/src/sap/base/util/restricted/_differenceWith.js +1 -1
  20. package/src/sap/base/util/restricted/_flatMap.js +1 -1
  21. package/src/sap/base/util/restricted/_flatMapDeep.js +1 -1
  22. package/src/sap/base/util/restricted/_flatMapDepth.js +1 -1
  23. package/src/sap/base/util/restricted/_flatten.js +1 -1
  24. package/src/sap/base/util/restricted/_flattenDeep.js +1 -1
  25. package/src/sap/base/util/restricted/_flattenDepth.js +1 -1
  26. package/src/sap/base/util/restricted/_intersection.js +1 -1
  27. package/src/sap/base/util/restricted/_intersectionBy.js +1 -1
  28. package/src/sap/base/util/restricted/_intersectionWith.js +1 -1
  29. package/src/sap/base/util/restricted/_isEqual.js +1 -1
  30. package/src/sap/base/util/restricted/_isEqualWith.js +1 -1
  31. package/src/sap/base/util/restricted/_isNil.js +1 -1
  32. package/src/sap/base/util/restricted/_max.js +1 -1
  33. package/src/sap/base/util/restricted/_merge.js +1 -1
  34. package/src/sap/base/util/restricted/_mergeWith.js +1 -1
  35. package/src/sap/base/util/restricted/_min.js +1 -1
  36. package/src/sap/base/util/restricted/_omit.js +1 -1
  37. package/src/sap/base/util/restricted/_pick.js +1 -1
  38. package/src/sap/base/util/restricted/_pickBy.js +1 -1
  39. package/src/sap/base/util/restricted/_throttle.js +1 -1
  40. package/src/sap/base/util/restricted/_toArray.js +1 -1
  41. package/src/sap/base/util/restricted/_union.js +1 -1
  42. package/src/sap/base/util/restricted/_unionBy.js +1 -1
  43. package/src/sap/base/util/restricted/_unionWith.js +1 -1
  44. package/src/sap/base/util/restricted/_uniq.js +1 -1
  45. package/src/sap/base/util/restricted/_uniqBy.js +1 -1
  46. package/src/sap/base/util/restricted/_uniqWith.js +1 -1
  47. package/src/sap/base/util/restricted/_without.js +1 -1
  48. package/src/sap/base/util/restricted/_xor.js +1 -1
  49. package/src/sap/base/util/restricted/_xorBy.js +1 -1
  50. package/src/sap/base/util/restricted/_xorWith.js +1 -1
  51. package/src/sap/base/util/restricted/_zipObject.js +1 -1
  52. package/src/sap/base/util/restricted/_zipObjectDeep.js +1 -1
  53. package/src/sap/ui/Device.js +3 -3
  54. package/src/sap/ui/Global.js +4 -4
  55. package/src/sap/ui/base/Event.js +1 -1
  56. package/src/sap/ui/base/EventProvider.js +1 -1
  57. package/src/sap/ui/base/ExpressionParser.js +1 -1
  58. package/src/sap/ui/base/Interface.js +1 -1
  59. package/src/sap/ui/base/ManagedObject.js +1 -1
  60. package/src/sap/ui/base/ManagedObjectMetadata.js +1 -1
  61. package/src/sap/ui/base/ManagedObjectObserver.js +2 -0
  62. package/src/sap/ui/base/Metadata.js +1 -1
  63. package/src/sap/ui/base/Object.js +1 -1
  64. package/src/sap/ui/base/ObjectPool.js +1 -1
  65. package/src/sap/ui/core/.library +2 -2
  66. package/src/sap/ui/core/BusyIndicator.js +1 -1
  67. package/src/sap/ui/core/Component.js +1 -1
  68. package/src/sap/ui/core/ComponentContainer.js +1 -1
  69. package/src/sap/ui/core/ComponentMetadata.js +2 -2
  70. package/src/sap/ui/core/ComponentSupport.js +1 -1
  71. package/src/sap/ui/core/Configuration.js +3 -1
  72. package/src/sap/ui/core/Control.js +1 -1
  73. package/src/sap/ui/core/Core.js +3 -1
  74. package/src/sap/ui/core/CustomData.js +1 -1
  75. package/src/sap/ui/core/DeclarativeSupport.js +1 -1
  76. package/src/sap/ui/core/Element.js +1 -1
  77. package/src/sap/ui/core/ElementMetadata.js +1 -1
  78. package/src/sap/ui/core/EnabledPropagator.js +1 -1
  79. package/src/sap/ui/core/EventBus.js +1 -1
  80. package/src/sap/ui/core/Fragment.js +1 -1
  81. package/src/sap/ui/core/HTML.js +1 -1
  82. package/src/sap/ui/core/History.js +1 -1
  83. package/src/sap/ui/core/Icon.js +17 -3
  84. package/src/sap/ui/core/IndicationColorSupport.js +1 -1
  85. package/src/sap/ui/core/IntervalTrigger.js +1 -1
  86. package/src/sap/ui/core/InvisibleMessage.js +1 -1
  87. package/src/sap/ui/core/InvisibleRenderer.js +1 -1
  88. package/src/sap/ui/core/InvisibleText.js +1 -1
  89. package/src/sap/ui/core/Item.js +1 -1
  90. package/src/sap/ui/core/LabelEnablement.js +1 -1
  91. package/src/sap/ui/core/LayoutData.js +1 -1
  92. package/src/sap/ui/core/ListItem.js +1 -1
  93. package/src/sap/ui/core/LocalBusyIndicator.js +1 -1
  94. package/src/sap/ui/core/Locale.js +1 -1
  95. package/src/sap/ui/core/LocaleData.js +24 -5
  96. package/src/sap/ui/core/Manifest.js +1 -1
  97. package/src/sap/ui/core/Message.js +1 -1
  98. package/src/sap/ui/core/Patcher.js +3 -3
  99. package/src/sap/ui/core/Popup.js +9 -6
  100. package/src/sap/ui/core/RenderManager.js +1 -1
  101. package/src/sap/ui/core/Renderer.js +1 -1
  102. package/src/sap/ui/core/ResizeHandler.js +1 -1
  103. package/src/sap/ui/core/ScrollBar.js +1 -1
  104. package/src/sap/ui/core/SeparatorItem.js +1 -1
  105. package/src/sap/ui/core/Title.js +1 -1
  106. package/src/sap/ui/core/TooltipBase.js +1 -1
  107. package/src/sap/ui/core/UIArea.js +1 -1
  108. package/src/sap/ui/core/UIComponent.js +1 -1
  109. package/src/sap/ui/core/UIComponentMetadata.js +1 -1
  110. package/src/sap/ui/core/ValueStateSupport.js +1 -1
  111. package/src/sap/ui/core/VariantLayoutData.js +1 -1
  112. package/src/sap/ui/core/XMLComposite.js +1 -1
  113. package/src/sap/ui/core/XMLCompositeMetadata.js +1 -1
  114. package/src/sap/ui/core/XMLTemplateProcessor.js +7 -6
  115. package/src/sap/ui/core/_IconRegistry.js +3 -2
  116. package/src/sap/ui/core/cache/CacheManager.js +1 -1
  117. package/src/sap/ui/core/cache/LRUPersistentCache.js +2 -1
  118. package/src/sap/ui/core/cldr/en_AU.json +1 -1
  119. package/src/sap/ui/core/date/Buddhist.js +3 -3
  120. package/src/sap/ui/core/date/Japanese.js +3 -3
  121. package/src/sap/ui/core/date/UniversalDate.js +10 -0
  122. package/src/sap/ui/core/date/UniversalDateUtils.js +1 -1
  123. package/src/sap/ui/core/delegate/ItemNavigation.js +1 -1
  124. package/src/sap/ui/core/delegate/ScrollEnablement.js +1 -1
  125. package/src/sap/ui/core/dnd/DragAndDrop.js +19 -16
  126. package/src/sap/ui/core/dnd/DragDropBase.js +1 -1
  127. package/src/sap/ui/core/dnd/DragDropInfo.js +1 -1
  128. package/src/sap/ui/core/dnd/DragInfo.js +1 -1
  129. package/src/sap/ui/core/dnd/DropInfo.js +3 -3
  130. package/src/sap/ui/core/format/DateFormat.js +125 -61
  131. package/src/sap/ui/core/format/DateFormatTimezoneDisplay.js +1 -0
  132. package/src/sap/ui/core/format/NumberFormat.js +331 -179
  133. package/src/sap/ui/core/format/TimezoneUtil.js +1 -1
  134. package/src/sap/ui/core/hyphenation/Hyphenation.js +1 -1
  135. package/src/sap/ui/core/library.js +85 -49
  136. package/src/sap/ui/core/message/ControlMessageProcessor.js +1 -1
  137. package/src/sap/ui/core/message/Message.js +1 -1
  138. package/src/sap/ui/core/message/MessageManager.js +1 -1
  139. package/src/sap/ui/core/message/MessageParser.js +1 -1
  140. package/src/sap/ui/core/message/MessageProcessor.js +1 -1
  141. package/src/sap/ui/core/messagebundle.properties +0 -2
  142. package/src/sap/ui/core/messagebundle_ar.properties +0 -1
  143. package/src/sap/ui/core/messagebundle_bg.properties +0 -1
  144. package/src/sap/ui/core/messagebundle_ca.properties +0 -1
  145. package/src/sap/ui/core/messagebundle_cs.properties +0 -1
  146. package/src/sap/ui/core/messagebundle_cy.properties +0 -1
  147. package/src/sap/ui/core/messagebundle_da.properties +0 -1
  148. package/src/sap/ui/core/messagebundle_de.properties +0 -1
  149. package/src/sap/ui/core/messagebundle_el.properties +0 -1
  150. package/src/sap/ui/core/messagebundle_en.properties +0 -1
  151. package/src/sap/ui/core/messagebundle_en_GB.properties +0 -1
  152. package/src/sap/ui/core/messagebundle_en_US_sappsd.properties +0 -1
  153. package/src/sap/ui/core/messagebundle_en_US_saptrc.properties +0 -1
  154. package/src/sap/ui/core/messagebundle_es.properties +0 -1
  155. package/src/sap/ui/core/messagebundle_es_MX.properties +0 -1
  156. package/src/sap/ui/core/messagebundle_et.properties +0 -1
  157. package/src/sap/ui/core/messagebundle_fi.properties +0 -1
  158. package/src/sap/ui/core/messagebundle_fr.properties +0 -1
  159. package/src/sap/ui/core/messagebundle_fr_CA.properties +0 -1
  160. package/src/sap/ui/core/messagebundle_hi.properties +0 -1
  161. package/src/sap/ui/core/messagebundle_hr.properties +0 -1
  162. package/src/sap/ui/core/messagebundle_hu.properties +0 -1
  163. package/src/sap/ui/core/messagebundle_id.properties +0 -1
  164. package/src/sap/ui/core/messagebundle_it.properties +0 -1
  165. package/src/sap/ui/core/messagebundle_iw.properties +0 -1
  166. package/src/sap/ui/core/messagebundle_ja.properties +0 -1
  167. package/src/sap/ui/core/messagebundle_kk.properties +0 -1
  168. package/src/sap/ui/core/messagebundle_ko.properties +1 -2
  169. package/src/sap/ui/core/messagebundle_lt.properties +0 -1
  170. package/src/sap/ui/core/messagebundle_lv.properties +0 -1
  171. package/src/sap/ui/core/messagebundle_ms.properties +0 -1
  172. package/src/sap/ui/core/messagebundle_nl.properties +0 -1
  173. package/src/sap/ui/core/messagebundle_no.properties +0 -1
  174. package/src/sap/ui/core/messagebundle_pl.properties +0 -1
  175. package/src/sap/ui/core/messagebundle_pt.properties +0 -1
  176. package/src/sap/ui/core/messagebundle_pt_PT.properties +0 -1
  177. package/src/sap/ui/core/messagebundle_ro.properties +0 -1
  178. package/src/sap/ui/core/messagebundle_ru.properties +0 -1
  179. package/src/sap/ui/core/messagebundle_sh.properties +0 -1
  180. package/src/sap/ui/core/messagebundle_sk.properties +0 -1
  181. package/src/sap/ui/core/messagebundle_sl.properties +0 -1
  182. package/src/sap/ui/core/messagebundle_sv.properties +0 -1
  183. package/src/sap/ui/core/messagebundle_th.properties +0 -1
  184. package/src/sap/ui/core/messagebundle_tr.properties +0 -1
  185. package/src/sap/ui/core/messagebundle_uk.properties +0 -1
  186. package/src/sap/ui/core/messagebundle_vi.properties +0 -1
  187. package/src/sap/ui/core/messagebundle_zh_CN.properties +0 -1
  188. package/src/sap/ui/core/messagebundle_zh_TW.properties +0 -1
  189. package/src/sap/ui/core/mvc/Controller.js +1 -1
  190. package/src/sap/ui/core/mvc/ControllerExtensionProvider.js +1 -1
  191. package/src/sap/ui/core/mvc/HTMLView.js +1 -1
  192. package/src/sap/ui/core/mvc/JSONView.js +1 -1
  193. package/src/sap/ui/core/mvc/JSView.js +1 -1
  194. package/src/sap/ui/core/mvc/TemplateView.js +1 -1
  195. package/src/sap/ui/core/mvc/View.js +1 -1
  196. package/src/sap/ui/core/mvc/XMLView.js +9 -1
  197. package/src/sap/ui/core/plugin/DeclarativeSupport.js +1 -1
  198. package/src/sap/ui/core/plugin/LessSupport.js +1 -1
  199. package/src/sap/ui/core/plugin/TemplatingSupport.js +1 -1
  200. package/src/sap/ui/core/postmessage/Bus.js +1 -1
  201. package/src/sap/ui/core/postmessage/confirmationDialog.js +1 -1
  202. package/src/sap/ui/core/rules/Misc.support.js +8 -3
  203. package/src/sap/ui/core/search/OpenSearchProvider.js +1 -1
  204. package/src/sap/ui/core/search/SearchProvider.js +1 -1
  205. package/src/sap/ui/core/service/Service.js +1 -1
  206. package/src/sap/ui/core/service/ServiceFactory.js +1 -1
  207. package/src/sap/ui/core/service/ServiceFactoryRegistry.js +1 -1
  208. package/src/sap/ui/core/support/Plugin.js +1 -1
  209. package/src/sap/ui/core/support/Support.js +3 -3
  210. package/src/sap/ui/core/support/plugins/ControlTree.js +1 -1
  211. package/src/sap/ui/core/support/plugins/Interaction.js +1 -1
  212. package/src/sap/ui/core/support/plugins/LocalStorage.js +1 -1
  213. package/src/sap/ui/core/support/plugins/Performance.js +1 -1
  214. package/src/sap/ui/core/support/plugins/Selector.js +1 -1
  215. package/src/sap/ui/core/support/plugins/TechInfo.js +1 -1
  216. package/src/sap/ui/core/support/plugins/Trace.js +1 -1
  217. package/src/sap/ui/core/support/plugins/ViewInfo.js +1 -1
  218. package/src/sap/ui/core/themes/base/CommandShortcutHints.less +1 -1
  219. package/src/sap/ui/core/themes/base/base.less +1108 -35
  220. package/src/sap/ui/core/themes/base/global.less +158 -4
  221. package/src/sap/ui/core/themes/sap_hcb/global.less +157 -2
  222. package/src/sap/ui/core/tmpl/DOMAttribute.js +1 -1
  223. package/src/sap/ui/core/tmpl/DOMElement.js +1 -1
  224. package/src/sap/ui/core/tmpl/HandlebarsTemplate.js +1 -1
  225. package/src/sap/ui/core/tmpl/Template.js +1 -1
  226. package/src/sap/ui/core/tmpl/TemplateControl.js +1 -1
  227. package/src/sap/ui/core/util/AsyncHintsHelper.js +1 -1
  228. package/src/sap/ui/core/util/Export.js +1 -1
  229. package/src/sap/ui/core/util/ExportCell.js +1 -1
  230. package/src/sap/ui/core/util/ExportColumn.js +1 -1
  231. package/src/sap/ui/core/util/ExportRow.js +1 -1
  232. package/src/sap/ui/core/util/ExportType.js +1 -1
  233. package/src/sap/ui/core/util/ExportTypeCSV.js +1 -1
  234. package/src/sap/ui/core/util/File.js +1 -1
  235. package/src/sap/ui/core/util/LibraryInfo.js +1 -1
  236. package/src/sap/ui/core/util/MockServer.js +3 -2
  237. package/src/sap/ui/core/util/PasteHelper.js +2 -2
  238. package/src/sap/ui/core/util/XMLPreprocessor.js +1 -0
  239. package/src/sap/ui/core/util/serializer/HTMLViewSerializer.js +1 -1
  240. package/src/sap/ui/core/util/serializer/Serializer.js +1 -1
  241. package/src/sap/ui/core/util/serializer/ViewSerializer.js +1 -1
  242. package/src/sap/ui/core/util/serializer/XMLViewSerializer.js +1 -1
  243. package/src/sap/ui/core/util/serializer/delegate/Delegate.js +1 -1
  244. package/src/sap/ui/core/util/serializer/delegate/HTML.js +1 -1
  245. package/src/sap/ui/core/util/serializer/delegate/XML.js +1 -1
  246. package/src/sap/ui/core/ws/ReadyState.js +1 -1
  247. package/src/sap/ui/core/ws/SapPcpWebSocket.js +1 -1
  248. package/src/sap/ui/core/ws/WebSocket.js +1 -1
  249. package/src/sap/ui/debug/ControlTree.js +1 -1
  250. package/src/sap/ui/debug/DebugEnv.js +1 -1
  251. package/src/sap/ui/debug/LogViewer.js +2 -2
  252. package/src/sap/ui/debug/PropertyList.js +1 -1
  253. package/src/sap/ui/model/ClientModel.js +1 -1
  254. package/src/sap/ui/model/CompositeBinding.js +3 -0
  255. package/src/sap/ui/model/CompositeDataState.js +1 -1
  256. package/src/sap/ui/model/CompositeType.js +13 -1
  257. package/src/sap/ui/model/DataState.js +1 -1
  258. package/src/sap/ui/model/MetaModel.js +1 -1
  259. package/src/sap/ui/model/Model.js +1 -1
  260. package/src/sap/ui/model/SelectionModel.js +1 -1
  261. package/src/sap/ui/model/SimpleType.js +1 -1
  262. package/src/sap/ui/model/TreeAutoExpandMode.js +1 -1
  263. package/src/sap/ui/model/Type.js +1 -1
  264. package/src/sap/ui/model/_Helper.js +22 -0
  265. package/src/sap/ui/model/analytics/AnalyticalBinding.js +28 -12
  266. package/src/sap/ui/model/base/ManagedObjectModel.js +8 -6
  267. package/src/sap/ui/model/json/JSONModel.js +15 -8
  268. package/src/sap/ui/model/message/MessageModel.js +1 -1
  269. package/src/sap/ui/model/odata/ODataAnnotations.js +1 -1
  270. package/src/sap/ui/model/odata/ODataMessageParser.js +1 -1
  271. package/src/sap/ui/model/odata/ODataMetaModel.js +1 -1
  272. package/src/sap/ui/model/odata/ODataMetadata.js +1 -1
  273. package/src/sap/ui/model/odata/ODataModel.js +1 -1
  274. package/src/sap/ui/model/odata/ODataPropertyBinding.js +3 -1
  275. package/src/sap/ui/model/odata/ODataTreeBindingFlat.js +1 -1
  276. package/src/sap/ui/model/odata/type/Boolean.js +1 -1
  277. package/src/sap/ui/model/odata/type/Byte.js +1 -1
  278. package/src/sap/ui/model/odata/type/Currency.js +1 -1
  279. package/src/sap/ui/model/odata/type/Date.js +1 -1
  280. package/src/sap/ui/model/odata/type/DateTime.js +1 -1
  281. package/src/sap/ui/model/odata/type/DateTimeBase.js +1 -1
  282. package/src/sap/ui/model/odata/type/DateTimeOffset.js +1 -1
  283. package/src/sap/ui/model/odata/type/DateTimeWithTimezone.js +54 -46
  284. package/src/sap/ui/model/odata/type/Decimal.js +1 -1
  285. package/src/sap/ui/model/odata/type/Double.js +1 -1
  286. package/src/sap/ui/model/odata/type/Guid.js +1 -1
  287. package/src/sap/ui/model/odata/type/Int.js +1 -1
  288. package/src/sap/ui/model/odata/type/Int16.js +1 -1
  289. package/src/sap/ui/model/odata/type/Int32.js +1 -1
  290. package/src/sap/ui/model/odata/type/Int64.js +1 -1
  291. package/src/sap/ui/model/odata/type/ODataType.js +1 -1
  292. package/src/sap/ui/model/odata/type/Raw.js +1 -1
  293. package/src/sap/ui/model/odata/type/SByte.js +1 -1
  294. package/src/sap/ui/model/odata/type/Single.js +1 -1
  295. package/src/sap/ui/model/odata/type/Stream.js +1 -1
  296. package/src/sap/ui/model/odata/type/String.js +1 -1
  297. package/src/sap/ui/model/odata/type/Time.js +1 -1
  298. package/src/sap/ui/model/odata/type/TimeOfDay.js +1 -1
  299. package/src/sap/ui/model/odata/type/Unit.js +1 -1
  300. package/src/sap/ui/model/odata/v2/Context.js +7 -3
  301. package/src/sap/ui/model/odata/v2/ODataAnnotations.js +1 -1
  302. package/src/sap/ui/model/odata/v2/ODataListBinding.js +109 -26
  303. package/src/sap/ui/model/odata/v2/ODataModel.js +236 -45
  304. package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +1 -1
  305. package/src/sap/ui/model/odata/v4/Context.js +20 -22
  306. package/src/sap/ui/model/odata/v4/ODataBinding.js +50 -32
  307. package/src/sap/ui/model/odata/v4/ODataContextBinding.js +33 -5
  308. package/src/sap/ui/model/odata/v4/ODataListBinding.js +183 -46
  309. package/src/sap/ui/model/odata/v4/ODataMetaModel.js +1 -1
  310. package/src/sap/ui/model/odata/v4/ODataModel.js +185 -24
  311. package/src/sap/ui/model/odata/v4/ODataParentBinding.js +25 -57
  312. package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +3 -2
  313. package/src/sap/ui/model/odata/v4/lib/_Cache.js +146 -31
  314. package/src/sap/ui/model/odata/v4/lib/_GroupLock.js +4 -0
  315. package/src/sap/ui/model/odata/v4/lib/_Helper.js +6 -3
  316. package/src/sap/ui/model/odata/v4/lib/_Requestor.js +162 -8
  317. package/src/sap/ui/model/resource/ResourceModel.js +1 -1
  318. package/src/sap/ui/model/type/Boolean.js +1 -1
  319. package/src/sap/ui/model/type/Currency.js +1 -1
  320. package/src/sap/ui/model/type/Date.js +1 -1
  321. package/src/sap/ui/model/type/DateInterval.js +1 -1
  322. package/src/sap/ui/model/type/DateTime.js +1 -1
  323. package/src/sap/ui/model/type/DateTimeInterval.js +1 -1
  324. package/src/sap/ui/model/type/FileSize.js +1 -1
  325. package/src/sap/ui/model/type/Float.js +1 -1
  326. package/src/sap/ui/model/type/Integer.js +1 -1
  327. package/src/sap/ui/model/type/String.js +1 -1
  328. package/src/sap/ui/model/type/Time.js +1 -1
  329. package/src/sap/ui/model/type/TimeInterval.js +1 -1
  330. package/src/sap/ui/model/type/Unit.js +1 -1
  331. package/src/sap/ui/model/xml/XMLModel.js +1 -1
  332. package/src/sap/ui/performance/trace/FESR.js +1 -1
  333. package/src/sap/ui/performance/trace/FESRHelper.js +72 -0
  334. package/src/sap/ui/performance/trace/Interaction.js +6 -2
  335. package/src/sap/ui/qunit/qunit-2-css.js +4 -4
  336. package/src/sap/ui/qunit/qunit-css.js +4 -4
  337. package/src/sap/ui/qunit/utils/ControlIterator.js +1 -1
  338. package/src/sap/ui/qunit/utils/MemoryLeakCheck.js +1 -1
  339. package/src/sap/ui/test/BranchTracking.js +1 -0
  340. package/src/sap/ui/test/OpaBuilder.js +7 -7
  341. package/src/sap/ui/test/TestUtils.js +10 -0
  342. package/src/sap/ui/test/_UsageReport.js +1 -1
  343. package/src/sap/ui/test/generic/GenericTestCollection.js +176 -0
  344. package/src/sap/ui/test/generic/TestBase.js +151 -0
  345. package/src/sap/ui/test/generic/Utils.js +284 -0
  346. package/src/sap/ui/test/selectors/_ControlSelectorGenerator.js +9 -8
  347. package/src/sap/ui/test/selectors/_ControlSelectorValidator.js +1 -1
  348. package/src/sap/ui/test/starter/_setupAndStart.js +4 -0
  349. package/src/sap/ui/thirdparty/IPv6.js +1 -1
  350. package/src/sap/ui/thirdparty/SecondLevelDomains.js +1 -1
  351. package/src/sap/ui/thirdparty/URI.js +7 -3
  352. package/src/sap/ui/thirdparty/URITemplate.js +1 -1
  353. package/src/sap/ui/thirdparty/jszip.js +17 -7
  354. package/src/sap/ui/util/Mobile.js +17 -0
  355. package/src/sap/ui/util/Storage.js +1 -1
@@ -52,6 +52,8 @@ sap.ui.define([
52
52
  // system query options allowed within a $expand query option
53
53
  aExpandQueryOptions = ["$count", "$expand", "$filter", "$levels", "$orderby", "$search",
54
54
  "$select"],
55
+ // binding-specific parameters allowed in getKeepAliveContext
56
+ aGetKeepAliveParameters = ["$$groupId", "$$patchWithoutSideEffects", "$$updateGroupId"],
55
57
  rGroupID = /^(\$auto(\.\w+)?|\$direct|\w+)$/,
56
58
  MessageType = coreLibrary.MessageType,
57
59
  aMessageTypes = [
@@ -210,7 +212,7 @@ sap.ui.define([
210
212
  * @extends sap.ui.model.Model
211
213
  * @public
212
214
  * @since 1.37.0
213
- * @version 1.99.0
215
+ * @version 1.100.0
214
216
  */
215
217
  ODataModel = Model.extend("sap.ui.model.odata.v4.ODataModel",
216
218
  /** @lends sap.ui.model.odata.v4.ODataModel.prototype */{
@@ -331,6 +333,8 @@ sap.ui.define([
331
333
  that.fireEvent("sessionTimeout");
332
334
  },
333
335
  getGroupProperty : this.getGroupProperty.bind(this),
336
+ getOptimisticBatchEnabler : this.getOptimisticBatchEnabler.bind(this),
337
+ getReporter : this.getReporter.bind(this),
334
338
  onCreateGroup : function (sGroupId) {
335
339
  if (that.isAutoGroup(sGroupId)) {
336
340
  that.addPrerenderingTask(that._submitBatch.bind(that, sGroupId, true));
@@ -342,12 +346,16 @@ sap.ui.define([
342
346
  this.oRequestor = _Requestor.create(this.sServiceUrl, this.oInterface, this.mHeaders,
343
347
  mUriParameters, sODataVersion);
344
348
  this.changeHttpHeaders(mParameters.httpHeaders);
345
- if (mParameters.earlyRequests) {
349
+ this.bEarlyRequests = mParameters.earlyRequests;
350
+ if (this.bEarlyRequests) {
346
351
  this.oMetaModel.fetchEntityContainer(true);
347
352
  this.initializeSecurityToken();
353
+ this.oRequestor.sendOptimisticBatch();
348
354
  }
349
355
 
350
356
  this.aAllBindings = [];
357
+ // The bindings holding keep-alive contexts without a $$getKeepAlive binding
358
+ this.mKeepAliveBindingsByPath = {};
351
359
  this.mSupportedBindingModes = {
352
360
  OneTime : true,
353
361
  OneWay : true
@@ -359,6 +367,7 @@ sap.ui.define([
359
367
  this.mSupportedBindingModes.TwoWay = true;
360
368
  }
361
369
  this.aPrerenderingTasks = null; // @see #addPrerenderingTask
370
+ this.fnOptimisticBatchEnabler = null;
362
371
  }
363
372
 
364
373
  /**
@@ -660,7 +669,10 @@ sap.ui.define([
660
669
  * <code>true</code> is allowed.
661
670
  * @param {boolean} [mParameters.$$getKeepAliveContext]
662
671
  * Whether this binding is considered for a match when {@link #getKeepAliveContext} is called;
663
- * only the value <code>true</code> is allowed. Supported since 1.99.0
672
+ * only the value <code>true</code> is allowed. Must not be combined with <code>$apply</code>,
673
+ * <code>$$aggregation</code>, <code>$$canonicalPath</code>, or <code>$$sharedRequest</code>.
674
+ * If the binding is relative, <code>$$ownRequest</code> must be set as well.
675
+ * Supported since 1.99.0
664
676
  * @param {string} [mParameters.$$groupId]
665
677
  * The group ID to be used for <b>read</b> requests triggered by this binding; if not
666
678
  * specified, either the parent binding's group ID (if the binding is relative) or the
@@ -1498,53 +1510,111 @@ sap.ui.define([
1498
1510
 
1499
1511
  /**
1500
1512
  * Returns a context with the given path belonging to a matching list binding that has been
1501
- * marked with <code>$$getKeepAliveContext</code> (see {@link #bindList}). If such a context
1502
- * exists, it is returned and kept alive (see
1503
- * {@link sap.ui.model.odata.v4.Context#setKeepAlive}).
1513
+ * marked with <code>$$getKeepAliveContext</code> (see {@link #bindList}). If such a matching
1514
+ * binding can be found, a context is returned and kept alive (see
1515
+ * {@link sap.ui.model.odata.v4.ODataListBinding#getKeepAliveContext}). Since 1.100.0 a
1516
+ * temporary binding is used if no such binding could be found. If such a binding is created or
1517
+ * resolved later, the context and its data are transferred to it, and the temporary binding is
1518
+ * destroyed again.
1519
+ *
1520
+ * A <code>$$getKeepAliveContext</code> binding matches if its resolved binding path is the
1521
+ * collection path of the context. If the context is created using a temporary binding and the
1522
+ * parameters of the <code>$$getKeepAliveContext</code> binding differ from the given
1523
+ * <code>mParameters</code> (except <code>$$groupId</code> which is especially used for the
1524
+ * context), that binding later runs into an error when trying to read data.
1525
+ *
1526
+ * <b>Note</b>: The context received by this function may change its
1527
+ * {@link sap.ui.model.odata.v4.Context#getBinding binding} during its lifetime.
1504
1528
  *
1505
1529
  * @param {string} sPath
1506
1530
  * A list context path to an entity
1507
1531
  * @param {boolean} [bRequestMessages]
1508
1532
  * Whether to request messages for the context's entity
1533
+ * @param {object} [mParameters]
1534
+ * Parameters for the context or the temporary binding; supported since 1.100.0. All custom
1535
+ * query options and the following binding-specific parameters for a list binding may be given
1536
+ * (see {@link #bindList} for details).
1537
+ * @param {string} [mParameters.$$groupId]
1538
+ * The group ID used for read requests for the context's entity or its properties. If not
1539
+ * given, the model's {@link #getGroupId group ID} is used
1540
+ * @param {boolean} [mParameters.$$patchWithoutSideEffects]
1541
+ * Whether implicit loading of side effects via PATCH requests is switched off
1542
+ * @param {string} [mParameters.$$updateGroupId]
1543
+ * The group ID to be used for <b>update</b> requests triggered by the context's binding
1509
1544
  * @returns {sap.ui.model.odata.v4.Context|undefined}
1510
- * The context, or <code>undefined</code> if such a binding does not exist or does not have
1511
- * such a context
1545
+ * The context, or <code>undefined</code> if a binding with a suspended root binding matches
1546
+ * and has no context with that path.
1512
1547
  * @throws {Error} If
1513
1548
  * <ul>
1514
1549
  * <li> the model does not use the <code>autoExpandSelect</code> parameter,
1550
+ * <li> an invalid parameter was supplied,
1515
1551
  * <li> the path is not a list context path to an entity,
1516
1552
  * <li> multiple list bindings with <code>$$getKeepAliveContext</code> match, or
1517
1553
  * <li> {@link sap.ui.model.odata.v4.Context#setKeepAlive} fails
1518
1554
  * </ul>
1519
1555
  *
1520
1556
  * @public
1521
- * @see sap.ui.model.odata.v4.ODataListBinding#getKeepAliveContext
1522
1557
  * @since 1.99.0
1523
1558
  */
1524
- ODataModel.prototype.getKeepAliveContext = function (sPath, bRequestMessages) {
1525
- var aListBindings,
1526
- sListPath,
1527
- iPredicateIndex = sPath.indexOf("(", sPath.lastIndexOf("/")),
1528
- that = this;
1559
+ ODataModel.prototype.getKeepAliveContext = function (sPath, bRequestMessages, mParameters) {
1560
+ var oListBinding,
1561
+ aListBindings,
1562
+ sListPath;
1529
1563
 
1530
1564
  if (!this.bAutoExpandSelect) {
1531
1565
  throw new Error("Missing parameter autoExpandSelect");
1532
1566
  }
1533
- if (sPath[0] !== "/" || iPredicateIndex < 0 || !sPath.endsWith(")")) {
1567
+ if (sPath[0] !== "/") {
1534
1568
  throw new Error("Not a list context path to an entity: " + sPath);
1535
1569
  }
1536
- sListPath = sPath.slice(0, iPredicateIndex);
1537
- aListBindings = this.aAllBindings.filter(function (oBinding) {
1538
- return oBinding.mParameters && oBinding.mParameters.$$getKeepAliveContext
1539
- && that.resolve(oBinding.getPath(), oBinding.getContext()) === sListPath;
1570
+ mParameters = mParameters || {};
1571
+ // Only excess parameters are rejected here; the correctness is checked by ODLB
1572
+ Object.keys(mParameters).forEach(function (sParameter) {
1573
+ if (sParameter.startsWith("sap-") && !sParameter.startsWith("sap-valid-")
1574
+ || sParameter[0] === "$" && !aGetKeepAliveParameters.includes(sParameter)) {
1575
+ throw new Error("Invalid parameter: " + sParameter);
1576
+ }
1540
1577
  });
1541
-
1542
- if (aListBindings.length > 1) {
1543
- throw new Error("Multiple bindings with $$getKeepAliveContext for: " + sPath);
1578
+ sListPath = sPath.slice(0, this.getPredicateIndex(sPath));
1579
+ oListBinding = this.mKeepAliveBindingsByPath[sListPath];
1580
+ if (!oListBinding) {
1581
+ aListBindings = this.aAllBindings.filter(function (oBinding) {
1582
+ if (oBinding.mParameters && oBinding.mParameters.$$getKeepAliveContext) {
1583
+ oBinding.removeCachesAndMessages(sListPath.slice(1), true);
1584
+ }
1585
+ return oBinding.isKeepAliveBindingFor && oBinding.isKeepAliveBindingFor(sListPath);
1586
+ });
1587
+ if (aListBindings.length > 1) {
1588
+ throw new Error("Multiple bindings with $$getKeepAliveContext for: " + sPath);
1589
+ }
1590
+ oListBinding = aListBindings[0];
1591
+ if (!oListBinding) {
1592
+ oListBinding = this.bindList(sListPath, undefined, undefined, undefined,
1593
+ mParameters);
1594
+ this.mKeepAliveBindingsByPath[sListPath] = oListBinding;
1595
+ }
1544
1596
  }
1545
- if (aListBindings.length) {
1546
- return aListBindings[0].getKeepAliveContext(sPath, bRequestMessages);
1597
+
1598
+ return oListBinding.getKeepAliveContext(sPath, bRequestMessages, mParameters.$$groupId);
1599
+ };
1600
+
1601
+ /**
1602
+ * Returns the index of the key predicate in the last segment of the given path.
1603
+ *
1604
+ * @param {string} sPath - The path
1605
+ * @returns {number} The index of the key predicate
1606
+ * @throws {Error} If the last segment contains no key predicate
1607
+ *
1608
+ * @private
1609
+ */
1610
+ ODataModel.prototype.getPredicateIndex = function (sPath) {
1611
+ var iPredicateIndex = sPath.indexOf("(", sPath.lastIndexOf("/"));
1612
+
1613
+ if (iPredicateIndex < 0 || !sPath.endsWith(")")) {
1614
+ throw new Error("Not a list context path to an entity: " + sPath);
1547
1615
  }
1616
+
1617
+ return iPredicateIndex;
1548
1618
  };
1549
1619
 
1550
1620
  /**
@@ -1755,6 +1825,24 @@ sap.ui.define([
1755
1825
  });
1756
1826
  };
1757
1827
 
1828
+ /**
1829
+ * Returns and releases the temporary keep-alive binding for the given path.
1830
+ *
1831
+ * @param {string} sPath - The path
1832
+ * @returns {sap.ui.model.odata.v4.ODataListBinding|undefined}
1833
+ * The binding or <code>undefined</code> if there is none
1834
+ *
1835
+ * @private
1836
+ */
1837
+ ODataModel.prototype.releaseKeepAliveBinding = function (sPath) {
1838
+ var oBinding = this.mKeepAliveBindingsByPath[sPath];
1839
+
1840
+ if (oBinding) {
1841
+ delete this.mKeepAliveBindingsByPath[sPath];
1842
+ return oBinding;
1843
+ }
1844
+ };
1845
+
1758
1846
  /**
1759
1847
  * Reports a technical error by firing a <code>messageChange</code> event with a new message and
1760
1848
  * logging the error to the console. Takes care that the error is only reported once via the
@@ -2032,6 +2120,79 @@ sap.ui.define([
2032
2120
  throw new Error("Unsupported operation: v4.ODataModel#setLegacySyntax");
2033
2121
  };
2034
2122
 
2123
+ /**
2124
+ * Getter for the optimistic batch enabler callback function; see
2125
+ * {@link sap.ui.model.odata.v4.ODataModel#setOptimisticBatchEnabler}.
2126
+ *
2127
+ *
2128
+ * @returns {function(string)}
2129
+ * The optimistic batch enabler callback function
2130
+ *
2131
+ * @experimental As of version 1.100.0
2132
+ * @private
2133
+ * @ui5-restricted sap.fe
2134
+ */
2135
+ ODataModel.prototype.getOptimisticBatchEnabler = function () {
2136
+ return this.fnOptimisticBatchEnabler;
2137
+ };
2138
+
2139
+ /**
2140
+ * Setter for the optimistic batch enabler callback function. Setting this callback activates
2141
+ * the optimistic batch feature. Via the callback the optimistic batch behavior can be enabled
2142
+ * or disabled by returning either a boolean or a promise resolving with a boolean.
2143
+ * As its first argument the callback gets the <code>window.location.href</code> at the point in
2144
+ * time when the OData model is instantiated.
2145
+ *
2146
+ * If the callback returns or resolves with <code>true</code>, the OData model remembers the
2147
+ * first sent $batch request. With the next model instantiation for the same key, this
2148
+ * remembered $batch request will be sent at the earliest point in time in order to have the
2149
+ * response already available when the first $batch request is triggered from the UI or the
2150
+ * binding. If the returned promise is rejected, this error will be reported and the optimistic
2151
+ * batch will be disabled.
2152
+ *
2153
+ * There are several preconditions on the usage of this API:
2154
+ * <ul>
2155
+ * <li> Optimistic batch handling requires the "earlyRequests" model parameter; see
2156
+ * {@link sap.ui.model.odata.v4.ODataModel#constructor},
2157
+ * <li> the setter has to be called before the first $batch request is sent,
2158
+ * <li> the setter may only be called once for an OData model,
2159
+ * <li> the callback has to return a boolean, or a <code>Promise</code> resolving with a
2160
+ * boolean
2161
+ * <li> the callback is not called if the first $batch request is modifying, means that it
2162
+ * contains not only GET requests.
2163
+ * </ul>
2164
+ *
2165
+ * @param {function(string):Promise<boolean>|boolean} fnOptimisticBatchEnabler
2166
+ * The optimistic batch enabler callback controlling whether optimistic batch should be used
2167
+ * @throws {Error} If
2168
+ * <ul>
2169
+ * <li> the earlyRequests model parameter is not set,
2170
+ * <li> the setter is called after the first $batch request is sent,
2171
+ * <li> the given <code>fnOptimisticBatchEnabler</code> parameter is not a function
2172
+ * <li> the setter is called more than once
2173
+ * </ul>
2174
+ *
2175
+ * @experimental As of version 1.100.0
2176
+ * @private
2177
+ * @ui5-restricted sap.fe
2178
+ */
2179
+ ODataModel.prototype.setOptimisticBatchEnabler = function (fnOptimisticBatchEnabler) {
2180
+ if (!this.bEarlyRequests) {
2181
+ throw new Error("The earlyRequests model parameter is not set");
2182
+ }
2183
+ if (this.oRequestor.isFirstBatchSent()) {
2184
+ throw new Error("The setter is called after the first $batch request is sent");
2185
+ }
2186
+ if (typeof fnOptimisticBatchEnabler !== "function") {
2187
+ throw new Error("The given fnOptimisticBatchEnabler parameter is not a function");
2188
+ }
2189
+ if (this.fnOptimisticBatchEnabler) {
2190
+ throw new Error("The setter is called more than once");
2191
+ }
2192
+
2193
+ this.fnOptimisticBatchEnabler = fnOptimisticBatchEnabler;
2194
+ };
2195
+
2035
2196
  /**
2036
2197
  * Submits the requests associated with the given group ID in one batch request. Requests from
2037
2198
  * subsequent calls to this method for the same group ID may be combined in one batch request
@@ -176,20 +176,20 @@ sap.ui.define([
176
176
 
177
177
  /**
178
178
  * Decides whether the given query options can be fulfilled by this binding and merges them into
179
- * this binding's aggregated query options if necessary.
179
+ * this binding's <code>mAggregatedQueryOptions</code> if necessary.
180
180
  *
181
181
  * The query options cannot be fulfilled if there are conflicts. A conflict is an option other
182
- * than $expand, $select and $count which has different values in the aggregate and the options
183
- * to be merged. This is checked recursively.
182
+ * than <code>$expand</code>, <code>$select</code> and <code>$count</code> which has different
183
+ * values in the aggregate and the options to be merged. This is checked recursively.
184
184
  *
185
- * Merging is not necessary if the binding's cache has already requested its data and the query
186
- * options would extend $select. In this case the binding's cache will request the resp.
187
- * property and add it when it is accessed.
185
+ * If the cache is already immutable the query options are aggregated into
186
+ * <code>mLateQueryOptions</code>. Then they also cannot be fulfilled if they contain a
187
+ * <code>$expand</code> using a collection-valued navigation property.
188
188
  *
189
- * Note: * is an item in $select and $expand just as others, that is it must be part of the
190
- * array of items and one must not ignore the other items if * is provided. See
191
- * "5.1.2 System Query Option $expand" and "5.1.3 System Query Option $select" in specification
192
- * "OData Version 4.0 Part 2: URL Conventions".
189
+ * Note: * is an item in <code>$select</code> and <code>$expand</code> just as others, that is
190
+ * it must be part of the array of items and one must not ignore the other items if * is
191
+ * provided. See "5.1.2 System Query Option $expand" and "5.1.3 System Query Option $select" in
192
+ * specification "OData Version 4.0 Part 2: URL Conventions".
193
193
  *
194
194
  * @param {object} mQueryOptions - The query options to be merged
195
195
  * @param {string} sBaseMetaPath - This binding's meta path
@@ -203,7 +203,6 @@ sap.ui.define([
203
203
  bCacheImmutable, bIsProperty) {
204
204
  var mAggregatedQueryOptionsClone = _Helper.merge({},
205
205
  bCacheImmutable && this.mLateQueryOptions || this.mAggregatedQueryOptions),
206
- bChanged = false,
207
206
  that = this;
208
207
 
209
208
  /*
@@ -235,7 +234,6 @@ sap.ui.define([
235
234
  .fetchObject(sExpandMetaPath).getResult().$isCollection) {
236
235
  return false;
237
236
  }
238
- bChanged = true;
239
237
  }
240
238
  return merge(mAggregatedQueryOptions.$expand[sExpandPath],
241
239
  mQueryOptions0.$expand[sExpandPath], sExpandMetaPath, true, bAddExpand);
@@ -249,7 +247,6 @@ sap.ui.define([
249
247
  */
250
248
  function mergeSelectPath(sSelectPath) {
251
249
  if (mAggregatedQueryOptions.$select.indexOf(sSelectPath) < 0) {
252
- bChanged = true;
253
250
  mAggregatedQueryOptions.$select.push(sSelectPath);
254
251
  }
255
252
  return true;
@@ -290,7 +287,7 @@ sap.ui.define([
290
287
  if (merge(mAggregatedQueryOptionsClone, mQueryOptions, sBaseMetaPath)) {
291
288
  if (!bCacheImmutable) {
292
289
  this.mAggregatedQueryOptions = mAggregatedQueryOptionsClone;
293
- } else if (bChanged) {
290
+ } else {
294
291
  this.mLateQueryOptions = mAggregatedQueryOptionsClone;
295
292
  }
296
293
  return true;
@@ -819,7 +816,8 @@ sap.ui.define([
819
816
 
820
817
  // Note: in operation bindings mAggregatedQueryOptions misses the options from
821
818
  // $$inheritExpandSelect
822
- if (oCache && !oCache.hasSentRequest() && !that.oOperation) {
819
+ // If the cache is immutable, only mLateQueryOptions may have changed
820
+ if (!bCacheImmutable && oCache && !oCache.hasSentRequest() && !that.oOperation) {
823
821
  if (that.bSharedRequest) {
824
822
  oCache.setActive(false);
825
823
  oCache = that.createAndSetCache(that.mAggregatedQueryOptions,
@@ -1020,8 +1018,8 @@ sap.ui.define([
1020
1018
  }
1021
1019
  if (oCache !== undefined) {
1022
1020
  // Pending changes for this cache are only possible when there is a cache already
1023
- if (oCache && oCache.hasPendingChangesForPath("", false,
1024
- bIgnoreKeptAlive && oDependent.mParameters.$$ownRequest)) {
1021
+ if (oCache && oCache.hasPendingChangesForPath("", false, bIgnoreKeptAlive
1022
+ && oDependent.mParameters && oDependent.mParameters.$$ownRequest)) {
1025
1023
  return true;
1026
1024
  }
1027
1025
  } else if (oDependent.hasPendingChangesForPath("")) {
@@ -1069,36 +1067,6 @@ sap.ui.define([
1069
1067
  return false;
1070
1068
  };
1071
1069
 
1072
- /**
1073
- * Refreshes all dependent bindings with the given parameters and waits for them to have
1074
- * finished.
1075
- *
1076
- * @param {string} sResourcePathPrefix
1077
- * The resource path prefix which is used to delete the dependent caches and corresponding
1078
- * messages; may be "" but not <code>undefined</code>
1079
- * @param {string} [sGroupId]
1080
- * The group ID to be used for refresh
1081
- * @param {boolean} [bCheckUpdate]
1082
- * If <code>true</code>, a property binding is expected to check for updates
1083
- * @param {boolean} [bKeepCacheOnError]
1084
- * If <code>true</code>, the binding data remains unchanged if the refresh fails
1085
- * @returns {sap.ui.base.SyncPromise}
1086
- * A promise resolving when all dependent bindings are refreshed; it is rejected
1087
- * when the refresh fails; the promise is resolved immediately on a suspended binding
1088
- * @throws {Error}
1089
- * If the binding's root binding is suspended and a group ID different from the binding's
1090
- * group ID is given
1091
- *
1092
- * @private
1093
- */
1094
- ODataParentBinding.prototype.refreshDependentBindings = function (sResourcePathPrefix, sGroupId,
1095
- bCheckUpdate, bKeepCacheOnError) {
1096
- return SyncPromise.all(this.getDependentBindings().map(function (oDependentBinding) {
1097
- return oDependentBinding.refreshInternal(sResourcePathPrefix, sGroupId, bCheckUpdate,
1098
- bKeepCacheOnError);
1099
- }));
1100
- };
1101
-
1102
1070
  /**
1103
1071
  * Recursively refreshes all dependent list bindings that have no own cache.
1104
1072
  *
@@ -1278,10 +1246,10 @@ sap.ui.define([
1278
1246
  * @throws {Error}
1279
1247
  * If this binding
1280
1248
  * <ul>
1281
- * <li>is relative to a {@link sap.ui.model.odata.v4.Context},</li>
1282
- * <li>is an operation binding,</li>
1283
- * <li>has {@link sap.ui.model.Binding#isSuspended} set to <code>false</code>,</li>
1284
- * <li>is not a root binding. Use {@link #getRootBinding} to determine the root binding.</li>
1249
+ * <li>is relative to a {@link sap.ui.model.odata.v4.Context},
1250
+ * <li>is an operation binding,
1251
+ * <li>has {@link sap.ui.model.Binding#isSuspended} set to <code>false</code>,
1252
+ * <li>is not a root binding. Use {@link #getRootBinding} to determine the root binding.
1285
1253
  * </ul>
1286
1254
  *
1287
1255
  * @public
@@ -1341,12 +1309,12 @@ sap.ui.define([
1341
1309
  *
1342
1310
  * @throws {Error}
1343
1311
  * If this binding
1344
- * <ul>
1345
- * <li>is relative to a {@link sap.ui.model.odata.v4.Context},</li>
1346
- * <li>is an operation binding,</li>
1347
- * <li>has {@link sap.ui.model.Binding#isSuspended} set to <code>true</code>,</li>
1348
- * <li>has pending changes that cannot be ignored,</li>
1349
- * <li>is not a root binding. Use {@link #getRootBinding} to determine the root binding.</li>
1312
+ * <ul>
1313
+ * <li>is relative to a {@link sap.ui.model.odata.v4.Context},
1314
+ * <li>is an operation binding,
1315
+ * <li>has {@link sap.ui.model.Binding#isSuspended} set to <code>true</code>,
1316
+ * <li>has pending changes that cannot be ignored,
1317
+ * <li>is not a root binding. Use {@link #getRootBinding} to determine the root binding.
1350
1318
  * </ul>
1351
1319
  *
1352
1320
  * @public
@@ -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.99.0
45
+ * @version 1.100.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
@@ -269,7 +269,8 @@ sap.ui.define([
269
269
  && !bIsMeta) {
270
270
  vType = oMetaModel.fetchUI5Type(sResolvedPath);
271
271
  }
272
- if (arguments.length < 4) {
272
+ if (vValue === undefined) {
273
+ // if called via #onChange, we need to fetch implicit values
273
274
  vValue = this.oCachePromise.then(function (oCache) {
274
275
  var sDataPath, sMetaPath;
275
276