@openui5/sap.ui.core 1.107.1 → 1.108.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 (287) hide show
  1. package/.dtsgenrc +63 -0
  2. package/THIRDPARTY.txt +1 -1
  3. package/package.json +1 -1
  4. package/src/jquery.sap.global.js +1 -1
  5. package/src/jquery.sap.properties.js +1 -1
  6. package/src/jquery.sap.resources.js +1 -1
  7. package/src/jquery.sap.script.js +1 -1
  8. package/src/jquery.sap.storage.js +3 -3
  9. package/src/sap/base/i18n/ResourceBundle.js +10 -0
  10. package/src/sap/base/security/URLListValidator.js +36 -3
  11. package/src/sap/base/util/restricted/_CancelablePromise.js +1 -1
  12. package/src/sap/base/util/restricted/_castArray.js +1 -1
  13. package/src/sap/base/util/restricted/_compact.js +1 -1
  14. package/src/sap/base/util/restricted/_curry.js +1 -1
  15. package/src/sap/base/util/restricted/_debounce.js +1 -1
  16. package/src/sap/base/util/restricted/_difference.js +1 -1
  17. package/src/sap/base/util/restricted/_differenceBy.js +1 -1
  18. package/src/sap/base/util/restricted/_differenceWith.js +1 -1
  19. package/src/sap/base/util/restricted/_flatMap.js +1 -1
  20. package/src/sap/base/util/restricted/_flatMapDeep.js +1 -1
  21. package/src/sap/base/util/restricted/_flatMapDepth.js +1 -1
  22. package/src/sap/base/util/restricted/_flatten.js +1 -1
  23. package/src/sap/base/util/restricted/_flattenDeep.js +1 -1
  24. package/src/sap/base/util/restricted/_flattenDepth.js +1 -1
  25. package/src/sap/base/util/restricted/_intersection.js +1 -1
  26. package/src/sap/base/util/restricted/_intersectionBy.js +1 -1
  27. package/src/sap/base/util/restricted/_intersectionWith.js +1 -1
  28. package/src/sap/base/util/restricted/_isEqual.js +1 -1
  29. package/src/sap/base/util/restricted/_isEqualWith.js +1 -1
  30. package/src/sap/base/util/restricted/_isNil.js +1 -1
  31. package/src/sap/base/util/restricted/_max.js +1 -1
  32. package/src/sap/base/util/restricted/_merge.js +1 -1
  33. package/src/sap/base/util/restricted/_mergeWith.js +1 -1
  34. package/src/sap/base/util/restricted/_min.js +1 -1
  35. package/src/sap/base/util/restricted/_omit.js +1 -1
  36. package/src/sap/base/util/restricted/_pick.js +1 -1
  37. package/src/sap/base/util/restricted/_pickBy.js +1 -1
  38. package/src/sap/base/util/restricted/_throttle.js +1 -1
  39. package/src/sap/base/util/restricted/_toArray.js +1 -1
  40. package/src/sap/base/util/restricted/_union.js +1 -1
  41. package/src/sap/base/util/restricted/_unionBy.js +1 -1
  42. package/src/sap/base/util/restricted/_unionWith.js +1 -1
  43. package/src/sap/base/util/restricted/_uniq.js +1 -1
  44. package/src/sap/base/util/restricted/_uniqBy.js +1 -1
  45. package/src/sap/base/util/restricted/_uniqWith.js +1 -1
  46. package/src/sap/base/util/restricted/_without.js +1 -1
  47. package/src/sap/base/util/restricted/_xor.js +1 -1
  48. package/src/sap/base/util/restricted/_xorBy.js +1 -1
  49. package/src/sap/base/util/restricted/_xorWith.js +1 -1
  50. package/src/sap/base/util/restricted/_zipObject.js +1 -1
  51. package/src/sap/base/util/restricted/_zipObjectDeep.js +1 -1
  52. package/src/sap/ui/Device.js +3 -3
  53. package/src/sap/ui/Global.js +4 -4
  54. package/src/sap/ui/base/Event.js +1 -1
  55. package/src/sap/ui/base/EventProvider.js +1 -1
  56. package/src/sap/ui/base/Interface.js +1 -1
  57. package/src/sap/ui/base/ManagedObject.js +2 -2
  58. package/src/sap/ui/base/ManagedObjectMetadata.js +1 -1
  59. package/src/sap/ui/base/Metadata.js +1 -1
  60. package/src/sap/ui/base/Object.js +1 -1
  61. package/src/sap/ui/base/ObjectPool.js +1 -1
  62. package/src/sap/ui/core/.library +50 -50
  63. package/src/sap/ui/core/BusyIndicator.js +1 -1
  64. package/src/sap/ui/core/BusyIndicatorUtils.js +22 -8
  65. package/src/sap/ui/core/Component.js +21 -4
  66. package/src/sap/ui/core/ComponentContainer.js +5 -1
  67. package/src/sap/ui/core/ComponentMetadata.js +1 -1
  68. package/src/sap/ui/core/ComponentSupport.js +1 -1
  69. package/src/sap/ui/core/Configuration.js +2 -15
  70. package/src/sap/ui/core/Control.js +20 -2
  71. package/src/sap/ui/core/Core.js +311 -413
  72. package/src/sap/ui/core/CustomData.js +1 -1
  73. package/src/sap/ui/core/DeclarativeSupport.js +1 -1
  74. package/src/sap/ui/core/Element.js +1 -1
  75. package/src/sap/ui/core/ElementMetadata.js +1 -1
  76. package/src/sap/ui/core/EnabledPropagator.js +1 -1
  77. package/src/sap/ui/core/EventBus.js +1 -1
  78. package/src/sap/ui/core/FocusHandler.js +12 -14
  79. package/src/sap/ui/core/Fragment.js +5 -2
  80. package/src/sap/ui/core/HTML.js +1 -1
  81. package/src/sap/ui/core/History.js +1 -1
  82. package/src/sap/ui/core/Icon.js +1 -1
  83. package/src/sap/ui/core/IconPool.js +7 -1
  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 +1 -1
  96. package/src/sap/ui/core/Manifest.js +16 -83
  97. package/src/sap/ui/core/Message.js +1 -1
  98. package/src/sap/ui/core/Popup.js +14 -4
  99. package/src/sap/ui/core/RenderManager.js +111 -109
  100. package/src/sap/ui/core/Renderer.js +1 -1
  101. package/src/sap/ui/core/ResizeHandler.js +1 -1
  102. package/src/sap/ui/core/ScrollBar.js +1 -1
  103. package/src/sap/ui/core/SeparatorItem.js +1 -1
  104. package/src/sap/ui/core/ShortcutHintsMixin.js +20 -0
  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 +4 -2
  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/_IconRegistry.js +11 -7
  115. package/src/sap/ui/core/_UrlResolver.js +139 -0
  116. package/src/sap/ui/core/date/CalendarUtils.js +87 -0
  117. package/src/sap/ui/core/date/CalendarWeekNumbering.js +73 -0
  118. package/src/sap/ui/core/date/UniversalDate.js +198 -74
  119. package/src/sap/ui/core/delegate/ItemNavigation.js +1 -1
  120. package/src/sap/ui/core/delegate/ScrollEnablement.js +1 -1
  121. package/src/sap/ui/core/dnd/DragDropBase.js +1 -1
  122. package/src/sap/ui/core/dnd/DragDropInfo.js +1 -1
  123. package/src/sap/ui/core/dnd/DragInfo.js +1 -1
  124. package/src/sap/ui/core/dnd/DropInfo.js +1 -1
  125. package/src/sap/ui/core/format/DateFormat.js +187 -57
  126. package/src/sap/ui/core/format/NumberFormat.js +64 -23
  127. package/src/sap/ui/core/format/TimezoneUtil.js +3 -1
  128. package/src/sap/ui/core/hyphenation/Hyphenation.js +1 -1
  129. package/src/sap/ui/core/library.js +19 -10
  130. package/src/sap/ui/core/message/ControlMessageProcessor.js +1 -1
  131. package/src/sap/ui/core/message/Message.js +5 -3
  132. package/src/sap/ui/core/message/MessageManager.js +1 -1
  133. package/src/sap/ui/core/message/MessageParser.js +1 -1
  134. package/src/sap/ui/core/message/MessageProcessor.js +1 -1
  135. package/src/sap/ui/core/messagebundle_fr.properties +1 -1
  136. package/src/sap/ui/core/mvc/HTMLView.js +10 -2
  137. package/src/sap/ui/core/mvc/JSONView.js +1 -1
  138. package/src/sap/ui/core/mvc/JSView.js +1 -1
  139. package/src/sap/ui/core/mvc/TemplateView.js +1 -1
  140. package/src/sap/ui/core/mvc/View.js +1 -1
  141. package/src/sap/ui/core/mvc/XMLView.js +1 -1
  142. package/src/sap/ui/core/plugin/DeclarativeSupport.js +1 -1
  143. package/src/sap/ui/core/plugin/LessSupport.js +21 -20
  144. package/src/sap/ui/core/plugin/TemplatingSupport.js +1 -1
  145. package/src/sap/ui/core/postmessage/Bus.js +1 -1
  146. package/src/sap/ui/core/postmessage/confirmationDialog.js +1 -1
  147. package/src/sap/ui/core/search/OpenSearchProvider.js +1 -1
  148. package/src/sap/ui/core/search/SearchProvider.js +1 -1
  149. package/src/sap/ui/core/service/Service.js +1 -1
  150. package/src/sap/ui/core/service/ServiceFactory.js +1 -1
  151. package/src/sap/ui/core/service/ServiceFactoryRegistry.js +1 -1
  152. package/src/sap/ui/core/support/Plugin.js +1 -1
  153. package/src/sap/ui/core/support/Support.js +1 -1
  154. package/src/sap/ui/core/support/plugins/ControlTree.js +1 -1
  155. package/src/sap/ui/core/support/plugins/Interaction.js +1 -1
  156. package/src/sap/ui/core/support/plugins/LocalStorage.js +1 -1
  157. package/src/sap/ui/core/support/plugins/Performance.js +1 -1
  158. package/src/sap/ui/core/support/plugins/Selector.js +1 -1
  159. package/src/sap/ui/core/support/plugins/TechInfo.js +1 -1
  160. package/src/sap/ui/core/support/plugins/Trace.js +1 -1
  161. package/src/sap/ui/core/support/plugins/ViewInfo.js +1 -1
  162. package/src/sap/ui/core/themes/base/LocalBusyIndicator.less +3 -3
  163. package/src/sap/ui/core/themes/base/fonts/SAP-icons.woff2 +0 -0
  164. package/src/sap/ui/core/theming/Parameters.js +31 -12
  165. package/src/sap/ui/core/theming/ThemeHelper.js +56 -1
  166. package/src/sap/ui/core/theming/ThemeManager.js +817 -0
  167. package/src/sap/ui/core/tmpl/DOMAttribute.js +1 -1
  168. package/src/sap/ui/core/tmpl/DOMElement.js +1 -1
  169. package/src/sap/ui/core/tmpl/HandlebarsTemplate.js +1 -1
  170. package/src/sap/ui/core/tmpl/Template.js +1 -1
  171. package/src/sap/ui/core/tmpl/TemplateControl.js +1 -1
  172. package/src/sap/ui/core/util/AsyncHintsHelper.js +1 -1
  173. package/src/sap/ui/core/util/Export.js +1 -1
  174. package/src/sap/ui/core/util/ExportCell.js +1 -1
  175. package/src/sap/ui/core/util/ExportColumn.js +1 -1
  176. package/src/sap/ui/core/util/ExportRow.js +1 -1
  177. package/src/sap/ui/core/util/ExportType.js +1 -1
  178. package/src/sap/ui/core/util/ExportTypeCSV.js +1 -1
  179. package/src/sap/ui/core/util/File.js +1 -1
  180. package/src/sap/ui/core/util/LibraryInfo.js +1 -1
  181. package/src/sap/ui/core/util/MockServer.js +1 -1
  182. package/src/sap/ui/core/util/PasteHelper.js +1 -1
  183. package/src/sap/ui/core/util/serializer/HTMLViewSerializer.js +2 -1
  184. package/src/sap/ui/core/util/serializer/Serializer.js +1 -1
  185. package/src/sap/ui/core/util/serializer/ViewSerializer.js +1 -1
  186. package/src/sap/ui/core/util/serializer/XMLViewSerializer.js +1 -1
  187. package/src/sap/ui/core/util/serializer/delegate/Delegate.js +1 -1
  188. package/src/sap/ui/core/util/serializer/delegate/HTML.js +1 -1
  189. package/src/sap/ui/core/util/serializer/delegate/XML.js +1 -1
  190. package/src/sap/ui/core/ws/ReadyState.js +1 -1
  191. package/src/sap/ui/core/ws/SapPcpWebSocket.js +1 -1
  192. package/src/sap/ui/core/ws/WebSocket.js +1 -1
  193. package/src/sap/ui/debug/ControlTree.js +1 -1
  194. package/src/sap/ui/debug/DebugEnv.js +1 -1
  195. package/src/sap/ui/debug/PropertyList.js +1 -1
  196. package/src/sap/ui/dom/getFirstEditableInput.js +25 -6
  197. package/src/sap/ui/dom/includeStylesheet.js +2 -2
  198. package/src/sap/ui/model/ClientListBinding.js +11 -4
  199. package/src/sap/ui/model/ClientModel.js +1 -1
  200. package/src/sap/ui/model/ClientTreeBinding.js +60 -5
  201. package/src/sap/ui/model/CompositeDataState.js +1 -1
  202. package/src/sap/ui/model/CompositeType.js +1 -1
  203. package/src/sap/ui/model/DataState.js +1 -1
  204. package/src/sap/ui/model/Filter.js +6 -6
  205. package/src/sap/ui/model/MetaModel.js +1 -1
  206. package/src/sap/ui/model/Model.js +1 -1
  207. package/src/sap/ui/model/SelectionModel.js +1 -1
  208. package/src/sap/ui/model/SimpleType.js +1 -1
  209. package/src/sap/ui/model/Sorter.js +6 -4
  210. package/src/sap/ui/model/TreeAutoExpandMode.js +1 -1
  211. package/src/sap/ui/model/TreeBinding.js +18 -0
  212. package/src/sap/ui/model/TreeBindingCompatibilityAdapter.js +1 -1
  213. package/src/sap/ui/model/Type.js +1 -1
  214. package/src/sap/ui/model/analytics/AnalyticalTreeBindingAdapter.js +28 -34
  215. package/src/sap/ui/model/controlhelper/TreeBindingProxy.js +590 -0
  216. package/src/sap/ui/model/json/JSONModel.js +1 -1
  217. package/src/sap/ui/model/message/MessageModel.js +1 -1
  218. package/src/sap/ui/model/odata/ODataAnnotations.js +1 -1
  219. package/src/sap/ui/model/odata/ODataMessageParser.js +1 -1
  220. package/src/sap/ui/model/odata/ODataMetaModel.js +1 -1
  221. package/src/sap/ui/model/odata/ODataMetadata.js +1 -1
  222. package/src/sap/ui/model/odata/ODataModel.js +1 -1
  223. package/src/sap/ui/model/odata/type/Boolean.js +1 -1
  224. package/src/sap/ui/model/odata/type/Byte.js +1 -1
  225. package/src/sap/ui/model/odata/type/Currency.js +1 -1
  226. package/src/sap/ui/model/odata/type/Date.js +1 -1
  227. package/src/sap/ui/model/odata/type/DateTime.js +1 -1
  228. package/src/sap/ui/model/odata/type/DateTimeBase.js +1 -1
  229. package/src/sap/ui/model/odata/type/DateTimeOffset.js +1 -1
  230. package/src/sap/ui/model/odata/type/DateTimeWithTimezone.js +1 -1
  231. package/src/sap/ui/model/odata/type/Decimal.js +1 -1
  232. package/src/sap/ui/model/odata/type/Double.js +1 -1
  233. package/src/sap/ui/model/odata/type/Guid.js +1 -1
  234. package/src/sap/ui/model/odata/type/Int.js +1 -1
  235. package/src/sap/ui/model/odata/type/Int16.js +1 -1
  236. package/src/sap/ui/model/odata/type/Int32.js +1 -1
  237. package/src/sap/ui/model/odata/type/Int64.js +1 -1
  238. package/src/sap/ui/model/odata/type/ODataType.js +1 -1
  239. package/src/sap/ui/model/odata/type/Raw.js +1 -1
  240. package/src/sap/ui/model/odata/type/SByte.js +1 -1
  241. package/src/sap/ui/model/odata/type/Single.js +1 -1
  242. package/src/sap/ui/model/odata/type/Stream.js +1 -1
  243. package/src/sap/ui/model/odata/type/String.js +1 -1
  244. package/src/sap/ui/model/odata/type/Time.js +1 -1
  245. package/src/sap/ui/model/odata/type/TimeOfDay.js +1 -1
  246. package/src/sap/ui/model/odata/type/Unit.js +1 -1
  247. package/src/sap/ui/model/odata/v2/BatchMode.js +2 -2
  248. package/src/sap/ui/model/odata/v2/Context.js +169 -4
  249. package/src/sap/ui/model/odata/v2/ODataAnnotations.js +1 -1
  250. package/src/sap/ui/model/odata/v2/ODataListBinding.js +39 -17
  251. package/src/sap/ui/model/odata/v2/ODataModel.js +219 -82
  252. package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +1 -1
  253. package/src/sap/ui/model/odata/v4/Context.js +35 -22
  254. package/src/sap/ui/model/odata/v4/ODataBinding.js +28 -22
  255. package/src/sap/ui/model/odata/v4/ODataContextBinding.js +6 -6
  256. package/src/sap/ui/model/odata/v4/ODataListBinding.js +111 -89
  257. package/src/sap/ui/model/odata/v4/ODataMetaModel.js +5 -4
  258. package/src/sap/ui/model/odata/v4/ODataModel.js +84 -46
  259. package/src/sap/ui/model/odata/v4/ODataParentBinding.js +19 -20
  260. package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +3 -3
  261. package/src/sap/ui/model/odata/v4/_AnnotationHelperExpression.js +1 -1
  262. package/src/sap/ui/model/odata/v4/lib/_AggregationCache.js +12 -5
  263. package/src/sap/ui/model/odata/v4/lib/_Cache.js +130 -64
  264. package/src/sap/ui/model/odata/v4/lib/_Helper.js +1 -1
  265. package/src/sap/ui/model/odata/v4/lib/_Requestor.js +56 -15
  266. package/src/sap/ui/model/resource/ResourceModel.js +1 -1
  267. package/src/sap/ui/model/type/Boolean.js +1 -1
  268. package/src/sap/ui/model/type/Currency.js +1 -1
  269. package/src/sap/ui/model/type/Date.js +1 -1
  270. package/src/sap/ui/model/type/DateInterval.js +1 -1
  271. package/src/sap/ui/model/type/DateTime.js +1 -1
  272. package/src/sap/ui/model/type/DateTimeInterval.js +1 -1
  273. package/src/sap/ui/model/type/FileSize.js +1 -1
  274. package/src/sap/ui/model/type/Float.js +1 -1
  275. package/src/sap/ui/model/type/Integer.js +1 -1
  276. package/src/sap/ui/model/type/String.js +1 -1
  277. package/src/sap/ui/model/type/Time.js +1 -1
  278. package/src/sap/ui/model/type/TimeInterval.js +1 -1
  279. package/src/sap/ui/model/type/Unit.js +1 -1
  280. package/src/sap/ui/model/xml/XMLModel.js +1 -1
  281. package/src/sap/ui/qunit/utils/ControlIterator.js +1 -1
  282. package/src/sap/ui/qunit/utils/MemoryLeakCheck.js +1 -1
  283. package/src/sap/ui/test/TestUtils.js +20 -0
  284. package/src/sap/ui/test/generic/TestBase.js +1 -1
  285. package/src/sap/ui/thirdparty/mobify-carousel.js +0 -4
  286. package/src/sap/ui/util/Storage.js +1 -1
  287. package/src/sap/ui/core/ThemeCheck.js +0 -389
