@openui5/sap.ui.core 1.99.0 → 1.100.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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
@@ -64,7 +64,8 @@ sap.ui.define([
64
64
 
65
65
  var sClassName = "sap.ui.model.odata.v2.ODataModel",
66
66
  MessageType = coreLibrary.MessageType,
67
- mMessageType2Severity = {};
67
+ mMessageType2Severity = {},
68
+ aRequestSideEffectsParametersAllowList = ["groupId", "urlParameters"];
68
69
 
69
70
  mMessageType2Severity[MessageType.Error] = 0;
70
71
  mMessageType2Severity[MessageType.Warning] = 1;
@@ -201,7 +202,7 @@ sap.ui.define([
201
202
  * This model is not prepared to be inherited from.
202
203
  *
203
204
  * @author SAP SE
204
- * @version 1.99.0
205
+ * @version 1.100.1
205
206
  *
206
207
  * @public
207
208
  * @alias sap.ui.model.odata.v2.ODataModel
@@ -345,6 +346,9 @@ sap.ui.define([
345
346
  this.bPersistTechnicalMessages = bPersistTechnicalMessages === undefined
346
347
  ? undefined : !!bPersistTechnicalMessages;
347
348
  this.oCreatedContextsCache = new _CreatedContextsCache();
349
+ // a list of functions to be called to clean up expanded lists when the side effects
350
+ // have been processed
351
+ this.aSideEffectCleanUpFunctions = [];
348
352
 
349
353
  if (oMessageParser) {
350
354
  oMessageParser.setProcessor(this);
@@ -1469,11 +1473,13 @@ sap.ui.define([
1469
1473
  * @param {string} [sPathFromCanonicalParent] The path concatenated from the canonical path of
1470
1474
  * the parent and the navigation property when importing data for a 0..1 navigation
1471
1475
  * property via a recursive call to this method
1476
+ * @param {boolean} [bSideEffects]
1477
+ * Whether the data to import results from a side-effects request
1472
1478
  * @return {string|string[]} Key of imported data or array of keys in case of nested entries
1473
1479
  * @private
1474
1480
  */
1475
1481
  ODataModel.prototype._importData = function(oData, mChangedEntities, oResponse, sPath,
1476
- sDeepPath, sKey, bFunctionImport, sPathFromCanonicalParent) {
1482
+ sDeepPath, sKey, bFunctionImport, sPathFromCanonicalParent, bSideEffects) {
1477
1483
  var that = this,
1478
1484
  aList, oResult, oEntry, oCurrentEntry;
1479
1485
  sPath = sPath || "";
@@ -1483,7 +1489,10 @@ sap.ui.define([
1483
1489
  aList = [];
1484
1490
  each(oData.results, function(i, entry) {
1485
1491
  var sKey = that._getKey(entry);
1486
- sKey = that._importData(entry, mChangedEntities, oResponse, sPath.substr(0, sPath.lastIndexOf("/")), sDeepPath, sKey);
1492
+ sKey = that._importData(entry, mChangedEntities, oResponse,
1493
+ sPath.substr(0, sPath.lastIndexOf("/")), sDeepPath, sKey,
1494
+ /*bFunctionImport*/undefined, /*sPathFromCanonicalParent*/undefined,
1495
+ bSideEffects);
1487
1496
  if (sKey) {
1488
1497
  aList.push(sKey);
1489
1498
  }
@@ -1537,9 +1546,21 @@ sap.ui.define([
1537
1546
  var sNewDeepPath = sDeepPath + "/" + sName;
1538
1547
 
1539
1548
  oResult = that._importData(oProperty, mChangedEntities, oResponse, sNewPath,
1540
- sNewDeepPath, undefined, false, "/" + sKey + "/" + sName);
1549
+ sNewDeepPath, undefined, false, "/" + sKey + "/" + sName, bSideEffects);
1541
1550
  if (Array.isArray(oResult)) {
1542
- oEntry[sName] = { __list: oResult };
1551
+ oEntry[sName] = {__list: oResult};
1552
+ if (bSideEffects) {
1553
+ oEntry[sName].__list.sideEffects = true;
1554
+ that.aSideEffectCleanUpFunctions.push(function () {
1555
+ // maybe check oEntry[sName].__list.sideEffects before deleting
1556
+ // the navigation property; this can happen if an
1557
+ // ODataModel#read is triggered with an expand of the same
1558
+ // "to N" navigation property as requested with
1559
+ // ODataModel#requestSideEffects; see BLI CPOUI5MODELS-656
1560
+ delete oEntry[sName];
1561
+ });
1562
+
1563
+ }
1543
1564
  } else {
1544
1565
  if (oCurrentEntry[sName] && oCurrentEntry[sName].__ref) {
1545
1566
  if (oCurrentEntry[sName].__ref !== oResult) {
@@ -1943,7 +1964,6 @@ sap.ui.define([
1943
1964
  /**
1944
1965
  * Creates a new property binding for this model.
1945
1966
  *
1946
- * @see sap.ui.model.Model.prototype.bindProperty
1947
1967
  * @param {string} sPath Path pointing to the property that should be bound;
1948
1968
  * either an absolute path or a path relative to a given <code>oContext</code>
1949
1969
  * @param {object} [oContext] A context object for the new binding
@@ -1952,14 +1972,20 @@ sap.ui.define([
1952
1972
  * Whether this binding does not propagate model messages to the control; supported since
1953
1973
  * 1.82.0. Some composite types like {@link sap.ui.model.type.Currency} automatically ignore
1954
1974
  * model messages for some of their parts depending on their format options; setting this
1955
- * parameter to <code>true</code> or <code>false</code> overrules the automatism of the type.
1975
+ * parameter to <code>true</code> or <code>false</code> overrules the automatism of the type
1956
1976
  *
1957
1977
  * For example, a binding for a currency code is used in a composite binding for rendering the
1958
1978
  * proper number of decimals, but the currency code is not displayed in the attached control.
1959
1979
  * In that case, messages for the currency code shall not be displayed at that control, only
1960
- * messages for the amount.
1980
+ * messages for the amount
1981
+ * @param {boolean} [mParameters.useUndefinedIfUnresolved]
1982
+ * Whether the value of the created property binding is <code>undefined</code> if it is
1983
+ * unresolved; if not set, its value is <code>null</code>. Supported since 1.100.0
1961
1984
  * @returns {sap.ui.model.PropertyBinding} The new property binding
1985
+ *
1962
1986
  * @public
1987
+ * @see sap.ui.model.Model#bindProperty
1988
+ * @see #getProperty
1963
1989
  */
1964
1990
  ODataModel.prototype.bindProperty = function(sPath, oContext, mParameters) {
1965
1991
  var oBinding = new ODataPropertyBinding(this, sPath, oContext, mParameters);
@@ -2789,18 +2815,27 @@ sap.ui.define([
2789
2815
 
2790
2816
  /**
2791
2817
  * Returns the value for the property with the given <code>sPath</code>.
2792
- *
2793
- * If the path points to a navigation property which has been loaded via <code>$expand</code> then the <code>bIncludeExpandEntries</code>
2794
- * parameter determines if the navigation property should be included in the returned value or not.
2795
- * Please note that this currently works for 1..1 navigation properties only.
2818
+ * Since 1.100, a path starting with &quot;@$ui5.&quot; which represents an instance annotation
2819
+ * is supported. The following instance annotations are allowed; they return information on the
2820
+ * given <code>oContext<code>, which must be set and be an
2821
+ * {@link sap.ui.model.odata.v2.Context}:
2822
+ * <ul>
2823
+ * <li><code>@$ui5.context.isInactive</code>: The return value of
2824
+ * {@link sap.ui.model.odata.v2.Context#isInactive}</li>
2825
+ * <li><code>@$ui5.context.isTransient</code>: The return value of
2826
+ * {@link sap.ui.model.odata.v2.Context#isTransient}</li>
2827
+ * </ul>
2796
2828
  *
2797
2829
  * @param {string} sPath Path/name of the property
2798
2830
  * @param {object} [oContext] Context if available to access the property value
2799
- * @param {boolean} [bIncludeExpandEntries=false] @deprecated Please use {@link #getObject} function with select/expand parameters instead.
2800
- * This parameter should be set when a URI or custom parameter with a <code>$expand</code> system query option was used to retrieve associated entries embedded/inline.
2801
- * If true then the <code>getProperty</code> function returns a desired property value/entry and includes the associated expand entries (if any).
2802
- * Note: A copy and not a reference of the entry will be returned.
2831
+ * @param {boolean} [bIncludeExpandEntries=false]
2832
+ * Deprecated, use {@link #getObject} function with 'select' and 'expand' parameters instead.
2833
+ * Whether entities for navigation properties of this property which have been read via
2834
+ * <code>$expand</code> are part of the return value.
2803
2835
  * @returns {any} Value of the property
2836
+ * @throws {Error}
2837
+ * If the instance annotation is not supported
2838
+ *
2804
2839
  * @public
2805
2840
  */
2806
2841
  ODataModel.prototype.getProperty = function(sPath, oContext, bIncludeExpandEntries) {
@@ -2997,26 +3032,42 @@ sap.ui.define([
2997
3032
  };
2998
3033
 
2999
3034
  /**
3000
- * @param {string} sPath Binding path
3001
- * @param {object} [oContext] Binding context
3002
- * @param {boolean} [bOriginalValue] Whether to return the original value read from the server even if changes where made
3003
- * @returns {any} vValue Value for the given path/context
3035
+ * Returns the value of the entity or entity property referenced by the given <code>sPath</code>
3036
+ * and <code>oContext</code>.
3037
+ *
3038
+ * @param {string} sPath
3039
+ * Binding path
3040
+ * @param {object} [oContext]
3041
+ * Binding context
3042
+ * @param {boolean} [bOriginalValue]
3043
+ * Whether to return the original value read from the server even if changes where made
3044
+ * @param {boolean} [bUseUndefinedIfUnresolved]
3045
+ * Whether to return <code>undefined</code> if the given path and context do not yield a
3046
+ * resolved path; if not set, the method returns <code>null</code>
3047
+ * @returns {any} vValue
3048
+ * Value for the given path/context
3049
+ * @throws {Error}
3050
+ * If the instance annotation is not supported
3051
+ *
3004
3052
  * @private
3005
3053
  */
3006
- ODataModel.prototype._getObject = function(sPath, oContext, bOriginalValue) {
3054
+ ODataModel.prototype._getObject = function(sPath, oContext, bOriginalValue,
3055
+ bUseUndefinedIfUnresolved) {
3007
3056
  var oChangedNode, oCodeListPromise, sCodeListTerm, sDataPath, sKey, oMetaContext,
3008
3057
  oMetaModel, sMetaPath, oOrigNode, sResolvedPath, iSeparator,
3009
- oNode = this.isLegacySyntax() ? this.oData : null;
3058
+ vUnresolvedDefault = bUseUndefinedIfUnresolved ? undefined : null,
3059
+ oNode = this.isLegacySyntax() ? this.oData : vUnresolvedDefault;
3010
3060
 
3011
3061
  sResolvedPath = this.resolve(sPath, oContext, this.bCanonicalRequests);
3012
3062
  if (!sResolvedPath && this.bCanonicalRequests) {
3013
3063
  sResolvedPath = this.resolve(sPath, oContext);
3014
3064
  }
3015
-
3016
3065
  if (!sResolvedPath) {
3017
3066
  return oNode;
3018
3067
  }
3019
-
3068
+ if (sPath && sPath.startsWith("@$ui5.")) {
3069
+ return this._getInstanceAnnotationValue(sPath, oContext);
3070
+ }
3020
3071
  //check for metadata path
3021
3072
  if (this._isMetadataPath(sResolvedPath)) {
3022
3073
  if (this.oMetadata && this.oMetadata.isLoaded()) {
@@ -3085,13 +3136,38 @@ sap.ui.define([
3085
3136
  iIndex++;
3086
3137
  }
3087
3138
  }
3088
- //if we have a changed Entity/complex type we need to extend it with the backend data
3139
+ // if we have a changed Entity/complex type we need to extend it with the backend data
3089
3140
  if (isPlainObject(oChangedNode)) {
3090
3141
  oNode = bOriginalValue ? oOrigNode : merge({}, oOrigNode, oChangedNode);
3091
3142
  }
3092
3143
  return oNode;
3093
3144
  };
3094
3145
 
3146
+ /**
3147
+ * Gets the instance annotation value for the given path corresponding to the instance
3148
+ * annotation and the given context. The following instance annotations are supported:
3149
+ * <ul>
3150
+ * <li><code>@$ui5.context.isInactive</code></li>
3151
+ * <li><code>@$ui5.context.isTransient</code></li>
3152
+ * </ul>
3153
+ *
3154
+ * @param {string} sPath Binding path
3155
+ * @param {sap.ui.model.odata.v2.Context} oContext Binding context
3156
+ * @returns {any} The result of the processed instance annotation
3157
+ * @throws {Error} If the instance annotation is not supported
3158
+ *
3159
+ * @private
3160
+ */
3161
+ ODataModel.prototype._getInstanceAnnotationValue = function (sPath, oContext) {
3162
+ if (sPath === "@$ui5.context.isInactive") {
3163
+ return oContext.isInactive();
3164
+ }
3165
+ if (sPath === "@$ui5.context.isTransient") {
3166
+ return oContext.isTransient();
3167
+ }
3168
+ throw new Error("Unsupported instance annotation: " + sPath);
3169
+ };
3170
+
3095
3171
  /**
3096
3172
  * Update the security token, if token handling is enabled and token is not available yet
3097
3173
  * @private
@@ -3263,6 +3339,10 @@ sap.ui.define([
3263
3339
  if (fnSuccess) {
3264
3340
  fnSuccess(oData, oResponse);
3265
3341
  }
3342
+ that.aSideEffectCleanUpFunctions.forEach(function (fnCleanUp) {
3343
+ fnCleanUp();
3344
+ });
3345
+ that.aSideEffectCleanUpFunctions = [];
3266
3346
  fnResolveCompleted();
3267
3347
  }
3268
3348
 
@@ -3282,6 +3362,7 @@ sap.ui.define([
3282
3362
  if (fnError) {
3283
3363
  fnError(oError);
3284
3364
  }
3365
+ // no need to clean up side-effects expands as no data was imported
3285
3366
  fnResolveCompleted();
3286
3367
  }
3287
3368
 
@@ -4181,11 +4262,14 @@ sap.ui.define([
4181
4262
  //need a deep data copy for import
4182
4263
  oImportData = merge({}, oResultData);
4183
4264
  if (oRequest.key || oRequest.created) {
4184
- that._importData(oImportData, mLocalGetEntities, oResponse, undefined,
4185
- undefined, undefined, bIsFunction);
4265
+ // no need to pass sideEffects because side-effects requests don't have a key or
4266
+ // a created property attached to the request
4267
+ that._importData(oImportData, mLocalGetEntities, oResponse, /*sPath*/undefined,
4268
+ /*sDeepPath*/undefined, /*sKey*/undefined, bIsFunction);
4186
4269
  } else {
4187
4270
  that._importData(oImportData, mLocalGetEntities, oResponse, sPath,
4188
- oRequest.deepPath, undefined, bIsFunction);
4271
+ oRequest.deepPath, /*sKey*/undefined, bIsFunction,
4272
+ /*sPathFromCanonicalParent*/undefined, oRequest.sideEffects);
4189
4273
  }
4190
4274
  oResponse._imported = true;
4191
4275
  }
@@ -4704,11 +4788,13 @@ sap.ui.define([
4704
4788
  * or changed resources are updated. It is considered only if
4705
4789
  * {@link sap.ui.model.odata.MessageScope.BusinessObject} is set and if the OData service
4706
4790
  * supports message scope.
4791
+ * @param {boolean} [bSideEffects]
4792
+ * Whether the request is to read side effects
4707
4793
  * @return {object} Request object
4708
4794
  * @private
4709
4795
  */
4710
4796
  ODataModel.prototype._createRequest = function(sUrl, sDeepPath, sMethod, mHeaders, oData, sETag,
4711
- bAsync, bUpdateAggregatedMessages) {
4797
+ bAsync, bUpdateAggregatedMessages, bSideEffects) {
4712
4798
  var oRequest;
4713
4799
 
4714
4800
  bAsync = bAsync !== false;
@@ -4758,16 +4844,18 @@ sap.ui.define([
4758
4844
  }
4759
4845
 
4760
4846
  oRequest = {
4847
+ async : bAsync,
4848
+ deepPath : sDeepPath,
4761
4849
  headers : mHeaders,
4762
- requestUri : sUrl,
4763
4850
  method : sMethod,
4764
- user : this.sUser,
4765
4851
  password : this.sPassword,
4766
- async : bAsync,
4767
- deepPath : sDeepPath,
4768
- updateAggregatedMessages : bUpdateAggregatedMessages
4852
+ requestUri : sUrl,
4853
+ updateAggregatedMessages : bUpdateAggregatedMessages,
4854
+ user : this.sUser
4769
4855
  };
4770
-
4856
+ if (bSideEffects) {
4857
+ oRequest.sideEffects = true;
4858
+ }
4771
4859
  if (oData) {
4772
4860
  oRequest.data = oData;
4773
4861
  }
@@ -5505,6 +5593,24 @@ sap.ui.define([
5505
5593
  * @public
5506
5594
  */
5507
5595
  ODataModel.prototype.read = function(sPath, mParameters) {
5596
+ return this._read(sPath, mParameters);
5597
+ };
5598
+
5599
+ /**
5600
+ * Triggers a <code>GET</code> request to the OData service.
5601
+ *
5602
+ * @param {string} sPath
5603
+ * The path as specified in {@link #read}
5604
+ * @param {object} [mParameters]
5605
+ * The parameters as specified in {@link #read}
5606
+ * @param {boolean} [bSideEffects]
5607
+ * Whether to read data as side effects
5608
+ * @return {object}
5609
+ * An object which has an <code>abort</code> function to abort the current request.
5610
+ *
5611
+ * @private
5612
+ */
5613
+ ODataModel.prototype._read = function(sPath, mParameters, bSideEffects) {
5508
5614
  var bCanonical, oContext, fnError, sETag, aFilters, sGroupId, mHeaders, sMethod, oRequest,
5509
5615
  aSorters, fnSuccess, bUpdateAggregatedMessages, aUrlParams, mUrlParams,
5510
5616
  that = this;
@@ -5569,7 +5675,7 @@ sap.ui.define([
5569
5675
  sUrl = that._createRequestUrlWithNormalizedPath(sResourcePath, aUrlParams,
5570
5676
  that.bUseBatch);
5571
5677
  oRequest = that._createRequest(sUrl, sDeepPath, sMethod, mHeaders, null, sETag,
5572
- undefined, bUpdateAggregatedMessages);
5678
+ undefined, bUpdateAggregatedMessages, bSideEffects);
5573
5679
 
5574
5680
  mRequests = that.mRequests;
5575
5681
  if (sGroupId in that.mDeferredGroups) {
@@ -5590,6 +5696,79 @@ sap.ui.define([
5590
5696
  }
5591
5697
  };
5592
5698
 
5699
+ /**
5700
+ * Requests side effects for the entity referred to by the given context using a GET request
5701
+ * with the given URL parameters, esp. <code>$expand</code> and <code>$select</code>, which
5702
+ * represent the paths affected by side effects on the entity. List bindings which are affected
5703
+ * by the given <code>$expand</code>, and are using custom parameters or filters/sorters in
5704
+ * <code>OperationMode.Server</code> are refreshed with additional GET requests within the same
5705
+ * batch request.
5706
+ *
5707
+ * @param {sap.ui.model.odata.v2.Context} oContext
5708
+ * The context referring to the entity to read side effects for
5709
+ * @param {object} [mParameters]
5710
+ * A map of parameters as specified for {@link sap.ui.model.odata.v2.ODataModel#read}, where
5711
+ * only the following subset of these is supported. The <code>updateAggregatedMessages</code>
5712
+ * parameter is immutably set to <code>true</code>.
5713
+ * @param {string} [mParameters.groupId]
5714
+ * The ID of a request group
5715
+ * @param {Object<string,string>} [mParameters.urlParameters]
5716
+ * URL parameters for the side-effects request as a map from a URL parameter name to its
5717
+ * string value including <code>$expand</code> and <code>$select</code>
5718
+ * @returns {Promise}
5719
+ * The promise on the outcome of the side-effects request; resolves with
5720
+ * <code>undefined</code> if the request is processed successfully, or rejects with an error
5721
+ * object if the request fails
5722
+ * @throws {Error}
5723
+ * If the given parameters map contains any other parameter than those documented above
5724
+ *
5725
+ * @private
5726
+ * @see sap.ui.model.odata.v2.ODataModel#read
5727
+ * @ui5-restricted sap.suite.ui.generic
5728
+ */
5729
+ ODataModel.prototype.requestSideEffects = function (oContext, mParameters) {
5730
+ var sParameterKey,
5731
+ that = this;
5732
+
5733
+ mParameters = mParameters || {};
5734
+ for (sParameterKey in mParameters) {
5735
+ if (!aRequestSideEffectsParametersAllowList.includes(sParameterKey)) {
5736
+ throw new Error("Parameter '" + sParameterKey + "' is not supported");
5737
+ }
5738
+ }
5739
+
5740
+ return new Promise(function (resolve, reject) {
5741
+ var oAffectedEntityTypes = new Set(),
5742
+ sExpands = mParameters.urlParameters && mParameters.urlParameters["$expand"];
5743
+
5744
+ that._read("", {
5745
+ // pass context to keep deep path information for message handling
5746
+ context : oContext,
5747
+ error : reject,
5748
+ groupId : mParameters.groupId,
5749
+ success : function (/*oData, oResponse*/) {
5750
+ resolve();
5751
+ },
5752
+ updateAggregatedMessages : true,
5753
+ urlParameters : mParameters.urlParameters
5754
+ }, true);
5755
+
5756
+ if (sExpands) {
5757
+ sExpands.split(",").forEach(function (sExpand) {
5758
+ var oEntityType = that.oMetadata._getEntityTypeByPath(
5759
+ that.resolve(sExpand, oContext));
5760
+
5761
+ oAffectedEntityTypes.add(oEntityType);
5762
+ });
5763
+ that.getBindings().forEach(function (oBinding) {
5764
+ if (oBinding.isA("sap.ui.model.odata.v2.ODataListBinding")) {
5765
+ oBinding._refreshForSideEffects(oAffectedEntityTypes, mParameters.groupId);
5766
+ }
5767
+ });
5768
+ }
5769
+ });
5770
+ };
5771
+
5593
5772
  /**
5594
5773
  * Return the parsed XML metadata as a Javascript object.
5595
5774
  *
@@ -6137,15 +6316,23 @@ sap.ui.define([
6137
6316
  /**
6138
6317
  * Sets a new value for the given property <code>sPath</code> in the model.
6139
6318
  *
6140
- * If the <code>changeBatchGroup</code> for the changed entity type is set to {@link #setDeferredGroups deferred},
6141
- * changes could be submitted with {@link #submitChanges}. Otherwise the change will be submitted directly.
6319
+ * If the <code>changeBatchGroup</code> for the changed entity type is set to
6320
+ * {@link #setDeferredGroups deferred}, changes could be submitted with {@link #submitChanges}.
6321
+ * Otherwise the change will be submitted directly.
6142
6322
  *
6143
- * @param {string} sPath Path of the property to set
6144
- * @param {any} oValue Value to set the property to
6145
- * @param {sap.ui.model.Context} [oContext=null] The context which will be used to set the property
6146
- * @param {boolean} [bAsyncUpdate] Whether to update other bindings dependent on this property asynchronously
6147
- * @return {boolean} <code>true</code> if the value was set correctly and <code>false</code> if errors occurred
6148
- * like the entry was not found or another entry was already updated.
6323
+ * @param {string} sPath
6324
+ * Path of the property to set
6325
+ * @param {any} oValue
6326
+ * Value to set the property to
6327
+ * @param {sap.ui.model.Context} [oContext=null]
6328
+ * The context which will be used to set the property
6329
+ * @param {boolean} [bAsyncUpdate]
6330
+ * Whether to update other bindings dependent on this property asynchronously
6331
+ * @returns {boolean}
6332
+ * <code>true</code> if the value was set correctly and <code>false</code> if errors occurred
6333
+ * like the entry was not found or another entry was already updated.
6334
+ * @throws {Error}
6335
+ * If setting a value for an instance annotation starting with &quot;@$ui5&quot;
6149
6336
  * @public
6150
6337
  */
6151
6338
  ODataModel.prototype.setProperty = function(sPath, oValue, oContext, bAsyncUpdate) {
@@ -6182,6 +6369,10 @@ sap.ui.define([
6182
6369
  }
6183
6370
 
6184
6371
  sPropertyPath = sResolvedPath.substring(sResolvedPath.lastIndexOf("/") + 1);
6372
+ if (sPropertyPath.startsWith("@$ui5.")) {
6373
+ throw new Error("Setting a value for an instance annotation starting with '@$ui5' is "
6374
+ + "not allowed: " + sPropertyPath);
6375
+ }
6185
6376
  sKey = oEntityInfo.key;
6186
6377
  oOriginalEntry = this._getObject('/' + sKey, null, true);
6187
6378
  oOriginalValue = this._getObject(sPath, oContext, true);
@@ -92,7 +92,7 @@ sap.ui.define([
92
92
  * @extends sap.ui.model.TreeBinding
93
93
  * @hideconstructor
94
94
  * @public
95
- * @version 1.99.0
95
+ * @version 1.100.1
96
96
  */
97
97
  var ODataTreeBinding = TreeBinding.extend("sap.ui.model.odata.v2.ODataTreeBinding", /** @lends sap.ui.model.odata.v2.ODataTreeBinding.prototype */ {
98
98
 
@@ -42,7 +42,7 @@ sap.ui.define([
42
42
  * @hideconstructor
43
43
  * @public
44
44
  * @since 1.39.0
45
- * @version 1.99.0
45
+ * @version 1.100.1
46
46
  */
47
47
  Context = BaseContext.extend("sap.ui.model.odata.v4.Context", {
48
48
  constructor : constructor
@@ -1014,7 +1014,6 @@ sap.ui.define([
1014
1014
  * <ul>
1015
1015
  * <li> this context's root binding is suspended,
1016
1016
  * <li> this context is transient (see {@link #isTransient}),
1017
- * <li> this context is not in the collection (has no index, see {@link #getIndex}),
1018
1017
  * <li> the given other context does not belong to the same list binding as this context, or
1019
1018
  * is already in the collection (has an index, see {@link #getIndex}).
1020
1019
  * </ul>
@@ -1026,7 +1025,7 @@ sap.ui.define([
1026
1025
  var oElement;
1027
1026
 
1028
1027
  this.oBinding.checkSuspended();
1029
- if (this.iIndex === undefined || this.isTransient()) {
1028
+ if (this.isTransient()) {
1030
1029
  throw new Error("Cannot replace " + this);
1031
1030
  }
1032
1031
  if (oOtherContext.oBinding !== this.oBinding || oOtherContext.iIndex !== undefined) {
@@ -1495,8 +1494,10 @@ sap.ui.define([
1495
1494
  * destroyed, see {@link #destroy}. Supported since 1.84.0
1496
1495
  * @param {boolean} [bRequestMessages]
1497
1496
  * Whether to request messages for this entity. Only used if <code>bKeepAlive</code> is
1498
- * <code>true</code>. The binding keeps requesting messages until it is destroyed. Supported
1499
- * since 1.92.0
1497
+ * <code>true</code>. Determines the messages property from the annotation
1498
+ * "com.sap.vocabularies.Common.v1.Messages" at the entity type. If found, the binding keeps
1499
+ * requesting messages until it is destroyed. Otherwise an error is logged in the console and
1500
+ * no messages are requested. Supported since 1.92.0
1500
1501
  * @throws {Error} If
1501
1502
  * <ul>
1502
1503
  * <li> this context is not a list binding's context,
@@ -1511,7 +1512,7 @@ sap.ui.define([
1511
1512
  * <li> the list binding uses data aggregation
1512
1513
  * (see {@link sap.ui.model.odata.v4.ODataListBinding#setAggregation}),
1513
1514
  * <li> messages are requested, but the model does not use the <code>autoExpandSelect</code>
1514
- * parameter or the annotation "com.sap.vocabularies.Common.v1.Messages" is missing.
1515
+ * parameter.
1515
1516
  * </ul>
1516
1517
  *
1517
1518
  * @public
@@ -1519,32 +1520,29 @@ sap.ui.define([
1519
1520
  * @since 1.81.0
1520
1521
  */
1521
1522
  Context.prototype.setKeepAlive = function (bKeepAlive, fnOnBeforeDestroy, bRequestMessages) {
1522
- var sMessagesPath,
1523
- that = this;
1523
+ var that = this;
1524
1524
 
1525
1525
  if (this.isTransient()) {
1526
1526
  throw new Error("Unsupported transient context " + this);
1527
1527
  }
1528
- if (!_Helper.getPrivateAnnotation(this.getValue(), "predicate")) {
1529
- throw new Error("No key predicate known at " + this);
1530
- }
1528
+ this.oModel.getPredicateIndex(this.sPath);
1531
1529
  this.oBinding.checkKeepAlive(this);
1532
1530
 
1533
1531
  if (bKeepAlive && bRequestMessages) {
1534
1532
  if (!this.oModel.bAutoExpandSelect) {
1535
1533
  throw new Error("Missing parameter autoExpandSelect at model");
1536
1534
  }
1537
- // the metadata is already known because we have a predicate
1538
- sMessagesPath = this.oModel.getMetaModel().getObject(_Helper.getMetaPath(this.sPath)
1539
- + "/@com.sap.vocabularies.Common.v1.Messages/$Path");
1540
- if (!sMessagesPath) {
1541
- throw new Error("Missing @com.sap.vocabularies.Common.v1.Messages");
1542
- }
1543
- this.oBinding.fetchIfChildCanUseCache(this, sMessagesPath, {})
1544
- .then(function (sReducedPath) {
1545
- return that.fetchValue(sReducedPath);
1546
- })
1547
- .catch(this.oModel.getReporter());
1535
+ this.bKeepAlive = bKeepAlive; // must be set before calling fetchIfChildCanUseCache
1536
+ this.oModel.getMetaModel().fetchObject(
1537
+ _Helper.getMetaPath(this.sPath) + "/@com.sap.vocabularies.Common.v1.Messages/$Path"
1538
+ ).then(function (sMessagesPath) {
1539
+ if (!sMessagesPath) {
1540
+ throw new Error("Missing @com.sap.vocabularies.Common.v1.Messages");
1541
+ }
1542
+ return that.oBinding.fetchIfChildCanUseCache(that, sMessagesPath, {});
1543
+ }).then(function (sReducedPath) {
1544
+ return that.fetchValue(sReducedPath);
1545
+ }).catch(this.oModel.getReporter());
1548
1546
  }
1549
1547
 
1550
1548
  this.bKeepAlive = bKeepAlive;