@openui5/sap.ui.core 1.105.1 → 1.107.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.
- package/.reuse/dep5 +20 -17
- package/THIRDPARTY.txt +31 -21
- package/package.json +1 -1
- package/src/jquery.sap.dom.js +10 -10
- package/src/jquery.sap.global.js +24 -216
- package/src/jquery.sap.history.js +1 -1
- package/src/jquery.sap.properties.js +2 -2
- package/src/jquery.sap.resources.js +1 -1
- package/src/jquery.sap.script.js +1 -1
- package/src/jquery.sap.storage.js +4 -4
- package/src/jquery.sap.ui.js +5 -7
- package/src/sap/base/i18n/ResourceBundle.js +7 -11
- package/src/sap/base/util/LoaderExtensions.js +6 -6
- package/src/sap/base/util/ObjectPath.js +1 -1
- package/src/sap/base/util/Properties.js +1 -1
- package/src/sap/base/util/fetch.js +8 -10
- package/src/sap/base/util/mixedFetch.js +1 -1
- package/src/sap/base/util/restricted/_CancelablePromise.js +1 -1
- package/src/sap/base/util/restricted/_castArray.js +1 -1
- package/src/sap/base/util/restricted/_compact.js +1 -1
- package/src/sap/base/util/restricted/_curry.js +1 -1
- package/src/sap/base/util/restricted/_debounce.js +1 -1
- package/src/sap/base/util/restricted/_difference.js +1 -1
- package/src/sap/base/util/restricted/_differenceBy.js +1 -1
- package/src/sap/base/util/restricted/_differenceWith.js +1 -1
- package/src/sap/base/util/restricted/_flatMap.js +1 -1
- package/src/sap/base/util/restricted/_flatMapDeep.js +1 -1
- package/src/sap/base/util/restricted/_flatMapDepth.js +1 -1
- package/src/sap/base/util/restricted/_flatten.js +1 -1
- package/src/sap/base/util/restricted/_flattenDeep.js +1 -1
- package/src/sap/base/util/restricted/_flattenDepth.js +1 -1
- package/src/sap/base/util/restricted/_intersection.js +1 -1
- package/src/sap/base/util/restricted/_intersectionBy.js +1 -1
- package/src/sap/base/util/restricted/_intersectionWith.js +1 -1
- package/src/sap/base/util/restricted/_isEqual.js +1 -1
- package/src/sap/base/util/restricted/_isEqualWith.js +1 -1
- package/src/sap/base/util/restricted/_isNil.js +1 -1
- package/src/sap/base/util/restricted/_max.js +1 -1
- package/src/sap/base/util/restricted/_merge.js +1 -1
- package/src/sap/base/util/restricted/_mergeWith.js +1 -1
- package/src/sap/base/util/restricted/_min.js +1 -1
- package/src/sap/base/util/restricted/_omit.js +1 -1
- package/src/sap/base/util/restricted/_pick.js +1 -1
- package/src/sap/base/util/restricted/_pickBy.js +1 -1
- package/src/sap/base/util/restricted/_throttle.js +1 -1
- package/src/sap/base/util/restricted/_toArray.js +1 -1
- package/src/sap/base/util/restricted/_union.js +1 -1
- package/src/sap/base/util/restricted/_unionBy.js +1 -1
- package/src/sap/base/util/restricted/_unionWith.js +1 -1
- package/src/sap/base/util/restricted/_uniq.js +1 -1
- package/src/sap/base/util/restricted/_uniqBy.js +1 -1
- package/src/sap/base/util/restricted/_uniqWith.js +1 -1
- package/src/sap/base/util/restricted/_without.js +1 -1
- package/src/sap/base/util/restricted/_xor.js +1 -1
- package/src/sap/base/util/restricted/_xorBy.js +1 -1
- package/src/sap/base/util/restricted/_xorWith.js +1 -1
- package/src/sap/base/util/restricted/_zipObject.js +1 -1
- package/src/sap/base/util/restricted/_zipObjectDeep.js +1 -1
- package/src/sap/base/util/syncFetch.js +9 -16
- package/src/sap/ui/Device.js +3 -3
- package/src/sap/ui/Global.js +7 -14
- package/src/sap/ui/VersionInfo.js +57 -54
- package/src/sap/ui/base/BindingInfo.js +198 -0
- package/src/sap/ui/base/DataType.js +5 -5
- package/src/sap/ui/base/Event.js +2 -2
- package/src/sap/ui/base/EventProvider.js +2 -2
- package/src/sap/ui/base/Interface.js +1 -1
- package/src/sap/ui/base/ManagedObject.js +209 -979
- package/src/sap/ui/base/ManagedObjectMetadata.js +6 -6
- package/src/sap/ui/base/ManagedObjectRegistry.js +4 -3
- package/src/sap/ui/base/Metadata.js +1 -1
- package/src/sap/ui/base/Object.js +1 -1
- package/src/sap/ui/base/ObjectPool.js +1 -1
- package/src/sap/ui/core/.library +13 -9
- package/src/sap/ui/core/AppCacheBuster.js +3 -4
- package/src/sap/ui/core/BusyIndicator.js +1 -1
- package/src/sap/ui/core/BusyIndicatorUtils.js +5 -6
- package/src/sap/ui/core/CalendarType.js +0 -1
- package/src/sap/ui/core/Component.js +16 -14
- package/src/sap/ui/core/ComponentContainer.js +6 -5
- package/src/sap/ui/core/ComponentMetadata.js +5 -12
- package/src/sap/ui/core/ComponentSupport.js +1 -1
- package/src/sap/ui/core/Configuration.js +525 -336
- package/src/sap/ui/core/Control.js +7 -7
- package/src/sap/ui/core/Core.js +102 -422
- package/src/sap/ui/core/CustomData.js +1 -1
- package/src/sap/ui/core/DeclarativeSupport.js +1 -1
- package/src/sap/ui/core/Element.js +65 -9
- package/src/sap/ui/core/ElementMetadata.js +1 -1
- package/src/sap/ui/core/EnabledPropagator.js +1 -1
- package/src/sap/ui/core/EventBus.js +1 -1
- package/src/sap/ui/core/FocusHandler.js +79 -9
- package/src/sap/ui/core/Fragment.js +1 -1
- package/src/sap/ui/core/HTML.js +1 -2
- package/src/sap/ui/core/History.js +1 -1
- package/src/sap/ui/core/Icon.js +1 -2
- package/src/sap/ui/core/IconPool.js +8 -8
- package/src/sap/ui/core/IndicationColorSupport.js +2 -2
- package/src/sap/ui/core/IntervalTrigger.js +1 -1
- package/src/sap/ui/core/InvisibleMessage.js +1 -2
- package/src/sap/ui/core/InvisibleRenderer.js +1 -1
- package/src/sap/ui/core/InvisibleText.js +5 -5
- package/src/sap/ui/core/Item.js +1 -2
- package/src/sap/ui/core/LabelEnablement.js +1 -1
- package/src/sap/ui/core/LayoutData.js +1 -2
- package/src/sap/ui/core/ListItem.js +1 -2
- package/src/sap/ui/core/LocalBusyIndicator.js +1 -2
- package/src/sap/ui/core/Locale.js +1 -1
- package/src/sap/ui/core/LocaleData.js +15 -13
- package/src/sap/ui/core/Manifest.js +8 -6
- package/src/sap/ui/core/Message.js +4 -6
- package/src/sap/ui/core/Popup.js +63 -6
- package/src/sap/ui/core/RenderManager.js +13 -5
- package/src/sap/ui/core/Renderer.js +5 -4
- package/src/sap/ui/core/Rendering.js +251 -0
- package/src/sap/ui/core/ResizeHandler.js +7 -7
- package/src/sap/ui/core/ScrollBar.js +6 -9
- package/src/sap/ui/core/ScrollBarRenderer.js +3 -3
- package/src/sap/ui/core/SeparatorItem.js +1 -2
- package/src/sap/ui/core/Title.js +1 -2
- package/src/sap/ui/core/TooltipBase.js +12 -14
- package/src/sap/ui/core/UIArea.js +396 -129
- package/src/sap/ui/core/UIComponent.js +3 -4
- package/src/sap/ui/core/UIComponentMetadata.js +1 -1
- package/src/sap/ui/core/ValueStateSupport.js +2 -2
- package/src/sap/ui/core/VariantLayoutData.js +1 -2
- package/src/sap/ui/core/XMLComposite.js +2 -2
- package/src/sap/ui/core/XMLCompositeMetadata.js +1 -1
- package/src/sap/ui/core/XMLTemplateProcessor.js +12 -10
- package/src/sap/ui/core/_ConfigurationProvider.js +187 -0
- package/src/sap/ui/core/cache/CacheManager.js +9 -8
- package/src/sap/ui/core/cache/LRUPersistentCache.js +4 -4
- package/src/sap/ui/core/cldr/es_BO.json +3 -3
- package/src/sap/ui/core/cldr/es_CL.json +3 -3
- package/src/sap/ui/core/cldr/es_MX.json +3 -3
- package/src/sap/ui/core/cldr/es_PE.json +3 -3
- package/src/sap/ui/core/cldr/es_UY.json +3 -3
- package/src/sap/ui/core/cldr/es_VE.json +2 -2
- package/src/sap/ui/core/date/Islamic.js +4 -4
- package/src/sap/ui/core/date/UniversalDate.js +8 -8
- package/src/sap/ui/core/date/UniversalDateUtils.js +3 -3
- package/src/sap/ui/core/delegate/ItemNavigation.js +5 -5
- package/src/sap/ui/core/delegate/ScrollEnablement.js +7 -6
- package/src/sap/ui/core/dnd/DragAndDrop.js +14 -9
- package/src/sap/ui/core/dnd/DragDropBase.js +1 -2
- package/src/sap/ui/core/dnd/DragDropInfo.js +1 -2
- package/src/sap/ui/core/dnd/DragInfo.js +1 -2
- package/src/sap/ui/core/dnd/DropInfo.js +1 -2
- package/src/sap/ui/core/format/DateFormat.js +14 -7
- package/src/sap/ui/core/format/DateFormatTimezoneDisplay.js +0 -1
- package/src/sap/ui/core/format/FileSizeFormat.js +4 -3
- package/src/sap/ui/core/format/ListFormat.js +4 -3
- package/src/sap/ui/core/format/NumberFormat.js +7 -6
- package/src/sap/ui/core/format/TimezoneUtil.js +1 -1
- package/src/sap/ui/core/hyphenation/Hyphenation.js +7 -6
- package/src/sap/ui/core/library.js +3 -55
- package/src/sap/ui/core/message/ControlMessageProcessor.js +1 -1
- package/src/sap/ui/core/message/Message.js +1 -1
- package/src/sap/ui/core/message/MessageManager.js +13 -23
- package/src/sap/ui/core/message/MessageParser.js +1 -1
- package/src/sap/ui/core/message/MessageProcessor.js +1 -1
- package/src/sap/ui/core/messagebundle_fr.properties +1 -1
- package/src/sap/ui/core/mvc/Controller.js +8 -3
- package/src/sap/ui/core/mvc/EventHandlerResolver.js +5 -3
- package/src/sap/ui/core/mvc/HTMLView.js +1 -2
- package/src/sap/ui/core/mvc/JSONView.js +1 -2
- package/src/sap/ui/core/mvc/JSView.js +2 -3
- package/src/sap/ui/core/mvc/TemplateView.js +1 -2
- package/src/sap/ui/core/mvc/View.js +21 -20
- package/src/sap/ui/core/mvc/ViewType.js +0 -1
- package/src/sap/ui/core/mvc/XMLView.js +18 -18
- package/src/sap/ui/core/plugin/DeclarativeSupport.js +1 -1
- package/src/sap/ui/core/plugin/LessSupport.js +1 -1
- package/src/sap/ui/core/plugin/TemplatingSupport.js +1 -1
- package/src/sap/ui/core/postmessage/Bus.js +1 -1
- package/src/sap/ui/core/postmessage/confirmationDialog.js +1 -1
- package/src/sap/ui/core/routing/Router.js +1 -1
- package/src/sap/ui/core/routing/async/Target.js +4 -3
- package/src/sap/ui/core/rules/App.support.js +11 -13
- package/src/sap/ui/core/rules/Config.support.js +19 -17
- package/src/sap/ui/core/rules/CoreHelper.support.js +4 -4
- package/src/sap/ui/core/rules/Model.support.js +8 -8
- package/src/sap/ui/core/rules/Rendering.support.js +1 -1
- package/src/sap/ui/core/rules/Theming.support.js +8 -8
- package/src/sap/ui/core/rules/View.support.js +9 -9
- package/src/sap/ui/core/search/OpenSearchProvider.js +1 -2
- package/src/sap/ui/core/search/SearchProvider.js +1 -3
- package/src/sap/ui/core/service/Service.js +1 -1
- package/src/sap/ui/core/service/ServiceFactory.js +1 -1
- package/src/sap/ui/core/service/ServiceFactoryRegistry.js +1 -1
- package/src/sap/ui/core/support/Hotkeys.js +2 -3
- package/src/sap/ui/core/support/Plugin.js +1 -1
- package/src/sap/ui/core/support/Support.js +1 -1
- package/src/sap/ui/core/support/ToolsAPI.js +11 -13
- package/src/sap/ui/core/support/plugins/ControlTree.js +4 -4
- package/src/sap/ui/core/support/plugins/Debugging.js +3 -3
- package/src/sap/ui/core/support/plugins/Interaction.js +1 -1
- package/src/sap/ui/core/support/plugins/LocalStorage.js +1 -1
- package/src/sap/ui/core/support/plugins/Performance.js +1 -1
- package/src/sap/ui/core/support/plugins/Selector.js +1 -1
- package/src/sap/ui/core/support/plugins/TechInfo.js +1 -1
- package/src/sap/ui/core/support/plugins/Trace.js +1 -1
- package/src/sap/ui/core/support/plugins/ViewInfo.js +2 -2
- package/src/sap/ui/core/support/support.html +1 -1
- package/src/sap/ui/core/support/techinfo/TechnicalInfo.js +10 -8
- package/src/sap/ui/core/theming/Parameters.js +8 -15
- package/src/sap/ui/core/tmpl/DOMAttribute.js +1 -2
- package/src/sap/ui/core/tmpl/DOMElement.js +1 -4
- package/src/sap/ui/core/tmpl/HandlebarsTemplate.js +1 -1
- package/src/sap/ui/core/tmpl/Template.js +6 -5
- package/src/sap/ui/core/tmpl/TemplateControl.js +1 -2
- package/src/sap/ui/core/util/AsyncHintsHelper.js +1 -1
- package/src/sap/ui/core/util/Export.js +1 -1
- package/src/sap/ui/core/util/ExportCell.js +1 -1
- package/src/sap/ui/core/util/ExportColumn.js +1 -1
- package/src/sap/ui/core/util/ExportRow.js +1 -1
- package/src/sap/ui/core/util/ExportType.js +1 -1
- package/src/sap/ui/core/util/ExportTypeCSV.js +1 -1
- package/src/sap/ui/core/util/File.js +1 -1
- package/src/sap/ui/core/util/LibraryInfo.js +1 -1
- package/src/sap/ui/core/util/MockServer.js +48 -72
- package/src/sap/ui/core/util/PasteHelper.js +1 -1
- package/src/sap/ui/core/util/ResponsivePaddingsEnablement.js +4 -3
- package/src/sap/ui/core/util/XMLPreprocessor.js +2 -2
- package/src/sap/ui/core/util/reflection/BaseTreeModifier.js +1 -1
- package/src/sap/ui/core/util/serializer/HTMLViewSerializer.js +1 -1
- package/src/sap/ui/core/util/serializer/Serializer.js +1 -1
- package/src/sap/ui/core/util/serializer/ViewSerializer.js +4 -4
- package/src/sap/ui/core/util/serializer/XMLViewSerializer.js +1 -1
- package/src/sap/ui/core/util/serializer/delegate/Delegate.js +1 -1
- package/src/sap/ui/core/util/serializer/delegate/HTML.js +1 -1
- package/src/sap/ui/core/util/serializer/delegate/XML.js +1 -1
- package/src/sap/ui/core/ws/ReadyState.js +1 -1
- package/src/sap/ui/core/ws/SapPcpWebSocket.js +1 -1
- package/src/sap/ui/core/ws/WebSocket.js +1 -1
- package/src/sap/ui/debug/ControlTree.js +3 -3
- package/src/sap/ui/debug/DebugEnv.js +4 -4
- package/src/sap/ui/debug/PropertyList.css +1 -31
- package/src/sap/ui/debug/PropertyList.js +6 -250
- package/src/sap/ui/dom/getScrollbarSize.js +1 -1
- package/src/sap/ui/dom/jquery/control.js +1 -0
- package/src/sap/ui/events/jquery/EventSimulation.js +4 -4
- package/src/sap/ui/model/ClientModel.js +1 -1
- package/src/sap/ui/model/ClientTreeBinding.js +3 -1
- package/src/sap/ui/model/CompositeDataState.js +1 -1
- package/src/sap/ui/model/CompositeType.js +1 -1
- package/src/sap/ui/model/Context.js +3 -0
- package/src/sap/ui/model/ContextBinding.js +1 -1
- package/src/sap/ui/model/DataState.js +2 -2
- package/src/sap/ui/model/ListBinding.js +2 -2
- package/src/sap/ui/model/ManagedObjectBindingSupport.js +871 -0
- package/src/sap/ui/model/MetaModel.js +1 -1
- package/src/sap/ui/model/Model.js +16 -5
- package/src/sap/ui/model/SelectionModel.js +1 -1
- package/src/sap/ui/model/SimpleType.js +2 -2
- package/src/sap/ui/model/Sorter.js +24 -19
- package/src/sap/ui/model/TreeAutoExpandMode.js +1 -1
- package/src/sap/ui/model/TreeBindingAdapter.js +3 -7
- package/src/sap/ui/model/Type.js +1 -1
- package/src/sap/ui/model/analytics/AnalyticalBinding.js +2 -0
- package/src/sap/ui/model/analytics/AnalyticalTreeBindingAdapter.js +5 -7
- package/src/sap/ui/model/json/JSONModel.js +9 -7
- package/src/sap/ui/model/message/MessageModel.js +1 -1
- package/src/sap/ui/model/odata/AnnotationHelper.js +4 -4
- package/src/sap/ui/model/odata/ODataAnnotations.js +5 -3
- package/src/sap/ui/model/odata/ODataMessageParser.js +1 -1
- package/src/sap/ui/model/odata/ODataMetaModel.js +10 -10
- package/src/sap/ui/model/odata/ODataMetadata.js +5 -4
- package/src/sap/ui/model/odata/ODataModel.js +6 -5
- package/src/sap/ui/model/odata/ODataTreeBindingFlat.js +0 -1
- package/src/sap/ui/model/odata/type/Boolean.js +1 -1
- package/src/sap/ui/model/odata/type/Byte.js +1 -1
- package/src/sap/ui/model/odata/type/Currency.js +1 -1
- package/src/sap/ui/model/odata/type/Date.js +1 -1
- package/src/sap/ui/model/odata/type/DateTime.js +1 -1
- package/src/sap/ui/model/odata/type/DateTimeBase.js +1 -1
- package/src/sap/ui/model/odata/type/DateTimeOffset.js +1 -1
- package/src/sap/ui/model/odata/type/DateTimeWithTimezone.js +1 -1
- package/src/sap/ui/model/odata/type/Decimal.js +1 -1
- package/src/sap/ui/model/odata/type/Double.js +1 -1
- package/src/sap/ui/model/odata/type/Guid.js +1 -1
- package/src/sap/ui/model/odata/type/Int.js +1 -1
- package/src/sap/ui/model/odata/type/Int16.js +1 -1
- package/src/sap/ui/model/odata/type/Int32.js +1 -1
- package/src/sap/ui/model/odata/type/Int64.js +1 -1
- package/src/sap/ui/model/odata/type/ODataType.js +1 -1
- package/src/sap/ui/model/odata/type/Raw.js +1 -1
- package/src/sap/ui/model/odata/type/SByte.js +1 -1
- package/src/sap/ui/model/odata/type/Single.js +1 -1
- package/src/sap/ui/model/odata/type/Stream.js +1 -1
- package/src/sap/ui/model/odata/type/String.js +1 -1
- package/src/sap/ui/model/odata/type/Time.js +1 -1
- package/src/sap/ui/model/odata/type/TimeOfDay.js +1 -1
- package/src/sap/ui/model/odata/type/Unit.js +1 -1
- package/src/sap/ui/model/odata/v2/Context.js +5 -5
- package/src/sap/ui/model/odata/v2/ODataAnnotations.js +4 -3
- package/src/sap/ui/model/odata/v2/ODataContextBinding.js +25 -16
- package/src/sap/ui/model/odata/v2/ODataListBinding.js +46 -28
- package/src/sap/ui/model/odata/v2/ODataModel.js +97 -39
- package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +5 -5
- package/src/sap/ui/model/odata/v4/AnnotationHelper.js +3 -3
- package/src/sap/ui/model/odata/v4/Context.js +109 -71
- package/src/sap/ui/model/odata/v4/ODataBinding.js +50 -7
- package/src/sap/ui/model/odata/v4/ODataContextBinding.js +88 -68
- package/src/sap/ui/model/odata/v4/ODataListBinding.js +116 -81
- package/src/sap/ui/model/odata/v4/ODataMetaModel.js +23 -20
- package/src/sap/ui/model/odata/v4/ODataModel.js +350 -88
- package/src/sap/ui/model/odata/v4/ODataParentBinding.js +35 -9
- package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +15 -9
- package/src/sap/ui/model/odata/v4/ODataUtils.js +8 -5
- package/src/sap/ui/model/odata/v4/lib/_AggregationCache.js +45 -33
- package/src/sap/ui/model/odata/v4/lib/_AggregationHelper.js +40 -6
- package/src/sap/ui/model/odata/v4/lib/_Cache.js +135 -81
- package/src/sap/ui/model/odata/v4/lib/_ConcatHelper.js +2 -3
- package/src/sap/ui/model/odata/v4/lib/_Helper.js +179 -36
- package/src/sap/ui/model/odata/v4/lib/_MinMaxHelper.js +2 -3
- package/src/sap/ui/model/odata/v4/lib/_Requestor.js +26 -7
- package/src/sap/ui/model/resource/ResourceModel.js +8 -7
- package/src/sap/ui/model/type/Boolean.js +1 -1
- package/src/sap/ui/model/type/Currency.js +2 -2
- package/src/sap/ui/model/type/Date.js +1 -1
- package/src/sap/ui/model/type/DateInterval.js +1 -1
- package/src/sap/ui/model/type/DateTime.js +1 -1
- package/src/sap/ui/model/type/DateTimeInterval.js +1 -1
- package/src/sap/ui/model/type/FileSize.js +1 -1
- package/src/sap/ui/model/type/Float.js +1 -1
- package/src/sap/ui/model/type/Integer.js +1 -1
- package/src/sap/ui/model/type/String.js +2 -2
- package/src/sap/ui/model/type/Time.js +1 -1
- package/src/sap/ui/model/type/TimeInterval.js +1 -1
- package/src/sap/ui/model/type/Unit.js +5 -4
- package/src/sap/ui/model/xml/XMLModel.js +8 -6
- package/src/sap/ui/performance/trace/Interaction.js +1 -1
- package/src/sap/ui/qunit/utils/ControlIterator.js +1 -1
- package/src/sap/ui/qunit/utils/MemoryLeakCheck.js +1 -1
- package/src/sap/ui/test/Opa.js +7 -5
- package/src/sap/ui/test/Opa5.js +9 -15
- package/src/sap/ui/test/OpaBuilder.js +1 -1
- package/src/sap/ui/test/RecorderHotkeyListener.js +1 -1
- package/src/sap/ui/test/TestUtils.js +83 -1
- package/src/sap/ui/test/autowaiter/_autoWaiter.js +9 -0
- package/src/sap/ui/test/autowaiter/_cssAnimationWaiter.js +114 -0
- package/src/sap/ui/test/autowaiter/_cssTransitionWaiter.js +99 -0
- package/src/sap/ui/test/autowaiter/_jsAnimationWaiter.js +70 -0
- package/src/sap/ui/test/autowaiter/_resourceWaiter.js +3 -12
- package/src/sap/ui/test/autowaiter/_utils.js +13 -1
- package/src/sap/ui/test/generic/TestBase.js +1 -1
- package/src/sap/ui/test/matchers/Ancestor.js +1 -0
- package/src/sap/ui/test/matchers/Descendant.js +1 -0
- package/src/sap/ui/test/matchers/Sibling.js +1 -0
- package/src/sap/ui/util/Storage.js +1 -1
|
@@ -15,7 +15,6 @@ sap.ui.define([
|
|
|
15
15
|
"./lib/_Helper",
|
|
16
16
|
"./lib/_Parser",
|
|
17
17
|
"sap/base/Log",
|
|
18
|
-
"sap/base/util/uid",
|
|
19
18
|
"sap/ui/base/SyncPromise",
|
|
20
19
|
"sap/ui/model/Binding",
|
|
21
20
|
"sap/ui/model/ChangeReason",
|
|
@@ -27,7 +26,7 @@ sap.ui.define([
|
|
|
27
26
|
"sap/ui/model/Sorter",
|
|
28
27
|
"sap/ui/model/odata/OperationMode"
|
|
29
28
|
], function (Context, asODataParentBinding, _AggregationCache, _AggregationHelper, _Cache,
|
|
30
|
-
_GroupLock, _Helper, _Parser, Log,
|
|
29
|
+
_GroupLock, _Helper, _Parser, Log, SyncPromise, Binding, ChangeReason, Filter,
|
|
31
30
|
FilterOperator, FilterProcessor, FilterType, ListBinding, Sorter, OperationMode) {
|
|
32
31
|
"use strict";
|
|
33
32
|
|
|
@@ -58,7 +57,7 @@ sap.ui.define([
|
|
|
58
57
|
* @mixes sap.ui.model.odata.v4.ODataParentBinding
|
|
59
58
|
* @public
|
|
60
59
|
* @since 1.37.0
|
|
61
|
-
* @version 1.
|
|
60
|
+
* @version 1.107.0
|
|
62
61
|
* @borrows sap.ui.model.odata.v4.ODataBinding#getGroupId as #getGroupId
|
|
63
62
|
* @borrows sap.ui.model.odata.v4.ODataBinding#getRootBinding as #getRootBinding
|
|
64
63
|
* @borrows sap.ui.model.odata.v4.ODataBinding#getUpdateGroupId as #getUpdateGroupId
|
|
@@ -174,12 +173,13 @@ sap.ui.define([
|
|
|
174
173
|
*
|
|
175
174
|
* @param {function} fnFunction The function to call when the event occurs
|
|
176
175
|
* @param {object} [oListener] Object on which to call the given function
|
|
176
|
+
* @returns {this} <code>this</code> to allow method chaining
|
|
177
177
|
*
|
|
178
178
|
* @public
|
|
179
179
|
* @since 1.98.0
|
|
180
180
|
*/
|
|
181
181
|
ODataListBinding.prototype.attachCreateActivate = function (fnFunction, oListener) {
|
|
182
|
-
this.attachEvent("createActivate", fnFunction, oListener);
|
|
182
|
+
return this.attachEvent("createActivate", fnFunction, oListener);
|
|
183
183
|
};
|
|
184
184
|
|
|
185
185
|
/**
|
|
@@ -187,12 +187,13 @@ sap.ui.define([
|
|
|
187
187
|
*
|
|
188
188
|
* @param {function} fnFunction The function to call when the event occurs
|
|
189
189
|
* @param {object} [oListener] Object on which to call the given function
|
|
190
|
+
* @returns {this} <code>this</code> to allow method chaining
|
|
190
191
|
*
|
|
191
192
|
* @public
|
|
192
193
|
* @since 1.98.0
|
|
193
194
|
*/
|
|
194
195
|
ODataListBinding.prototype.detachCreateActivate = function (fnFunction, oListener) {
|
|
195
|
-
this.detachEvent("createActivate", fnFunction, oListener);
|
|
196
|
+
return this.detachEvent("createActivate", fnFunction, oListener);
|
|
196
197
|
};
|
|
197
198
|
|
|
198
199
|
/**
|
|
@@ -200,12 +201,13 @@ sap.ui.define([
|
|
|
200
201
|
*
|
|
201
202
|
* @param {function} fnFunction The function to call when the event occurs
|
|
202
203
|
* @param {object} [oListener] Object on which to call the given function
|
|
204
|
+
* @returns {this} <code>this</code> to allow method chaining
|
|
203
205
|
*
|
|
204
206
|
* @public
|
|
205
207
|
* @since 1.66.0
|
|
206
208
|
*/
|
|
207
209
|
ODataListBinding.prototype.attachCreateCompleted = function (fnFunction, oListener) {
|
|
208
|
-
this.attachEvent("createCompleted", fnFunction, oListener);
|
|
210
|
+
return this.attachEvent("createCompleted", fnFunction, oListener);
|
|
209
211
|
};
|
|
210
212
|
|
|
211
213
|
/**
|
|
@@ -214,12 +216,13 @@ sap.ui.define([
|
|
|
214
216
|
*
|
|
215
217
|
* @param {function} fnFunction The function to call when the event occurs
|
|
216
218
|
* @param {object} [oListener] Object on which to call the given function
|
|
219
|
+
* @returns {this} <code>this</code> to allow method chaining
|
|
217
220
|
*
|
|
218
221
|
* @public
|
|
219
222
|
* @since 1.66.0
|
|
220
223
|
*/
|
|
221
224
|
ODataListBinding.prototype.detachCreateCompleted = function (fnFunction, oListener) {
|
|
222
|
-
this.detachEvent("createCompleted", fnFunction, oListener);
|
|
225
|
+
return this.detachEvent("createCompleted", fnFunction, oListener);
|
|
223
226
|
};
|
|
224
227
|
|
|
225
228
|
/**
|
|
@@ -227,12 +230,13 @@ sap.ui.define([
|
|
|
227
230
|
*
|
|
228
231
|
* @param {function} fnFunction The function to call when the event occurs
|
|
229
232
|
* @param {object} [oListener] Object on which to call the given function
|
|
233
|
+
* @returns {this} <code>this</code> to allow method chaining
|
|
230
234
|
*
|
|
231
235
|
* @public
|
|
232
236
|
* @since 1.66.0
|
|
233
237
|
*/
|
|
234
238
|
ODataListBinding.prototype.attachCreateSent = function (fnFunction, oListener) {
|
|
235
|
-
this.attachEvent("createSent", fnFunction, oListener);
|
|
239
|
+
return this.attachEvent("createSent", fnFunction, oListener);
|
|
236
240
|
};
|
|
237
241
|
|
|
238
242
|
/**
|
|
@@ -241,12 +245,13 @@ sap.ui.define([
|
|
|
241
245
|
*
|
|
242
246
|
* @param {function} fnFunction The function to call when the event occurs
|
|
243
247
|
* @param {object} [oListener] Object on which to call the given function
|
|
248
|
+
* @returns {this} <code>this</code> to allow method chaining
|
|
244
249
|
*
|
|
245
250
|
* @public
|
|
246
251
|
* @since 1.66.0
|
|
247
252
|
*/
|
|
248
253
|
ODataListBinding.prototype.detachCreateSent = function (fnFunction, oListener) {
|
|
249
|
-
this.detachEvent("createSent", fnFunction, oListener);
|
|
254
|
+
return this.detachEvent("createSent", fnFunction, oListener);
|
|
250
255
|
};
|
|
251
256
|
|
|
252
257
|
/**
|
|
@@ -278,7 +283,11 @@ sap.ui.define([
|
|
|
278
283
|
*/
|
|
279
284
|
ODataListBinding.prototype._delete = function (oGroupLock, sEditUrl, oContext, oETagEntity,
|
|
280
285
|
bDoNotRequestCount) {
|
|
281
|
-
|
|
286
|
+
// When deleting a context with negative index, iCreatedContexts et al. must be adjusted.
|
|
287
|
+
// However, when re-inserting, the context has lost its index. Beware: Do NOT use the
|
|
288
|
+
// created() promise, because doReplaceWith places a context w/o the promise here.
|
|
289
|
+
var bCreated = oContext.iIndex < 0,
|
|
290
|
+
sPath = oContext.iIndex === undefined
|
|
282
291
|
// context is not in aContexts -> use the predicate
|
|
283
292
|
? _Helper.getRelativePath(oContext.getPath(), this.oHeaderContext.getPath())
|
|
284
293
|
: String(oContext.iIndex),
|
|
@@ -295,8 +304,6 @@ sap.ui.define([
|
|
|
295
304
|
|
|
296
305
|
return this.deleteFromCache(oGroupLock, sEditUrl, sPath, oETagEntity, bDoNotRequestCount,
|
|
297
306
|
function (iIndex, iOffset) {
|
|
298
|
-
var iContextIndex = oContext.iIndex;
|
|
299
|
-
|
|
300
307
|
if (iIndex !== undefined) {
|
|
301
308
|
// An entity can only be deleted when its key predicate is known. So we can be
|
|
302
309
|
// sure to have key predicates and the contexts a related to entities and not
|
|
@@ -313,12 +320,9 @@ sap.ui.define([
|
|
|
313
320
|
that._fireChange({reason : ChangeReason.Remove});
|
|
314
321
|
});
|
|
315
322
|
}
|
|
316
|
-
if (
|
|
323
|
+
if (bCreated) {
|
|
317
324
|
that.iCreatedContexts += iOffset;
|
|
318
325
|
that.iActiveContexts += iOffset;
|
|
319
|
-
if (!that.iCreatedContexts) { //@see #destroyCreated
|
|
320
|
-
that.bFirstCreateAtEnd = undefined;
|
|
321
|
-
}
|
|
322
326
|
} else {
|
|
323
327
|
// iMaxLength is the number of server rows w/o the created entities
|
|
324
328
|
that.iMaxLength += iOffset; // this doesn't change Infinity
|
|
@@ -335,6 +339,10 @@ sap.ui.define([
|
|
|
335
339
|
var iOldMaxLength = that.iMaxLength;
|
|
336
340
|
|
|
337
341
|
that.iDeletedContexts -= 1;
|
|
342
|
+
if (!that.iDeletedContexts && !that.iCreatedContexts) {
|
|
343
|
+
// all (created) contexts finally gone -> free to create at any end
|
|
344
|
+
that.bFirstCreateAtEnd = undefined;
|
|
345
|
+
}
|
|
338
346
|
oContext.resetKeepAlive();
|
|
339
347
|
if (bReadCount) {
|
|
340
348
|
that.iMaxLength = that.fetchValue("$count", undefined, true).getResult()
|
|
@@ -558,7 +566,12 @@ sap.ui.define([
|
|
|
558
566
|
* If a back-end request fails, the 'dataReceived' event provides an <code>Error</code> in the
|
|
559
567
|
* 'error' event parameter.
|
|
560
568
|
*
|
|
569
|
+
* Since 1.106 this event is bubbled up to the model, unless a listener calls
|
|
570
|
+
* {@link sap.ui.base.Event#cancelBubble oEvent.cancelBubble()}.
|
|
571
|
+
*
|
|
561
572
|
* @param {sap.ui.base.Event} oEvent
|
|
573
|
+
* @param {function} oEvent.cancelBubble
|
|
574
|
+
* A callback function to prevent that the event is bubbled up to the model
|
|
562
575
|
* @param {object} oEvent.getParameters()
|
|
563
576
|
* @param {object} [oEvent.getParameters().data]
|
|
564
577
|
* An empty data object if a back-end request succeeds
|
|
@@ -567,6 +580,7 @@ sap.ui.define([
|
|
|
567
580
|
*
|
|
568
581
|
* @event sap.ui.model.odata.v4.ODataListBinding#dataReceived
|
|
569
582
|
* @public
|
|
583
|
+
* @see sap.ui.model.odata.v4.ODataModel#event:dataReceived
|
|
570
584
|
* @since 1.37.0
|
|
571
585
|
*/
|
|
572
586
|
|
|
@@ -576,10 +590,16 @@ sap.ui.define([
|
|
|
576
590
|
* for example to switch on a busy indicator. Registered event handlers are called without
|
|
577
591
|
* parameters.
|
|
578
592
|
*
|
|
593
|
+
* Since 1.106 this event is bubbled up to the model, unless a listener calls
|
|
594
|
+
* {@link sap.ui.base.Event#cancelBubble oEvent.cancelBubble()}.
|
|
595
|
+
*
|
|
579
596
|
* @param {sap.ui.base.Event} oEvent
|
|
597
|
+
* @param {function} oEvent.cancelBubble
|
|
598
|
+
* A callback function to prevent that the event is bubbled up to the model
|
|
580
599
|
*
|
|
581
600
|
* @event sap.ui.model.odata.v4.ODataListBinding#dataRequested
|
|
582
601
|
* @public
|
|
602
|
+
* @see sap.ui.model.odata.v4.ODataModel#event:dataRequested
|
|
583
603
|
* @since 1.37.0
|
|
584
604
|
*/
|
|
585
605
|
|
|
@@ -829,7 +849,7 @@ sap.ui.define([
|
|
|
829
849
|
sGroupId = this.getUpdateGroupId(),
|
|
830
850
|
oGroupLock,
|
|
831
851
|
sResolvedPath = this.getResolvedPath(),
|
|
832
|
-
sTransientPredicate = "($uid=" + uid() + ")",
|
|
852
|
+
sTransientPredicate = "($uid=" + _Helper.uid() + ")",
|
|
833
853
|
sTransientPath = sResolvedPath + sTransientPredicate,
|
|
834
854
|
i,
|
|
835
855
|
that = this;
|
|
@@ -868,7 +888,7 @@ sap.ui.define([
|
|
|
868
888
|
return;
|
|
869
889
|
}
|
|
870
890
|
|
|
871
|
-
that.
|
|
891
|
+
that.removeCreated(oContext);
|
|
872
892
|
return Promise.resolve().then(function () {
|
|
873
893
|
// Fire the change asynchronously so that Cache#delete is finished and #getContexts
|
|
874
894
|
// can read the data synchronously. This is important for extended change detection.
|
|
@@ -1075,35 +1095,6 @@ sap.ui.define([
|
|
|
1075
1095
|
ListBinding.prototype.destroy.call(this);
|
|
1076
1096
|
};
|
|
1077
1097
|
|
|
1078
|
-
/**
|
|
1079
|
-
* Removes the given context for a created entity from the list of contexts and destroys it
|
|
1080
|
-
* later so that the control has time to handle the context's dependent bindings before.
|
|
1081
|
-
*
|
|
1082
|
-
* @param {sap.ui.model.odata.v4.Context} oContext
|
|
1083
|
-
* The context instance for the created entity to be destroyed
|
|
1084
|
-
*
|
|
1085
|
-
* @private
|
|
1086
|
-
*/
|
|
1087
|
-
ODataListBinding.prototype.destroyCreated = function (oContext) {
|
|
1088
|
-
var iIndex = oContext.getModelIndex(),
|
|
1089
|
-
i;
|
|
1090
|
-
|
|
1091
|
-
this.iCreatedContexts -= 1;
|
|
1092
|
-
if (!oContext.isInactive()) {
|
|
1093
|
-
this.iActiveContexts -= 1;
|
|
1094
|
-
}
|
|
1095
|
-
for (i = 0; i < iIndex; i += 1) {
|
|
1096
|
-
this.aContexts[i].iIndex += 1;
|
|
1097
|
-
}
|
|
1098
|
-
if (!this.iCreatedContexts) {
|
|
1099
|
-
this.bFirstCreateAtEnd = undefined;
|
|
1100
|
-
}
|
|
1101
|
-
this.aContexts.splice(iIndex, 1);
|
|
1102
|
-
this.destroyLater(oContext);
|
|
1103
|
-
// The path of all contexts in aContexts after the removed one is untouched, still points to
|
|
1104
|
-
// the same data, hence no checkUpdate is needed.
|
|
1105
|
-
};
|
|
1106
|
-
|
|
1107
1098
|
/**
|
|
1108
1099
|
* Destroys the given context later so that the control has time to handle the context's
|
|
1109
1100
|
* dependent bindings before.
|
|
@@ -1190,7 +1181,7 @@ sap.ui.define([
|
|
|
1190
1181
|
oCache = this.getCacheAndMoveKeepAliveContexts(sResourcePath, mQueryOptions)
|
|
1191
1182
|
|| _AggregationCache.create(this.oModel.oRequestor, sResourcePath, sDeepResourcePath,
|
|
1192
1183
|
this.mParameters.$$aggregation, mQueryOptions, this.oModel.bAutoExpandSelect,
|
|
1193
|
-
this.bSharedRequest);
|
|
1184
|
+
this.bSharedRequest, this.isGrouped());
|
|
1194
1185
|
if (this.bSharedRequest) {
|
|
1195
1186
|
oCache.registerChangeListener("", this);
|
|
1196
1187
|
}
|
|
@@ -1250,11 +1241,11 @@ sap.ui.define([
|
|
|
1250
1241
|
oResult = Context.create(this.oModel, this, sPath, oOldContext.iIndex);
|
|
1251
1242
|
bNew = true;
|
|
1252
1243
|
}
|
|
1253
|
-
oOldContext.iIndex
|
|
1254
|
-
if (iModelIndex === undefined) {
|
|
1244
|
+
if (iModelIndex === undefined) { // => oOldContext.iIndex === undefined
|
|
1255
1245
|
this.mPreviousContextsByPath[sPath] = oResult;
|
|
1256
1246
|
this.oCache.addKeptElement(oElement);
|
|
1257
1247
|
} else {
|
|
1248
|
+
oOldContext.iIndex = undefined;
|
|
1258
1249
|
this.aContexts[iModelIndex] = oResult;
|
|
1259
1250
|
this.oCache.doReplaceWith(iModelIndex, oElement);
|
|
1260
1251
|
}
|
|
@@ -1268,7 +1259,7 @@ sap.ui.define([
|
|
|
1268
1259
|
}
|
|
1269
1260
|
oResult.setKeepAlive(true, fnOnBeforeDestroyClone);
|
|
1270
1261
|
}
|
|
1271
|
-
} else {
|
|
1262
|
+
} else { // Note: w/o a key predicate, oOldContext cannot be kept alive
|
|
1272
1263
|
this.destroyLater(oOldContext);
|
|
1273
1264
|
}
|
|
1274
1265
|
this._fireChange({reason : ChangeReason.Change});
|
|
@@ -1770,7 +1761,7 @@ sap.ui.define([
|
|
|
1770
1761
|
* If there are pending changes that cannot be ignored or if an unsupported operation mode is
|
|
1771
1762
|
* used (see {@link sap.ui.model.odata.v4.ODataModel#bindList}). Since 1.97.0, pending changes
|
|
1772
1763
|
* are ignored if they relate to a
|
|
1773
|
-
* {@link sap.ui.model.odata.v4.Context#
|
|
1764
|
+
* {@link sap.ui.model.odata.v4.Context#isKeepAlive kept-alive} context of this binding.
|
|
1774
1765
|
* Since 1.98.0, {@link sap.ui.model.odata.v4.Context#isTransient transient} contexts
|
|
1775
1766
|
* of a {@link #getRootBinding root binding} do not count as pending changes. Pending
|
|
1776
1767
|
* {@link sap.ui.model.odata.v4.Context#delete deletions} lead to an error.
|
|
@@ -1843,8 +1834,9 @@ sap.ui.define([
|
|
|
1843
1834
|
* {@link #getCurrentContexts}, this method does not request any data from a back end and does
|
|
1844
1835
|
* not change the binding's state. In contrast to {@link #getCurrentContexts}, it does not only
|
|
1845
1836
|
* return those contexts that were last requested by a control, but all contexts that are
|
|
1846
|
-
* currently available in the binding, including
|
|
1847
|
-
*
|
|
1837
|
+
* currently available in the binding, including
|
|
1838
|
+
* {@link sap.ui.model.odata.v4.Context#isKeepAlive kept-alive} contexts. To filter out
|
|
1839
|
+
* kept-alive contexts that are not part of the list, you could check whether the index is
|
|
1848
1840
|
* <code>undefined</code>, as described in {@link sap.ui.model.odata.v4.Context#getIndex}.
|
|
1849
1841
|
*
|
|
1850
1842
|
* @returns {sap.ui.model.odata.v4.Context[]}
|
|
@@ -1971,6 +1963,7 @@ sap.ui.define([
|
|
|
1971
1963
|
bDataRequested = false,
|
|
1972
1964
|
bFireChange = false,
|
|
1973
1965
|
oGroupLock,
|
|
1966
|
+
bPreventBubbling,
|
|
1974
1967
|
oPromise,
|
|
1975
1968
|
bRefreshEvent = !!this.sChangeReason, // ignored for "*VirtualContext"
|
|
1976
1969
|
sResolvedPath = this.getResolvedPath(),
|
|
@@ -2062,14 +2055,15 @@ sap.ui.define([
|
|
|
2062
2055
|
oGroupLock = this.oReadGroupLock;
|
|
2063
2056
|
this.oReadGroupLock = undefined;
|
|
2064
2057
|
if (!this.oDiff) { // w/o E.C.D there won't be a diff
|
|
2058
|
+
// before fetchContexts needing it and resolveRefreshPromise destroying it
|
|
2059
|
+
bPreventBubbling = this.isRefreshWithoutBubbling();
|
|
2065
2060
|
// make sure "refresh" is followed by async "change"
|
|
2066
2061
|
oPromise = this.fetchContexts(iStart, iLength, iMaximumPrefetchSize, oGroupLock,
|
|
2067
2062
|
/*bAsync*/bRefreshEvent, function () {
|
|
2068
2063
|
bDataRequested = true;
|
|
2069
|
-
that.fireDataRequested();
|
|
2064
|
+
that.fireDataRequested(bPreventBubbling);
|
|
2070
2065
|
});
|
|
2071
|
-
this.resolveRefreshPromise(oPromise)
|
|
2072
|
-
oPromise.then(function (bChanged) {
|
|
2066
|
+
this.resolveRefreshPromise(oPromise).then(function (bChanged) {
|
|
2073
2067
|
if (that.bUseExtendedChangeDetection) {
|
|
2074
2068
|
that.oDiff = {
|
|
2075
2069
|
aDiff : that.getDiff(iLength),
|
|
@@ -2084,12 +2078,13 @@ sap.ui.define([
|
|
|
2084
2078
|
}
|
|
2085
2079
|
}
|
|
2086
2080
|
if (bDataRequested) {
|
|
2087
|
-
that.fireDataReceived({data : {}});
|
|
2081
|
+
that.fireDataReceived({data : {}}, bPreventBubbling);
|
|
2088
2082
|
}
|
|
2089
2083
|
}, function (oError) {
|
|
2090
2084
|
// cache shares promises for concurrent read
|
|
2091
2085
|
if (bDataRequested) {
|
|
2092
|
-
that.fireDataReceived(oError.canceled ? {data : {}} : {error : oError}
|
|
2086
|
+
that.fireDataReceived(oError.canceled ? {data : {}} : {error : oError},
|
|
2087
|
+
bPreventBubbling);
|
|
2093
2088
|
}
|
|
2094
2089
|
throw oError;
|
|
2095
2090
|
}).catch(function (oError) {
|
|
@@ -2385,7 +2380,7 @@ sap.ui.define([
|
|
|
2385
2380
|
/**
|
|
2386
2381
|
* Returns the header context which allows binding to <code>$count</code>.
|
|
2387
2382
|
*
|
|
2388
|
-
* @returns {sap.ui.model.odata.v4.Context}
|
|
2383
|
+
* @returns {sap.ui.model.odata.v4.Context|null}
|
|
2389
2384
|
* The header context or <code>null</code> if the binding is relative and has no context
|
|
2390
2385
|
*
|
|
2391
2386
|
* @public
|
|
@@ -2451,11 +2446,11 @@ sap.ui.define([
|
|
|
2451
2446
|
|| this.aContexts.find(function (oCandidate) {
|
|
2452
2447
|
return oCandidate && oCandidate.getPath() === sPath;
|
|
2453
2448
|
}),
|
|
2454
|
-
iPredicateIndex =
|
|
2449
|
+
iPredicateIndex = _Helper.getPredicateIndex(sPath),
|
|
2455
2450
|
sResolvedPath = this.getResolvedPath();
|
|
2456
2451
|
|
|
2457
2452
|
this.checkSuspended();
|
|
2458
|
-
|
|
2453
|
+
_Helper.checkGroupId(sGroupId);
|
|
2459
2454
|
if (!oContext) {
|
|
2460
2455
|
if (!sResolvedPath) {
|
|
2461
2456
|
throw new Error("Binding is unresolved: " + this);
|
|
@@ -2799,7 +2794,9 @@ sap.ui.define([
|
|
|
2799
2794
|
bKeepCacheOnError ? sGroupId : undefined);
|
|
2800
2795
|
oKeptElementsPromise = that.refreshKeptElements(sGroupId);
|
|
2801
2796
|
if (that.iCurrentEnd > 0) {
|
|
2802
|
-
oPromise = that.createRefreshPromise(
|
|
2797
|
+
oPromise = that.createRefreshPromise(
|
|
2798
|
+
/*bPreventBubbling*/bKeepCacheOnError
|
|
2799
|
+
).catch(function (oError) {
|
|
2803
2800
|
if (!bKeepCacheOnError || oError.canceled) {
|
|
2804
2801
|
throw oError;
|
|
2805
2802
|
}
|
|
@@ -2870,7 +2867,7 @@ sap.ui.define([
|
|
|
2870
2867
|
that.mPreviousContextsByPath[that.getResolvedPath() + sPredicate]
|
|
2871
2868
|
.resetKeepAlive();
|
|
2872
2869
|
} else { // Note: implies oContext.created()
|
|
2873
|
-
that.
|
|
2870
|
+
that.removeCreated(that.aContexts[iIndex]);
|
|
2874
2871
|
}
|
|
2875
2872
|
});
|
|
2876
2873
|
}).catch(function (oError) {
|
|
@@ -2894,8 +2891,9 @@ sap.ui.define([
|
|
|
2894
2891
|
* destroyed, see {@link sap.ui.model.Context#destroy}.
|
|
2895
2892
|
* Supported since 1.55.0
|
|
2896
2893
|
*
|
|
2897
|
-
* A removed context is destroyed unless it is
|
|
2898
|
-
*
|
|
2894
|
+
* A removed context is destroyed unless it is
|
|
2895
|
+
* {@link sap.ui.model.odata.v4.Context#isKeepAlive kept alive} and still exists on the
|
|
2896
|
+
* server.
|
|
2899
2897
|
* @returns {sap.ui.base.SyncPromise}
|
|
2900
2898
|
* A promise which resolves without a defined value when the entity is updated in the cache,
|
|
2901
2899
|
* or rejects if the refresh failed.
|
|
@@ -2947,7 +2945,7 @@ sap.ui.define([
|
|
|
2947
2945
|
i;
|
|
2948
2946
|
|
|
2949
2947
|
if (oContext.iIndex < 0) {
|
|
2950
|
-
that.
|
|
2948
|
+
that.removeCreated(oContext);
|
|
2951
2949
|
bDestroyed = true;
|
|
2952
2950
|
} else {
|
|
2953
2951
|
if (iIndex === undefined) { // -> bStillAlive === false
|
|
@@ -3020,6 +3018,38 @@ sap.ui.define([
|
|
|
3020
3018
|
});
|
|
3021
3019
|
};
|
|
3022
3020
|
|
|
3021
|
+
/**
|
|
3022
|
+
* Removes the given context for a created entity from the list of contexts and - unless it is
|
|
3023
|
+
* kept alive - destroys it later so that the control has time to handle the context's dependent
|
|
3024
|
+
* bindings before.
|
|
3025
|
+
*
|
|
3026
|
+
* @param {sap.ui.model.odata.v4.Context} oContext
|
|
3027
|
+
* The context instance for the created entity to be destroyed
|
|
3028
|
+
*
|
|
3029
|
+
* @private
|
|
3030
|
+
*/
|
|
3031
|
+
ODataListBinding.prototype.removeCreated = function (oContext) {
|
|
3032
|
+
var iIndex = oContext.getModelIndex(),
|
|
3033
|
+
i;
|
|
3034
|
+
|
|
3035
|
+
this.iCreatedContexts -= 1;
|
|
3036
|
+
if (!oContext.isInactive()) {
|
|
3037
|
+
this.iActiveContexts -= 1;
|
|
3038
|
+
}
|
|
3039
|
+
for (i = 0; i < iIndex; i += 1) {
|
|
3040
|
+
this.aContexts[i].iIndex += 1;
|
|
3041
|
+
}
|
|
3042
|
+
if (!this.iCreatedContexts) {
|
|
3043
|
+
this.bFirstCreateAtEnd = undefined;
|
|
3044
|
+
}
|
|
3045
|
+
this.aContexts.splice(iIndex, 1);
|
|
3046
|
+
if (!oContext.isKeepAlive()) {
|
|
3047
|
+
this.destroyLater(oContext);
|
|
3048
|
+
}
|
|
3049
|
+
// The path of all contexts in aContexts after the removed one is untouched, still points to
|
|
3050
|
+
// the same data, hence no checkUpdate is needed.
|
|
3051
|
+
};
|
|
3052
|
+
|
|
3023
3053
|
/**
|
|
3024
3054
|
* Requests the entities for the given index range of the binding's collection and resolves with
|
|
3025
3055
|
* the corresponding contexts.
|
|
@@ -3052,7 +3082,7 @@ sap.ui.define([
|
|
|
3052
3082
|
throw new Error("Unresolved binding: " + this.sPath);
|
|
3053
3083
|
}
|
|
3054
3084
|
this.checkSuspended();
|
|
3055
|
-
|
|
3085
|
+
_Helper.checkGroupId(sGroupId);
|
|
3056
3086
|
|
|
3057
3087
|
iStart = iStart || 0;
|
|
3058
3088
|
iLength = iLength || this.oModel.iSizeLimit;
|
|
@@ -3111,7 +3141,7 @@ sap.ui.define([
|
|
|
3111
3141
|
* A callback function to filter only relevant messages. The callback returns whether the
|
|
3112
3142
|
* given {@link sap.ui.core.message.Message} is considered. If no callback function is given,
|
|
3113
3143
|
* all messages are considered.
|
|
3114
|
-
* @returns {Promise<sap.ui.model.Filter>}
|
|
3144
|
+
* @returns {Promise<sap.ui.model.Filter|null>}
|
|
3115
3145
|
* A Promise that resolves with a {@link sap.ui.model.Filter} representing the entries with
|
|
3116
3146
|
* messages; it resolves with <code>null</code> if the binding is not resolved or if there is
|
|
3117
3147
|
* no message for any entry
|
|
@@ -3181,7 +3211,7 @@ sap.ui.define([
|
|
|
3181
3211
|
* cancellations.
|
|
3182
3212
|
*
|
|
3183
3213
|
* @param {Promise} oPromise - A promise
|
|
3184
|
-
* @
|
|
3214
|
+
* @returns {Promise} A promise including an error handler
|
|
3185
3215
|
*/
|
|
3186
3216
|
function reportError(oPromise) {
|
|
3187
3217
|
return oPromise.catch(function (oError) {
|
|
@@ -3428,7 +3458,7 @@ sap.ui.define([
|
|
|
3428
3458
|
*
|
|
3429
3459
|
* @param {object} [oAggregation]
|
|
3430
3460
|
* An object holding the information needed for data aggregation; see also
|
|
3431
|
-
* <a href="
|
|
3461
|
+
* <a href="https://docs.oasis-open.org/odata/odata-data-aggregation-ext/v4.0/">OData
|
|
3432
3462
|
* Extension for Data Aggregation Version 4.0</a>. Since 1.76.0, <code>undefined</code> can be
|
|
3433
3463
|
* used to remove the data aggregation object, which allows to set <code>$apply</code>
|
|
3434
3464
|
* explicitly afterwards. <code>null</code> is not supported.<br>
|
|
@@ -3448,6 +3478,7 @@ sap.ui.define([
|
|
|
3448
3478
|
* <li> <code>grandTotal</code>: An optional boolean that tells whether a grand total for
|
|
3449
3479
|
* this aggregatable property is needed (since 1.59.0); filtering by any aggregatable
|
|
3450
3480
|
* property is not supported in this case (since 1.89.0) as is "$search" (since 1.93.0)
|
|
3481
|
+
* or the <code>vGroup</code> parameter of {@link sap.ui.model.Sorter} (since 1.107.0)
|
|
3451
3482
|
* <li> <code>subtotals</code>: An optional boolean that tells whether subtotals for this
|
|
3452
3483
|
* aggregatable property are needed
|
|
3453
3484
|
* <li> <code>with</code>: An optional string that provides the name of the method (for
|
|
@@ -3481,17 +3512,20 @@ sap.ui.define([
|
|
|
3481
3512
|
* @param {string[]} [oAggregation.groupLevels]
|
|
3482
3513
|
* A list of groupable property names used to determine group levels. They may, but don't need
|
|
3483
3514
|
* to, be repeated in <code>oAggregation.group</code>. Group levels cannot be combined with
|
|
3484
|
-
* filtering for aggregated properties or (since 1.93.0) with "$search".
|
|
3515
|
+
* filtering for aggregated properties or (since 1.93.0) with "$search" or (since 1.107.0) the
|
|
3516
|
+
* <code>vGroup</code> parameter of {@link sap.ui.model.Sorter}.
|
|
3485
3517
|
* @param {string} [oAggregation.hierarchyQualifier]
|
|
3486
3518
|
* The qualifier for the pair of "Org.OData.Aggregation.V1.RecursiveHierarchy" and
|
|
3487
3519
|
* "com.sap.vocabularies.Hierarchy.v1.RecursiveHierarchy" annotations at this binding's
|
|
3488
3520
|
* entity type (@experimental as of version 1.105.0). If present, a recursive hierarchy
|
|
3489
|
-
* without data aggregation is defined, and the only other supported
|
|
3490
|
-
* <code>expandTo</code>.
|
|
3521
|
+
* without data aggregation is defined, and the only other supported properties are
|
|
3522
|
+
* <code>expandTo</code> and <code>search</code>. A recursive hierarchy cannot be combined
|
|
3523
|
+
* with "$search" or (since 1.107.0) the <code>vGroup</code> parameter of
|
|
3524
|
+
* {@link sap.ui.model.Sorter}.
|
|
3491
3525
|
* @param {string} [oAggregation.search]
|
|
3492
|
-
* Like the <a
|
|
3493
|
-
*
|
|
3494
|
-
* "5.1.7 System Query Option $search"</a>, but applied before data aggregation
|
|
3526
|
+
* Like the <a href=
|
|
3527
|
+
* "https://docs.oasis-open.org/odata/odata/v4.0/odata-v4.0-part2-url-conventions.html#_Search_System_Query"
|
|
3528
|
+
* >"5.1.7 System Query Option $search"</a>, but applied before data aggregation
|
|
3495
3529
|
* (since 1.93.0). Note that certain content will break the syntax of the system query option
|
|
3496
3530
|
* <code>$apply</code> and result in an invalid request. If the OData service supports the
|
|
3497
3531
|
* proposal <a href="https://issues.oasis-open.org/browse/ODATA-1452">ODATA-1452</a>, then
|
|
@@ -3507,7 +3541,8 @@ sap.ui.define([
|
|
|
3507
3541
|
* <ul>
|
|
3508
3542
|
* <li> the given data aggregation object is unsupported,
|
|
3509
3543
|
* <li> the <code>$apply</code> system query option has been specified explicitly before,
|
|
3510
|
-
* <li> the binding has a kept-alive
|
|
3544
|
+
* <li> the binding has a {@link sap.ui.model.odata.v4.Context#isKeepAlive kept-alive}
|
|
3545
|
+
* context,
|
|
3511
3546
|
* <li> there are pending changes,
|
|
3512
3547
|
* <li> a recursive hierarchy is requested, but the model does not use the
|
|
3513
3548
|
* <code>autoExpandSelect</code> parameter.
|
|
@@ -3648,7 +3683,7 @@ sap.ui.define([
|
|
|
3648
3683
|
* <li> an unsupported operation mode is used (see
|
|
3649
3684
|
* {@link sap.ui.model.odata.v4.ODataModel#bindList}). Since 1.97.0, pending changes are
|
|
3650
3685
|
* ignored if they relate to a
|
|
3651
|
-
* {@link sap.ui.model.odata.v4.Context#
|
|
3686
|
+
* {@link sap.ui.model.odata.v4.Context#isKeepAlive kept-alive} context of this binding.
|
|
3652
3687
|
* Since 1.98.0, {@link sap.ui.model.odata.v4.Context#isTransient transient} contexts of a
|
|
3653
3688
|
* {@link #getRootBinding root binding} do not count as pending changes.
|
|
3654
3689
|
* <li> contexts are {@link sap.ui.model.data.v4.Context#delete deleted} on the client, but
|
|
@@ -3709,8 +3744,8 @@ sap.ui.define([
|
|
|
3709
3744
|
*
|
|
3710
3745
|
* @param {object[]} aAggregation
|
|
3711
3746
|
* An array with objects holding the information needed for data aggregation; see also
|
|
3712
|
-
* <a href="
|
|
3713
|
-
* for Data Aggregation Version 4.0</a>
|
|
3747
|
+
* <a href="https://docs.oasis-open.org/odata/odata-data-aggregation-ext/v4.0/">OData
|
|
3748
|
+
* Extension for Data Aggregation Version 4.0</a>
|
|
3714
3749
|
* @param {string} aAggregation[].name
|
|
3715
3750
|
* The name of an OData property. A property which is neither a dimension nor a measure, but
|
|
3716
3751
|
* for instance a text property or in some cases a unit property, has no further details.
|
|
@@ -157,7 +157,7 @@ sap.ui.define([
|
|
|
157
157
|
* @hideconstructor
|
|
158
158
|
* @public
|
|
159
159
|
* @since 1.37.0
|
|
160
|
-
* @version 1.
|
|
160
|
+
* @version 1.107.0
|
|
161
161
|
*/
|
|
162
162
|
ODataMetaModel = MetaModel.extend("sap.ui.model.odata.v4.ODataMetaModel", {
|
|
163
163
|
constructor : constructor
|
|
@@ -696,13 +696,16 @@ sap.ui.define([
|
|
|
696
696
|
* Whether <code><edmx:Reference></code> and <code><edmx:Include></code> directives are
|
|
697
697
|
* supported in order to load schemas on demand from other $metadata documents and include
|
|
698
698
|
* them into the current service ("cross-service references").
|
|
699
|
+
* @param {string} [sLanguage]
|
|
700
|
+
* The "sap-language" URL parameter
|
|
699
701
|
*/
|
|
700
|
-
function constructor(oRequestor, sUrl, vAnnotationUri, oModel, bSupportReferences) {
|
|
702
|
+
function constructor(oRequestor, sUrl, vAnnotationUri, oModel, bSupportReferences, sLanguage) {
|
|
701
703
|
MetaModel.call(this);
|
|
702
704
|
this.aAnnotationUris = vAnnotationUri && !Array.isArray(vAnnotationUri)
|
|
703
705
|
? [vAnnotationUri] : vAnnotationUri;
|
|
704
706
|
this.sDefaultBindingMode = BindingMode.OneTime;
|
|
705
707
|
this.mETags = {};
|
|
708
|
+
this.sLanguage = sLanguage;
|
|
706
709
|
this.oLastModified = new Date(0);
|
|
707
710
|
this.oMetadataPromise = null;
|
|
708
711
|
this.oModel = oModel;
|
|
@@ -2221,7 +2224,7 @@ sap.ui.define([
|
|
|
2221
2224
|
/**
|
|
2222
2225
|
* Returns a map of entity tags for each $metadata or annotation file loaded so far.
|
|
2223
2226
|
*
|
|
2224
|
-
* @returns {
|
|
2227
|
+
* @returns {Object<string,string|null>}
|
|
2225
2228
|
* A map which contains one entry for each $metadata or annotation file loaded so far: the key
|
|
2226
2229
|
* is the file's URL as a <code>string</code> and the value is the <code>string</code> value
|
|
2227
2230
|
* of the "ETag" response header for that file. Initially, the map is empty. If no "ETag"
|
|
@@ -2305,7 +2308,7 @@ sap.ui.define([
|
|
|
2305
2308
|
* Optional (binding) parameters; if they are given, <code>oContext</code> cannot be omitted
|
|
2306
2309
|
* @param {object} [mParameters.scope]
|
|
2307
2310
|
* Optional scope for lookup of aliases for computed annotations (since 1.43.0)
|
|
2308
|
-
* @returns {any}
|
|
2311
|
+
* @returns {any|undefined}
|
|
2309
2312
|
* The requested metadata object if it is already available, or <code>undefined</code>
|
|
2310
2313
|
*
|
|
2311
2314
|
* @function
|
|
@@ -2345,6 +2348,7 @@ sap.ui.define([
|
|
|
2345
2348
|
autoExpandSelect : bAutoExpandSelect,
|
|
2346
2349
|
groupId : sGroupId,
|
|
2347
2350
|
httpHeaders : this.oModel.getHttpHeaders(),
|
|
2351
|
+
metadataUrlParams : this.sLanguage && {"sap-language" : this.sLanguage},
|
|
2348
2352
|
operationMode : OperationMode.Server,
|
|
2349
2353
|
serviceUrl : sUrl,
|
|
2350
2354
|
sharedRequests : true,
|
|
@@ -2555,24 +2559,20 @@ sap.ui.define([
|
|
|
2555
2559
|
|
|
2556
2560
|
return this.requestObject("/@com.sap.vocabularies.CodeList.v1." + sTerm)
|
|
2557
2561
|
.then(function (oCodeList) {
|
|
2558
|
-
var sCacheKey,
|
|
2559
|
-
oCodeListMetaModel,
|
|
2560
|
-
oCodeListModel,
|
|
2561
|
-
oPromise,
|
|
2562
|
-
sTypePath;
|
|
2562
|
+
var sCacheKey, oCodeListMetaModel, oCodeListModel, oPromise, sTypePath, sUrl;
|
|
2563
2563
|
|
|
2564
2564
|
if (!oCodeList) {
|
|
2565
2565
|
return null;
|
|
2566
2566
|
}
|
|
2567
2567
|
|
|
2568
|
-
|
|
2569
|
-
|
|
2568
|
+
sUrl = _Helper.setLanguage(oCodeList.Url, that.sLanguage);
|
|
2569
|
+
sCacheKey = that.getAbsoluteServiceUrl(sUrl) + "#" + oCodeList.CollectionPath;
|
|
2570
2570
|
oPromise = mCodeListUrl2Promise.get(sCacheKey);
|
|
2571
2571
|
if (oPromise) {
|
|
2572
2572
|
return oPromise;
|
|
2573
2573
|
}
|
|
2574
2574
|
|
|
2575
|
-
oCodeListModel = that.getOrCreateSharedModel(
|
|
2575
|
+
oCodeListModel = that.getOrCreateSharedModel(sUrl, "$direct");
|
|
2576
2576
|
oCodeListMetaModel = oCodeListModel.getMetaModel();
|
|
2577
2577
|
sTypePath = "/" + oCodeList.CollectionPath + "/";
|
|
2578
2578
|
oPromise = oCodeListMetaModel.requestObject(sTypePath).then(function (oType) {
|
|
@@ -2697,7 +2697,7 @@ sap.ui.define([
|
|
|
2697
2697
|
* If present, it must point to this meta model's root entity container, that is,
|
|
2698
2698
|
* <code>oDetails.context.getModel() === this</code> and
|
|
2699
2699
|
* <code>oDetails.context.getPath() === "/"</code>
|
|
2700
|
-
* @returns {Promise}
|
|
2700
|
+
* @returns {Promise<Object<string,{StandardCode: string, Text: string, UnitSpecificScale: string}>|null>}
|
|
2701
2701
|
* A promise resolving with the currency customizing which is a map from currency key to an
|
|
2702
2702
|
* object with the following properties:
|
|
2703
2703
|
* <ul>
|
|
@@ -2773,9 +2773,11 @@ sap.ui.define([
|
|
|
2773
2773
|
* </template:with>
|
|
2774
2774
|
* </pre>
|
|
2775
2775
|
*
|
|
2776
|
-
* The basic idea is that every path described in
|
|
2777
|
-
* "
|
|
2778
|
-
*
|
|
2776
|
+
* The basic idea is that every path described in <a href=
|
|
2777
|
+
* "https://docs.oasis-open.org/odata/odata/v4.0/odata-v4.0-part3-csdl.html#_Attribute_Target"
|
|
2778
|
+
* >"14.2.1 Attribute Target"</a> in specification "OData Version 4.0 Part 3: Common Schema
|
|
2779
|
+
* Definition Language" is a valid absolute path within the metadata model if a leading slash is
|
|
2780
|
+
* added; for example
|
|
2779
2781
|
* "/" + "MySchema.MyEntityContainer/MyEntitySet/MyComplexProperty/MyNavigationProperty". Also,
|
|
2780
2782
|
* every path described in "14.5.2 Expression edm:AnnotationPath",
|
|
2781
2783
|
* "14.5.11 Expression edm:NavigationPropertyPath", "14.5.12 Expression edm:Path", and
|
|
@@ -2850,8 +2852,9 @@ sap.ui.define([
|
|
|
2850
2852
|
* "14.5.14.2 Element edm:PropertyValue" are addressed by segments like
|
|
2851
2853
|
* "<7.2.1 Attribute Property>@...", "$OnDelete@...", "<10.2.1 Attribute Name>@..." and
|
|
2852
2854
|
* "<14.5.14.2.1 Attribute Property>@..." (where angle brackets denote a variable part and
|
|
2853
|
-
* sections refer to specification
|
|
2854
|
-
*
|
|
2855
|
+
* sections refer to specification <a href=
|
|
2856
|
+
* "https://docs.oasis-open.org/odata/odata/v4.0/odata-v4.0-part3-csdl.htm"
|
|
2857
|
+
* >"OData Version 4.0 Part 3: Common Schema Definition Language"</a>).
|
|
2855
2858
|
*
|
|
2856
2859
|
* Annotations starting with "@@", for example
|
|
2857
2860
|
* "@@sap.ui.model.odata.v4.AnnotationHelper.isMultiple" or "@@.AH.isMultiple" or
|
|
@@ -3030,7 +3033,7 @@ sap.ui.define([
|
|
|
3030
3033
|
* If present, it must point to this meta model's root entity container, that is,
|
|
3031
3034
|
* <code>oDetails.context.getModel() === this</code> and
|
|
3032
3035
|
* <code>oDetails.context.getPath() === "/"</code>
|
|
3033
|
-
* @returns {Promise}
|
|
3036
|
+
* @returns {Promise<Object<string,{StandardCode: string, Text: string, UnitSpecificScale: string}>|null>}
|
|
3034
3037
|
* A promise resolving with the unit customizing which is a map from unit key to an object
|
|
3035
3038
|
* with the following properties:
|
|
3036
3039
|
* <ul>
|
|
@@ -3423,7 +3426,7 @@ sap.ui.define([
|
|
|
3423
3426
|
* Returns a string representation of this object including the URL to the $metadata document of
|
|
3424
3427
|
* the service.
|
|
3425
3428
|
*
|
|
3426
|
-
* @
|
|
3429
|
+
* @returns {string} A string description of this model
|
|
3427
3430
|
*
|
|
3428
3431
|
* @public
|
|
3429
3432
|
* @since 1.37.0
|