@@ -65,6 +65,7 @@ sap.ui.define([
65
65
  "use strict";
66
66
 
67
67
  var sClassName = "sap.ui.model.odata.v2.ODataModel",
68
+ aDeepCreateParametersAllowlist = ["context", "properties"],
68
69
  MessageType = coreLibrary.MessageType,
69
70
  mMessageType2Severity = {},
70
71
  aRequestSideEffectsParametersAllowList = ["groupId", "urlParameters"];
@@ -204,7 +205,7 @@ sap.ui.define([
204
205
  * This model is not prepared to be inherited from.
205
206
  *
206
207
  * @author SAP SE
207
- * @version 1.107.1
208
+ * @version 1.108.1
208
209
  *
209
210
  * @public
210
211
  * @alias sap.ui.model.odata.v2.ODataModel
@@ -3959,6 +3960,7 @@ sap.ui.define([
3959
3960
  oStoredRequest.method = oRequest.method;
3960
3961
  oStoredRequest.headers = oRequest.headers;
3961
3962
  oStoredRequest.data = oRequest.data;
3963
+ oStoredRequest.sideEffects = oRequest.sideEffects;
3962
3964
 
3963
3965
  if (oRequest.method === "PUT") {
3964
3966
  // if stored request was a MERGE before (created by setProperty) but is now sent via PUT
@@ -4319,10 +4321,9 @@ sap.ui.define([
4319
4321
  //need a deep data copy for import
4320
4322
  oImportData = merge({}, oResultData);
4321
4323
  if (oRequest.key || oRequest.created) {
4322
- // no need to pass sideEffects because side-effects requests don't have a key or
4323
- // a created property attached to the request
4324
4324
  that._importData(oImportData, mLocalGetEntities, oResponse, oRequest,
4325
- /*sPath*/undefined, /*sDeepPath*/undefined, /*sKey*/undefined, bIsFunction);
4325
+ /*sPath*/undefined, /*sDeepPath*/undefined, /*sKey*/undefined, bIsFunction,
4326
+ /*sPathFromCanonicalParent*/undefined, oRequest.sideEffects);
4326
4327
  } else {
4327
4328
  that._importData(oImportData, mLocalGetEntities, oResponse, oRequest, sPath,
4328
4329
  oRequest.deepPath, /*sKey*/undefined, bIsFunction,
@@ -4556,8 +4557,9 @@ sap.ui.define([
4556
4557
  * @private
4557
4558
  */
4558
4559
  ODataModel.prototype._processChange = function(sKey, oData, sUpdateMethod, sDeepPath) {
4559
- var sContentID, bCreated, oEntityType, sETag, oExpandRequest, mHeaders, sMethod, mParams,
4560
- oPayload, oRequest, oUnModifiedEntry, sUrl, aUrlParams,
4560
+ var sContentID, oContext, bCreated, oEntityType, sETag, oExpandRequest, mHeaders, sMethod,
4561
+ mParams, oPayload, oRequest, oUnModifiedEntry, sUrl, aUrlParams,
4562
+ sEntityPath = "/" + sKey,
4561
4563
  that = this;
4562
4564
 
4563
4565
  if (sDeepPath && this.mChangedEntities[sKey] && this.mChangedEntities[sKey].__metadata) {
@@ -4658,8 +4660,9 @@ sap.ui.define([
4658
4660
 
4659
4661
  sUrl = this._createRequestUrl('/' + sKey, null, aUrlParams, this.bUseBatch);
4660
4662
 
4663
+ oContext = this.getContext(sEntityPath);
4661
4664
  oRequest = this._createRequest(sUrl, sDeepPath, sMethod, mHeaders, oPayload, sETag,
4662
- undefined, true);
4665
+ undefined, true, oContext.hasSubContexts());
4663
4666
 
4664
4667
  if (bCreated) {
4665
4668
  oRequest.created = true;
@@ -4672,6 +4675,8 @@ sap.ui.define([
4672
4675
  if (oData.__metadata.created.functionMetadata) {
4673
4676
  oRequest.functionTarget = this.oMetadata._getCanonicalPathOfFunctionImport(
4674
4677
  oData.__metadata.created.functionMetadata, mParams.urlParameters);
4678
+ } else {
4679
+ this._addSubEntitiesToPayload(oContext, oPayload);
4675
4680
  }
4676
4681
  }
4677
4682
 
@@ -5113,7 +5118,8 @@ sap.ui.define([
5113
5118
  * {@link topic:6c47b2b39db9404582994070ec3d57a2#loio4c4cd99af9b14e08bb72470cc7cabff4 Creating
5114
5119
  * Entities documentation} for comprehensive information on the topic.
5115
5120
  *
5116
- * Please note that deep creates are not supported and may not work.
5121
+ * <b>Note:</b> This function does not support a "deep create" scenario. Use
5122
+ * {@link #createEntry} or {@link sap.ui.model.odata.v2.ODataListBinding#create} instead.
5117
5123
  *
5118
5124
  * @param {string} sPath A string containing the path to the collection where an entry
5119
5125
  * should be created. The path is concatenated to the service URL
@@ -6148,6 +6154,10 @@ sap.ui.define([
6148
6154
  var oCreatedInfo, oRequest, oRequestHandle0,
6149
6155
  oGroupInfo = that._resolveGroup(sKey);
6150
6156
 
6157
+ if (that.getContext("/" + sKey).hasTransientParent()) {
6158
+ return;
6159
+ }
6160
+
6151
6161
  if (oGroupInfo.groupId === sGroupId || !sGroupId) {
6152
6162
  oRequest = that._processChange(sKey, oData, sMethod || that.sDefaultUpdateMethod);
6153
6163
  oRequest.key = sKey;
@@ -6294,7 +6304,7 @@ sap.ui.define([
6294
6304
  * @private
6295
6305
  */
6296
6306
  ODataModel.prototype._discardEntityChanges = function (sKey, bDeleteEntity) {
6297
- var oCreated,
6307
+ var oContext, oCreated,
6298
6308
  // determine group synchronously otherwise #_resolveGroup might return a different group
6299
6309
  // if for example the entity has been deleted already
6300
6310
  sGroupId = this._resolveGroup(sKey).groupId,
@@ -6305,9 +6315,11 @@ sap.ui.define([
6305
6315
  that.abortInternalRequest(sGroupId, {requestKey : sKey});
6306
6316
  });
6307
6317
  if (bDeleteEntity) {
6318
+ oContext = this.getContext("/" + sKey);
6319
+ oContext.removeFromTransientParent();
6308
6320
  // remove context synchronously from the list of created contexts to avoid a temporary
6309
6321
  // empty table row
6310
- this.oCreatedContextsCache.findAndRemoveContext(this.mContexts["/" + sKey]);
6322
+ this.oCreatedContextsCache.findAndRemoveContext(oContext);
6311
6323
  // remember created information before it is deleted in #_removeEntity
6312
6324
  oCreated = this.mChangedEntities[sKey]
6313
6325
  && this.mChangedEntities[sKey].__metadata.created;
@@ -6354,7 +6366,9 @@ sap.ui.define([
6354
6366
  * @public
6355
6367
  */
6356
6368
  ODataModel.prototype.resetChanges = function (aPath, bAll, bDeleteCreatedEntities) {
6357
- var pMetaDataLoaded = this.oMetadata.loaded(),
6369
+ var aRemoveKeys,
6370
+ pMetaDataLoaded = this.oMetadata.loaded(),
6371
+ aRemoveRootKeys = [],
6358
6372
  that = this;
6359
6373
 
6360
6374
  if (bAll) {
@@ -6398,12 +6412,20 @@ sap.ui.define([
6398
6412
  oChangedEntity = that.mChangedEntities[sKey];
6399
6413
  if (ODataModel._isChangedEntityEmpty(oChangedEntity)
6400
6414
  || !oEntityInfo.propertyPath) {
6401
- that._discardEntityChanges(sKey,
6402
- oChangedEntity.__metadata.created && bDeleteCreatedEntities);
6415
+ aRemoveRootKeys.push(sKey);
6403
6416
  }
6404
6417
  }
6405
6418
  }
6406
6419
  });
6420
+ aRemoveKeys = aRemoveRootKeys;
6421
+ aRemoveRootKeys.forEach(function (sKey) {
6422
+ aRemoveKeys = aRemoveKeys.concat(
6423
+ that.getContext("/" + sKey).getSubContextsAsKey(/*bRecursive*/true));
6424
+ });
6425
+ (new Set(aRemoveKeys)).forEach(function (sKey) {
6426
+ that._discardEntityChanges(sKey,
6427
+ that.mChangedEntities[sKey].__metadata.created && bDeleteCreatedEntities);
6428
+ });
6407
6429
  } else {
6408
6430
  each(this.mChangedEntities, function (sKey, oChangedEntity) {
6409
6431
  that._discardEntityChanges(sKey,
@@ -6514,6 +6536,12 @@ sap.ui.define([
6514
6536
  ? _Helper.merge({}, oValue)
6515
6537
  : oValue;
6516
6538
 
6539
+ if (oContext && oContext.hasTransientParent && oContext.hasTransientParent()) {
6540
+ mChangedEntities[sKey] = true;
6541
+ this.checkUpdate(false, bAsyncUpdate, mChangedEntities);
6542
+ return true;
6543
+ }
6544
+
6517
6545
  // If property is key property of ReferentialConstraint, also update the corresponding
6518
6546
  // navigation property
6519
6547
  oEntityType = this.oMetadata._getEntityTypeByPath(oEntityInfo.key);
@@ -6892,9 +6920,16 @@ sap.ui.define([
6892
6920
  * initial data, for example if the server requires a unit for an amount. This also applies if
6893
6921
  * this property has a default value.
6894
6922
  *
6895
- * Note: A deep create (including data defined by navigation properties) is not supported. The
6896
- * dependent entity has to be created using a second list binding, after this entity has been
6897
- * saved successfully in the back-end system.
6923
+ * Note: Deep create is only supported since 1.108.0, where "deep create" means creation of a
6924
+ * sub-entity for a navigation property of a transient, not yet persisted root entity. Before
6925
+ * 1.108.0, the sub-entity had to be created after the transient entity had been saved
6926
+ * successfully in the back-end system. Since 1.108.0, a deep create is triggered when
6927
+ * the <code>sPath</code> parameter is a navigation property for the entity type associated with
6928
+ * the transient context given in <code>mParameters.context</code>. The payload of the OData
6929
+ * request to create the root entity then contains its sub-entities. On creation of a
6930
+ * sub-entity, only the <code>sPath</code>, <code>mParameters.context</code> and
6931
+ * <code>mParameters.properties</code> method parameters are allowed;
6932
+ * the context given in <code>mParameters.context</code> must not be inactive.
6898
6933
  *
6899
6934
  * @param {string} sPath
6900
6935
  * The path to the EntitySet
@@ -6951,76 +6986,73 @@ sap.ui.define([
6951
6986
  * <code>undefined</code> if the service metadata are not yet loaded or if a
6952
6987
  * <code>created</code> callback parameter is given
6953
6988
  * @throws {Error}
6954
- * If the <code>expand</code> parameter is used but the batch mode is disabled
6989
+ * If:
6990
+ * <ul>
6991
+ * <li>The <code>expand</code> parameter is used but the batch mode is disabled, or
6992
+ * <li>in the case of a deep create:
6993
+ * <ul>
6994
+ * <li>If an unsupported parameter is used, or
6995
+ * <li>the <code>sPath</code> parameter is either no navigation property or a navigation
6996
+ * property with single cardinality for the entity type associated with the given
6997
+ * <code>mParameters.context</code>, or
6998
+ * <li><code>mParameters.context</code> is inactive.
6999
+ * </ul>
7000
+ * </ul>
7001
+ *
6955
7002
  * @public
6956
7003
  */
6957
7004
  ODataModel.prototype.createEntry = function (sPath, mParameters) {
6958
7005
  var bCanonical, sChangeSetId, oContext, fnCreated, pCreate, fnCreatedPromiseResolve,
6959
- sDeepPath, fnError, sETag, sExpand, sGroupId, mHeaders, bInactive, sKey,
6960
- sNormalizedPath, vProperties, bRefreshAfterChange, oRequest, mRequests, fnSuccess, sUrl,
6961
- aUrlParams, mUrlParams,
7006
+ bDeepCreate, sDeepPath, oEntityMetadata, fnError, sETag, sExpand, sGroupId, mHeaders,
7007
+ bInactive, bIsCollection, sKey, sNormalizedPath, vProperties, bRefreshAfterChange,
7008
+ oRequest, mRequests, fnSuccess, sUrl, aUrlParams, mUrlParams,
6962
7009
  oEntity = {},
6963
7010
  sMethod = "POST",
6964
7011
  that = this;
6965
7012
 
6966
- if (mParameters) {
6967
- vProperties = mParameters.properties;
6968
- sGroupId = mParameters.groupId || mParameters.batchGroupId;
6969
- sChangeSetId = mParameters.changeSetId;
6970
- oContext = mParameters.context;
6971
- fnSuccess = mParameters.success;
6972
- fnError = mParameters.error;
6973
- fnCreated = mParameters.created;
6974
- sETag = mParameters.eTag;
6975
- mHeaders = mParameters.headers;
6976
- mUrlParams = mParameters.urlParameters;
6977
- bRefreshAfterChange = mParameters.refreshAfterChange;
6978
- bCanonical = mParameters.canonicalRequest;
6979
- sExpand = mParameters.expand;
6980
- bInactive = mParameters.inactive;
6981
- }
6982
- if (sExpand && !this.bUseBatch) {
6983
- throw new Error("The 'expand' parameter is only supported if batch mode is used");
7013
+ function addEntityToCacheAndCreateContext(oTransientParent) {
7014
+ sKey = that._addEntity(merge({}, oEntity));
7015
+ if (!bInactive) {
7016
+ that.mChangedEntities[sKey] = oEntity;
7017
+ }
7018
+ return that.getContext("/" + sKey, sDeepPath, pCreate, bInactive, oTransientParent);
6984
7019
  }
6985
- bCanonical = this._isCanonicalRequestNeeded(bCanonical);
6986
- mHeaders = mHeaders || {};
6987
- aUrlParams = ODataUtils._createUrlParamsArray(mUrlParams);
6988
7020
 
6989
- var oRequestHandle = {
6990
- abort: function() {
6991
- if (oRequest) {
6992
- oRequest._aborted = true;
6993
- if (oRequest.expandRequest) {
6994
- oRequest.expandRequest._aborted = true;
6995
- }
7021
+ function checkDeepCreatePreconditions() {
7022
+ var oSrcEntityType;
7023
+
7024
+ if (bDeepCreate) {
7025
+ oSrcEntityType = that.oMetadata._getEntityTypeByPath(oContext.getPath());
7026
+ if (!that.oMetadata._getNavigationPropertyNames(oSrcEntityType).includes(sPath)) {
7027
+ throw new Error("Cannot create entity; path '" + sPath
7028
+ + "' is not a navigation property of '" + oSrcEntityType.name + "'");
7029
+ }
7030
+ if (!bIsCollection) {
7031
+ throw new Error("Cannot create entity; deep create on navigation property '"
7032
+ + sPath + "' with single cardinality is not supported");
6996
7033
  }
6997
7034
  }
6998
- };
6999
-
7000
- if (!sPath.startsWith("/") && !oContext) {
7001
- sPath = "/" + sPath;
7002
7035
  }
7003
7036
 
7004
- sNormalizedPath = that._normalizePath(sPath, oContext, bCanonical);
7005
- sDeepPath = that.resolveDeep(sPath, oContext);
7006
-
7007
7037
  function create() {
7008
- var oCreateData, oCreatedContext, oCreateResponse, oEntitySetMetadata, oExpandRequest,
7009
- oGroupInfo, sUID,
7038
+ var oCreateData, oCreatedContext, oCreateResponse, oEntitySetMetadata, sEntityType,
7039
+ sEntityUri, oExpandRequest, oGroupInfo, oParentEntity, sUID,
7010
7040
  bCreateFailed = false,
7011
7041
  fnErrorFromParameters = fnError,
7012
7042
  fnSuccessFromParameters = fnSuccess;
7013
7043
 
7014
- // fallback to groups as defined in mChangeGroups; using path is OK as we don't have an
7015
- // entity yet and the entity type can be derived from the path to determine the group ID
7016
- oGroupInfo = that._resolveGroup(sNormalizedPath);
7017
- sGroupId = sGroupId || oGroupInfo.groupId;
7018
- sChangeSetId = sChangeSetId || oGroupInfo.changeSetId;
7019
- bRefreshAfterChange = that._getRefreshAfterChange(bRefreshAfterChange, sGroupId);
7020
-
7021
- var oEntityMetadata = that.oMetadata._getEntityTypeByPath(sNormalizedPath);
7044
+ bCanonical = that._isCanonicalRequestNeeded(bCanonical);
7045
+ mHeaders = mHeaders || {};
7046
+ aUrlParams = ODataUtils._createUrlParamsArray(mUrlParams);
7047
+ if (!sPath.startsWith("/") && !oContext) {
7048
+ sPath = "/" + sPath;
7049
+ }
7050
+ sNormalizedPath = that._normalizePath(sPath, oContext, bCanonical);
7051
+ sDeepPath = that.resolveDeep(sPath, oContext);
7052
+ bIsCollection = that.oMetadata._isCollection(sDeepPath);
7053
+ checkDeepCreatePreconditions();
7054
+ oEntityMetadata = that.oMetadata._getEntityTypeByPath(sNormalizedPath);
7022
7055
  if (!oEntityMetadata) {
7023
-
7024
7056
  assert(oEntityMetadata, "No Metadata for collection " + sNormalizedPath + " found");
7025
7057
  return undefined;
7026
7058
  }
@@ -7042,16 +7074,31 @@ sap.ui.define([
7042
7074
  assert(vProperties.length === 0, "No metadata for the following properties found: " + vProperties.join(","));
7043
7075
  }
7044
7076
  }
7045
- //get EntitySet metadata for data storage
7077
+ sEntityType = "" + oEntityMetadata.entityType;
7046
7078
  oEntitySetMetadata = that.oMetadata._getEntitySetByType(oEntityMetadata);
7047
7079
  sUID = uid();
7048
7080
  sKey = oEntitySetMetadata.name + "('" + sUID + "')";
7049
-
7050
-
7051
- if (sDeepPath && that.oMetadata._isCollection(sDeepPath)){
7081
+ sEntityUri = that.sServiceUrl + '/' + sKey;
7082
+ if (sDeepPath && bIsCollection) {
7052
7083
  sDeepPath = sDeepPath + "('" + sUID + "')";
7053
7084
  }
7085
+ if (bDeepCreate) {
7086
+ oParentEntity = that._getObject(oContext.getPath());
7087
+ sChangeSetId = oParentEntity.__metadata.created.changeSetId;
7088
+ sGroupId = oParentEntity.__metadata.created.groupId;
7089
+ oEntity.__metadata = {
7090
+ type : sEntityType,
7091
+ uri : sEntityUri,
7092
+ created : {
7093
+ changeSetId : sChangeSetId,
7094
+ groupId : sGroupId
7095
+ }
7096
+ };
7097
+ oCreatedContext = addEntityToCacheAndCreateContext(oContext);
7098
+ oContext.addSubContext(sPath, oCreatedContext, bIsCollection);
7054
7099
 
7100
+ return oCreatedContext;
7101
+ }
7055
7102
  if (sExpand) {
7056
7103
  mHeaders = Object.assign({}, mHeaders, {
7057
7104
  "Content-ID" : sUID,
@@ -7112,9 +7159,15 @@ sap.ui.define([
7112
7159
  fnCreatedPromiseResolve();
7113
7160
  };
7114
7161
  }
7162
+ // fallback to groups as defined in mChangeGroups; using path is OK as we don't have an
7163
+ // entity yet and the entity type can be derived from the path to determine the group ID
7164
+ oGroupInfo = that._resolveGroup(sNormalizedPath);
7165
+ sGroupId = sGroupId || oGroupInfo.groupId;
7166
+ sChangeSetId = sChangeSetId || oGroupInfo.changeSetId;
7167
+ bRefreshAfterChange = that._getRefreshAfterChange(bRefreshAfterChange, sGroupId);
7115
7168
  oEntity.__metadata = {
7116
- type : "" + oEntityMetadata.entityType,
7117
- uri : that.sServiceUrl + '/' + sKey,
7169
+ type : sEntityType,
7170
+ uri : sEntityUri,
7118
7171
  created : {
7119
7172
  changeSetId : sChangeSetId,
7120
7173
  error : fnError,
@@ -7140,6 +7193,11 @@ sap.ui.define([
7140
7193
  // creation.
7141
7194
  oCreatedContext.resetCreatedPromise();
7142
7195
  }
7196
+ if (oCreatedContext.hasSubContexts()) {
7197
+ // _processSuccess already removes this entity change, therefore one must
7198
+ // not call resetChanges with oCreatedContext.getPath()
7199
+ that.resetChanges(oCreatedContext.getSubContextsAsPath(), undefined, true);
7200
+ }
7143
7201
  resolve();
7144
7202
  };
7145
7203
  oEntity.__metadata.created.abort = reject;
@@ -7147,12 +7205,7 @@ sap.ui.define([
7147
7205
  pCreate.catch(function () {
7148
7206
  // avoid uncaught in promise if the caller of #createEntry does not use the promise
7149
7207
  });
7150
-
7151
- sKey = that._addEntity(merge({}, oEntity));
7152
- if (!bInactive) {
7153
- that.mChangedEntities[sKey] = oEntity;
7154
- }
7155
-
7208
+ oCreatedContext = addEntityToCacheAndCreateContext();
7156
7209
  sUrl = that._createRequestUrlWithNormalizedPath(sNormalizedPath, aUrlParams, that.bUseBatch);
7157
7210
  oRequest = that._createRequest(sUrl, sDeepPath, sMethod, mHeaders, oEntity, sETag);
7158
7211
 
@@ -7168,8 +7221,6 @@ sap.ui.define([
7168
7221
  oEntity.__metadata.created.contentID = sUID;
7169
7222
  }
7170
7223
 
7171
- oCreatedContext = that.getContext("/" + sKey, sDeepPath, pCreate, bInactive);
7172
-
7173
7224
  oRequest.key = sKey;
7174
7225
  oRequest.created = true;
7175
7226
 
@@ -7180,6 +7231,16 @@ sap.ui.define([
7180
7231
 
7181
7232
  that.oMetadata.loaded().then(function () {
7182
7233
  oCreatedContext.fetchActivated().then(function () {
7234
+ var oRequestHandle = {
7235
+ abort: function() {
7236
+ if (oRequest) {
7237
+ oRequest._aborted = true;
7238
+ if (oRequest.expandRequest) {
7239
+ oRequest.expandRequest._aborted = true;
7240
+ }
7241
+ }
7242
+ }
7243
+ };
7183
7244
  that._pushToRequestQueue(mRequests, sGroupId, sChangeSetId, oRequest, fnSuccess,
7184
7245
  fnError, oRequestHandle, bRefreshAfterChange);
7185
7246
  that._processRequestQueueAsync(that.mRequests);
@@ -7189,6 +7250,38 @@ sap.ui.define([
7189
7250
  return oCreatedContext;
7190
7251
  }
7191
7252
 
7253
+ if (mParameters) {
7254
+ vProperties = mParameters.properties;
7255
+ sGroupId = mParameters.groupId || mParameters.batchGroupId;
7256
+ sChangeSetId = mParameters.changeSetId;
7257
+ oContext = mParameters.context;
7258
+ fnSuccess = mParameters.success;
7259
+ fnError = mParameters.error;
7260
+ fnCreated = mParameters.created;
7261
+ sETag = mParameters.eTag;
7262
+ mHeaders = mParameters.headers;
7263
+ mUrlParams = mParameters.urlParameters;
7264
+ bRefreshAfterChange = mParameters.refreshAfterChange;
7265
+ bCanonical = mParameters.canonicalRequest;
7266
+ sExpand = mParameters.expand;
7267
+ bInactive = mParameters.inactive;
7268
+ }
7269
+ if (sExpand && !this.bUseBatch) {
7270
+ throw new Error("The 'expand' parameter is only supported if batch mode is used");
7271
+ }
7272
+
7273
+ bDeepCreate = oContext && oContext.isTransient && oContext.isTransient();
7274
+ if (bDeepCreate) {
7275
+ Object.keys(mParameters).forEach(function (sParameterKey) {
7276
+ if (!aDeepCreateParametersAllowlist.includes(sParameterKey)) {
7277
+ throw new Error("deep create, unsupported parameter: " + sParameterKey);
7278
+ }
7279
+ });
7280
+ if (oContext.isInactive()) {
7281
+ throw new Error("deep create, context must not be inactive");
7282
+ }
7283
+ }
7284
+
7192
7285
  // If no callback function is provided context must be returned synchronously
7193
7286
  if (fnCreated) {
7194
7287
  this.oMetadata.loaded().then(function() {
@@ -8129,16 +8222,19 @@ sap.ui.define([
8129
8222
  * A created promise as specified in the constructor of {@link sap.ui.model.odata.v2.Context}
8130
8223
  * @param {boolean} [bInactive]
8131
8224
  * Whether the created context is inactive
8225
+ * @param {sap.ui.model.odata.v2.Context} [oTransientParent]
8226
+ * The transient parent context
8132
8227
  * @returns {sap.ui.model.odata.v2.Context}
8133
8228
  * The ODate V2 context for the given path
8134
8229
  * @private
8135
8230
  */
8136
- ODataModel.prototype.getContext = function (sPath, sDeepPath, oCreatePromise, bInactive) {
8231
+ ODataModel.prototype.getContext = function (sPath, sDeepPath, oCreatePromise, bInactive,
8232
+ oTransientParent) {
8137
8233
  var oContext = this.mContexts[sPath];
8138
8234
 
8139
8235
  if (!oContext) {
8140
8236
  oContext = this.mContexts[sPath]
8141
- = new Context(this, sPath, sDeepPath, oCreatePromise, bInactive);
8237
+ = new Context(this, sPath, sDeepPath, oCreatePromise, bInactive, oTransientParent);
8142
8238
  } else {
8143
8239
  oContext.setDeepPath(sDeepPath || oContext.getDeepPath() || sPath);
8144
8240
  }
@@ -8444,5 +8540,46 @@ sap.ui.define([
8444
8540
  });
8445
8541
  };
8446
8542
 
8543
+ /**
8544
+ * Adds the sub-entities contained in the given root context to the given request payload
8545
+ * object.
8546
+ *
8547
+ * @param {sap.ui.model.odata.v2.Context} oRootContext
8548
+ * The root context which may have sub-entities
8549
+ * @param {object} oPayload
8550
+ * The object representing the root context in the payload for the creation POST request
8551
+ *
8552
+ * @private
8553
+ */
8554
+ ODataModel.prototype._addSubEntitiesToPayload = function (oRootContext, oPayload) {
8555
+ var i, sNavProperty, vSubContexts, oSubEntity,
8556
+ mSubContexts = oRootContext.getSubContexts(),
8557
+ that = this;
8558
+
8559
+ function getEntityData(oContext) {
8560
+ var oEntity = _Helper.merge({}, that._getObject(oContext.getPath()));
8561
+
8562
+ delete oEntity.__metadata;
8563
+
8564
+ return oEntity;
8565
+ }
8566
+
8567
+ for (sNavProperty in mSubContexts) {
8568
+ vSubContexts = mSubContexts[sNavProperty];
8569
+ if (Array.isArray(vSubContexts)) {
8570
+ oPayload[sNavProperty] = [];
8571
+ for (i = 0; i < vSubContexts.length; i += 1) {
8572
+ oSubEntity = getEntityData(vSubContexts[i]);
8573
+ oPayload[sNavProperty].push(oSubEntity);
8574
+ this._addSubEntitiesToPayload(vSubContexts[i], oSubEntity);
8575
+ }
8576
+ } else {
8577
+ oSubEntity = getEntityData(vSubContexts);
8578
+ oPayload[sNavProperty] = oSubEntity;
8579
+ this._addSubEntitiesToPayload(vSubContexts, oSubEntity);
8580
+ }
8581
+ }
8582
+ };
8583
+
8447
8584
  return ODataModel;
8448
8585
  });
@@ -94,7 +94,7 @@ sap.ui.define([
94
94
  * @extends sap.ui.model.TreeBinding
95
95
  * @hideconstructor
96
96
  * @public
97
- * @version 1.107.1
97
+ * @version 1.108.1
98
98
  */
99
99
  var ODataTreeBinding = TreeBinding.extend("sap.ui.model.odata.v2.ODataTreeBinding", /** @lends sap.ui.model.odata.v2.ODataTreeBinding.prototype */ {
100
100