@openui5/sap.ui.core 1.103.0 → 1.105.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 +18 -1
- package/LICENSES/LicenseRef-tzdata-PublicDomain.txt +5 -0
- package/THIRDPARTY.txt +36 -3
- package/package.json +1 -1
- package/src/jquery.sap.global.js +1 -1
- package/src/jquery.sap.properties.js +1 -1
- package/src/jquery.sap.resources.js +1 -1
- package/src/jquery.sap.script.js +1 -1
- package/src/jquery.sap.storage.js +3 -3
- package/src/sap/base/util/LoaderExtensions.js +69 -61
- package/src/sap/base/util/fetch.js +230 -0
- package/src/sap/base/util/mixedFetch.js +69 -0
- 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 +73 -0
- package/src/sap/ui/Device.js +5 -5
- package/src/sap/ui/Global.js +4 -4
- package/src/sap/ui/base/Event.js +1 -1
- package/src/sap/ui/base/EventProvider.js +1 -1
- package/src/sap/ui/base/Interface.js +1 -1
- package/src/sap/ui/base/ManagedObject.js +1 -1
- package/src/sap/ui/base/ManagedObjectMetadata.js +1 -1
- package/src/sap/ui/base/ManagedObjectObserver.js +2 -2
- 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 +63 -45
- package/src/sap/ui/core/AccessKeysEnablement.js +173 -0
- package/src/sap/ui/core/AppCacheBuster.js +65 -51
- package/src/sap/ui/core/BusyIndicator.js +1 -1
- package/src/sap/ui/core/Component.js +48 -21
- package/src/sap/ui/core/ComponentContainer.js +1 -1
- package/src/sap/ui/core/ComponentMetadata.js +12 -12
- package/src/sap/ui/core/ComponentSupport.js +1 -1
- package/src/sap/ui/core/Configuration.js +77 -26
- package/src/sap/ui/core/Control.js +1 -1
- package/src/sap/ui/core/Core.js +49 -61
- 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 +9 -1
- package/src/sap/ui/core/ElementMetadata.js +6 -4
- package/src/sap/ui/core/EnabledPropagator.js +1 -1
- package/src/sap/ui/core/EventBus.js +1 -1
- package/src/sap/ui/core/ExtensionPoint.js +2 -2
- package/src/sap/ui/core/FocusHandler.js +56 -33
- package/src/sap/ui/core/Fragment.js +1 -1
- package/src/sap/ui/core/HTML.js +1 -1
- package/src/sap/ui/core/History.js +1 -1
- package/src/sap/ui/core/Icon.js +1 -1
- package/src/sap/ui/core/IndicationColorSupport.js +1 -1
- package/src/sap/ui/core/IntervalTrigger.js +1 -1
- package/src/sap/ui/core/InvisibleMessage.js +1 -1
- package/src/sap/ui/core/InvisibleRenderer.js +1 -1
- package/src/sap/ui/core/InvisibleText.js +4 -1
- package/src/sap/ui/core/Item.js +1 -1
- package/src/sap/ui/core/LabelEnablement.js +1 -1
- package/src/sap/ui/core/LayoutData.js +1 -1
- package/src/sap/ui/core/ListItem.js +1 -1
- package/src/sap/ui/core/LocalBusyIndicator.js +1 -1
- package/src/sap/ui/core/Locale.js +1 -1
- package/src/sap/ui/core/LocaleData.js +4 -47
- package/src/sap/ui/core/Manifest.js +3 -5
- package/src/sap/ui/core/Message.js +1 -1
- package/src/sap/ui/core/RenderManager.js +11 -21
- package/src/sap/ui/core/Renderer.js +1 -1
- package/src/sap/ui/core/ResizeHandler.js +22 -43
- package/src/sap/ui/core/ScrollBar.js +1 -1
- package/src/sap/ui/core/SeparatorItem.js +1 -1
- package/src/sap/ui/core/Title.js +1 -1
- package/src/sap/ui/core/TooltipBase.js +1 -1
- package/src/sap/ui/core/UIArea.js +6 -4
- package/src/sap/ui/core/UIComponent.js +1 -1
- package/src/sap/ui/core/UIComponentMetadata.js +1 -1
- package/src/sap/ui/core/ValueStateSupport.js +1 -1
- package/src/sap/ui/core/VariantLayoutData.js +1 -1
- package/src/sap/ui/core/XMLComposite.js +4 -1
- package/src/sap/ui/core/XMLCompositeMetadata.js +1 -1
- package/src/sap/ui/core/_IconRegistry.js +66 -55
- package/src/sap/ui/core/cache/CacheManager.js +18 -14
- package/src/sap/ui/core/cache/CacheManagerNOP.js +5 -2
- package/src/sap/ui/core/cache/LRUPersistentCache.js +15 -8
- package/src/sap/ui/core/cldr/en.json +0 -1
- package/src/sap/ui/core/date/Buddhist.js +15 -13
- package/src/sap/ui/core/date/Japanese.js +0 -6
- package/src/sap/ui/core/date/UniversalDate.js +144 -34
- package/src/sap/ui/core/delegate/ItemNavigation.js +2 -2
- package/src/sap/ui/core/delegate/ScrollEnablement.js +1 -1
- package/src/sap/ui/core/dnd/DragDropBase.js +1 -1
- package/src/sap/ui/core/dnd/DragDropInfo.js +3 -3
- package/src/sap/ui/core/dnd/DragInfo.js +1 -1
- package/src/sap/ui/core/dnd/DropInfo.js +1 -1
- package/src/sap/ui/core/format/DateFormat.js +31 -9
- package/src/sap/ui/core/format/NumberFormat.js +91 -25
- package/src/sap/ui/core/format/TimezoneUtil.js +2 -2
- package/src/sap/ui/core/hyphenation/Hyphenation.js +1 -1
- package/src/sap/ui/core/library.js +44 -3
- 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 +1 -1
- 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.properties +2 -0
- package/src/sap/ui/core/messagebundle_ar.properties +54 -53
- package/src/sap/ui/core/messagebundle_bg.properties +54 -53
- package/src/sap/ui/core/messagebundle_ca.properties +28 -27
- package/src/sap/ui/core/messagebundle_cs.properties +37 -36
- package/src/sap/ui/core/messagebundle_cy.properties +57 -56
- package/src/sap/ui/core/messagebundle_da.properties +53 -52
- package/src/sap/ui/core/messagebundle_de.properties +54 -53
- package/src/sap/ui/core/messagebundle_el.properties +46 -45
- package/src/sap/ui/core/messagebundle_en.properties +57 -56
- package/src/sap/ui/core/messagebundle_en_GB.properties +57 -56
- package/src/sap/ui/core/messagebundle_en_US_sappsd.properties +1 -0
- package/src/sap/ui/core/messagebundle_en_US_saprigi.properties +1 -0
- package/src/sap/ui/core/messagebundle_en_US_saptrc.properties +1 -0
- package/src/sap/ui/core/messagebundle_es.properties +42 -41
- package/src/sap/ui/core/messagebundle_es_MX.properties +54 -53
- package/src/sap/ui/core/messagebundle_et.properties +51 -50
- package/src/sap/ui/core/messagebundle_fi.properties +48 -47
- package/src/sap/ui/core/messagebundle_fr.properties +37 -36
- package/src/sap/ui/core/messagebundle_fr_CA.properties +22 -21
- package/src/sap/ui/core/messagebundle_hi.properties +42 -41
- package/src/sap/ui/core/messagebundle_hr.properties +55 -54
- package/src/sap/ui/core/messagebundle_hu.properties +56 -55
- package/src/sap/ui/core/messagebundle_id.properties +55 -54
- package/src/sap/ui/core/messagebundle_it.properties +55 -54
- package/src/sap/ui/core/messagebundle_iw.properties +55 -54
- package/src/sap/ui/core/messagebundle_ja.properties +48 -47
- package/src/sap/ui/core/messagebundle_kk.properties +41 -40
- package/src/sap/ui/core/messagebundle_ko.properties +21 -20
- package/src/sap/ui/core/messagebundle_lt.properties +55 -54
- package/src/sap/ui/core/messagebundle_lv.properties +55 -54
- package/src/sap/ui/core/messagebundle_ms.properties +52 -51
- package/src/sap/ui/core/messagebundle_nl.properties +53 -52
- package/src/sap/ui/core/messagebundle_no.properties +53 -52
- package/src/sap/ui/core/messagebundle_pl.properties +52 -51
- package/src/sap/ui/core/messagebundle_pt.properties +54 -53
- package/src/sap/ui/core/messagebundle_pt_PT.properties +55 -54
- package/src/sap/ui/core/messagebundle_ro.properties +56 -55
- package/src/sap/ui/core/messagebundle_ru.properties +52 -51
- package/src/sap/ui/core/messagebundle_sh.properties +57 -56
- package/src/sap/ui/core/messagebundle_sk.properties +54 -53
- package/src/sap/ui/core/messagebundle_sl.properties +56 -55
- package/src/sap/ui/core/messagebundle_sv.properties +52 -51
- package/src/sap/ui/core/messagebundle_th.properties +25 -24
- package/src/sap/ui/core/messagebundle_tr.properties +56 -55
- package/src/sap/ui/core/messagebundle_uk.properties +55 -54
- package/src/sap/ui/core/messagebundle_vi.properties +56 -55
- package/src/sap/ui/core/messagebundle_zh_CN.properties +55 -54
- package/src/sap/ui/core/messagebundle_zh_TW.properties +55 -54
- package/src/sap/ui/core/mvc/Controller.js +12 -12
- package/src/sap/ui/core/mvc/HTMLView.js +1 -1
- package/src/sap/ui/core/mvc/JSONView.js +1 -1
- package/src/sap/ui/core/mvc/JSView.js +1 -1
- package/src/sap/ui/core/mvc/TemplateView.js +1 -1
- package/src/sap/ui/core/mvc/View.js +7 -7
- package/src/sap/ui/core/mvc/XMLView.js +1 -2
- package/src/sap/ui/core/plugin/DeclarativeSupport.js +1 -1
- package/src/sap/ui/core/plugin/LessSupport.js +16 -14
- package/src/sap/ui/core/plugin/TemplatingSupport.js +2 -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 +3 -3
- package/src/sap/ui/core/routing/async/TargetCache.js +4 -0
- package/src/sap/ui/core/rules/Config.support.js +1 -1
- package/src/sap/ui/core/rules/View.support.js +11 -4
- package/src/sap/ui/core/search/OpenSearchProvider.js +25 -12
- package/src/sap/ui/core/search/SearchProvider.js +2 -2
- 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/Plugin.js +1 -1
- package/src/sap/ui/core/support/Support.js +3 -4
- package/src/sap/ui/core/support/plugins/ControlTree.js +1 -1
- package/src/sap/ui/core/support/plugins/Debugging.js +1 -1
- 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 +46 -33
- package/src/sap/ui/core/support/plugins/Trace.js +1 -1
- package/src/sap/ui/core/support/plugins/ViewInfo.js +2 -3
- package/src/sap/ui/core/themes/base/Icon.less +4 -0
- package/src/sap/ui/core/themes/base/LocalBusyIndicator.less +1 -1
- package/src/sap/ui/core/themes/base/base.less +26 -26
- package/src/sap/ui/core/themes/base/fonts/SAP-icons.woff2 +0 -0
- package/src/sap/ui/core/themes/base/global.less +5 -1
- package/src/sap/ui/core/theming/Parameters.js +45 -39
- package/src/sap/ui/core/tmpl/DOMAttribute.js +1 -1
- package/src/sap/ui/core/tmpl/DOMElement.js +1 -1
- package/src/sap/ui/core/tmpl/HandlebarsTemplate.js +1 -1
- package/src/sap/ui/core/tmpl/Template.js +2 -2
- package/src/sap/ui/core/tmpl/TemplateControl.js +1 -1
- 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 +61 -42
- package/src/sap/ui/core/util/MockServer.js +1 -1
- package/src/sap/ui/core/util/PasteHelper.js +1 -1
- package/src/sap/ui/core/util/XMLPreprocessor.js +1 -1
- package/src/sap/ui/core/util/reflection/BaseTreeModifier.js +0 -3
- 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 +1 -1
- 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 +1 -1
- package/src/sap/ui/debug/DebugEnv.js +1 -1
- package/src/sap/ui/debug/PropertyList.js +19 -9
- package/src/sap/ui/model/ClientModel.js +1 -1
- package/src/sap/ui/model/CompositeDataState.js +1 -1
- package/src/sap/ui/model/CompositeType.js +1 -1
- package/src/sap/ui/model/DataState.js +2 -2
- package/src/sap/ui/model/MetaModel.js +1 -1
- package/src/sap/ui/model/Model.js +1 -1
- package/src/sap/ui/model/SelectionModel.js +1 -1
- package/src/sap/ui/model/SimpleType.js +1 -1
- package/src/sap/ui/model/TreeAutoExpandMode.js +1 -1
- package/src/sap/ui/model/Type.js +1 -1
- package/src/sap/ui/model/_Helper.js +3 -1
- package/src/sap/ui/model/analytics/odata4analytics.js +2 -2
- package/src/sap/ui/model/base/ManagedObjectModel.js +2 -2
- package/src/sap/ui/model/json/JSONModel.js +1 -1
- package/src/sap/ui/model/message/MessageModel.js +1 -1
- package/src/sap/ui/model/odata/ODataAnnotations.js +1 -1
- package/src/sap/ui/model/odata/ODataMessageParser.js +4 -4
- package/src/sap/ui/model/odata/ODataMetaModel.js +1 -1
- package/src/sap/ui/model/odata/ODataMetadata.js +6 -3
- package/src/sap/ui/model/odata/ODataModel.js +1 -1
- package/src/sap/ui/model/odata/ODataTreeBindingFlat.js +437 -239
- 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 +1 -1
- package/src/sap/ui/model/odata/v2/ODataAnnotations.js +1 -1
- package/src/sap/ui/model/odata/v2/ODataContextBinding.js +4 -1
- package/src/sap/ui/model/odata/v2/ODataListBinding.js +25 -0
- package/src/sap/ui/model/odata/v2/ODataModel.js +161 -122
- package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +18 -2
- package/src/sap/ui/model/odata/v4/Context.js +86 -30
- package/src/sap/ui/model/odata/v4/ODataBinding.js +4 -8
- package/src/sap/ui/model/odata/v4/ODataContextBinding.js +26 -27
- package/src/sap/ui/model/odata/v4/ODataListBinding.js +121 -93
- package/src/sap/ui/model/odata/v4/ODataMetaModel.js +1 -1
- package/src/sap/ui/model/odata/v4/ODataModel.js +3 -2
- package/src/sap/ui/model/odata/v4/ODataParentBinding.js +10 -13
- package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +4 -4
- package/src/sap/ui/model/odata/v4/lib/_AggregationCache.js +135 -28
- package/src/sap/ui/model/odata/v4/lib/_AggregationHelper.js +133 -16
- package/src/sap/ui/model/odata/v4/lib/_Cache.js +341 -161
- package/src/sap/ui/model/odata/v4/lib/_Helper.js +73 -9
- package/src/sap/ui/model/odata/v4/lib/_Requestor.js +8 -6
- package/src/sap/ui/model/resource/ResourceModel.js +1 -1
- package/src/sap/ui/model/type/Boolean.js +1 -1
- package/src/sap/ui/model/type/Currency.js +1 -1
- 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 +1 -1
- 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 +1 -1
- package/src/sap/ui/model/xml/XMLModel.js +4 -2
- package/src/sap/ui/performance/trace/FESR.js +27 -24
- package/src/sap/ui/performance/trace/Interaction.js +66 -16
- package/src/sap/ui/qunit/sinon-qunit-bridge.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/Opa5.js +1 -1
- package/src/sap/ui/test/TestUtils.js +35 -2
- package/src/sap/ui/test/actions/Press.js +7 -0
- package/src/sap/ui/test/generic/TestBase.js +1 -1
- package/src/sap/ui/test/matchers/AggregationContainsPropertyEqual.js +2 -3
- package/src/sap/ui/test/matchers/AggregationFilled.js +2 -3
- package/src/sap/ui/test/matchers/AggregationLengthEquals.js +2 -3
- package/src/sap/ui/test/matchers/Matcher.js +9 -11
- package/src/sap/ui/test/opaQunit.js +15 -9
- package/src/sap/ui/test/pipelines/ActionPipeline.js +2 -3
- package/src/sap/ui/test/pipelines/MatcherPipeline.js +2 -3
- package/src/sap/ui/test/pipelines/PipelineFactory.js +2 -3
- package/src/sap/ui/thirdparty/IPv6.js +1 -1
- package/src/sap/ui/thirdparty/SecondLevelDomains.js +1 -1
- package/src/sap/ui/thirdparty/URI.js +8 -2
- package/src/sap/ui/thirdparty/URITemplate.js +1 -1
- package/src/sap/ui/util/Storage.js +1 -1
- package/src/sap/ui/util/XMLHelper.js +1 -1
|
@@ -58,7 +58,7 @@ sap.ui.define([
|
|
|
58
58
|
* @mixes sap.ui.model.odata.v4.ODataParentBinding
|
|
59
59
|
* @public
|
|
60
60
|
* @since 1.37.0
|
|
61
|
-
* @version 1.
|
|
61
|
+
* @version 1.105.0
|
|
62
62
|
* @borrows sap.ui.model.odata.v4.ODataBinding#getGroupId as #getGroupId
|
|
63
63
|
* @borrows sap.ui.model.odata.v4.ODataBinding#getRootBinding as #getRootBinding
|
|
64
64
|
* @borrows sap.ui.model.odata.v4.ODataBinding#getUpdateGroupId as #getUpdateGroupId
|
|
@@ -121,10 +121,13 @@ sap.ui.define([
|
|
|
121
121
|
// number of active (client-side) created contexts in aContexts
|
|
122
122
|
this.iActiveContexts = 0;
|
|
123
123
|
this.aApplicationFilters = _Helper.toArray(vFilters);
|
|
124
|
-
this.sChangeReason = oModel.bAutoExpandSelect && !mParameters
|
|
124
|
+
this.sChangeReason = oModel.bAutoExpandSelect && !_Helper.isDataAggregation(mParameters)
|
|
125
125
|
? "AddVirtualContext"
|
|
126
126
|
: undefined;
|
|
127
|
+
// BEWARE: #doReplaceWith can insert a context w/ negative index, but w/o #created promise
|
|
128
|
+
// into aContexts' area of "created contexts"!
|
|
127
129
|
this.iCreatedContexts = 0; // number of (client-side) created contexts in aContexts
|
|
130
|
+
this.iDeletedContexts = 0; // number of (client-side) deleted contexts
|
|
128
131
|
this.oDiff = undefined;
|
|
129
132
|
this.aFilters = [];
|
|
130
133
|
this.sGroupId = mParameters.$$groupId;
|
|
@@ -264,7 +267,7 @@ sap.ui.define([
|
|
|
264
267
|
* Whether not to request the new count from the server; useful in case of
|
|
265
268
|
* {@link sap.ui.model.odata.v4.Context#replaceWith} where it is known that the count remains
|
|
266
269
|
* unchanged; w/o a lock this should be true
|
|
267
|
-
* @returns {
|
|
270
|
+
* @returns {sap.ui.base.SyncPromise}
|
|
268
271
|
* A promise which is resolved without a result in case of success, or rejected with an
|
|
269
272
|
* instance of <code>Error</code> in case of failure.
|
|
270
273
|
* @throws {Error}
|
|
@@ -274,70 +277,64 @@ sap.ui.define([
|
|
|
274
277
|
*/
|
|
275
278
|
ODataListBinding.prototype._delete = function (oGroupLock, sEditUrl, oContext, oETagEntity,
|
|
276
279
|
bDoNotRequestCount) {
|
|
277
|
-
var
|
|
278
|
-
bFireChange = false,
|
|
279
|
-
sPath = oContext.iIndex === undefined
|
|
280
|
+
var sPath = oContext.iIndex === undefined
|
|
280
281
|
// context is not in aContexts -> use the predicate
|
|
281
282
|
? _Helper.getRelativePath(oContext.getPath(), this.oHeaderContext.getPath())
|
|
282
283
|
: String(oContext.iIndex),
|
|
283
284
|
bReadCount = false,
|
|
284
285
|
that = this;
|
|
285
286
|
|
|
287
|
+
if (oGroupLock && oContext.iIndex === undefined
|
|
288
|
+
&& this.oModel.isApiGroup(oGroupLock.getGroupId())) {
|
|
289
|
+
throw new Error("Cannot delete a kept-alive context in an API group when it is not in"
|
|
290
|
+
+ " the collection");
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
this.iDeletedContexts += 1;
|
|
294
|
+
|
|
286
295
|
return this.deleteFromCache(oGroupLock, sEditUrl, sPath, oETagEntity, bDoNotRequestCount,
|
|
287
|
-
function (iIndex,
|
|
288
|
-
var
|
|
296
|
+
function (iIndex, iOffset) {
|
|
297
|
+
var iContextIndex = oContext.iIndex;
|
|
289
298
|
|
|
290
|
-
if (
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
that.
|
|
304
|
-
}
|
|
299
|
+
if (iIndex !== undefined) {
|
|
300
|
+
// An entity can only be deleted when its key predicate is known. So we can be
|
|
301
|
+
// sure to have key predicates and the contexts a related to entities and not
|
|
302
|
+
// rows. -> Shift them and adjust the indexes
|
|
303
|
+
if (iOffset > 0) { // we're re-inserting
|
|
304
|
+
delete that.mPreviousContextsByPath[oContext.getPath()];
|
|
305
|
+
that.aContexts.splice(iIndex, 0, oContext);
|
|
306
|
+
} else { // we're deleting
|
|
307
|
+
that.mPreviousContextsByPath[oContext.getPath()] = oContext;
|
|
308
|
+
that.aContexts.splice(iIndex, 1);
|
|
309
|
+
oContext.iIndex = undefined;
|
|
310
|
+
// fire asynchronously so that multiple deletes only update the table once
|
|
311
|
+
Promise.resolve().then(function () {
|
|
312
|
+
that._fireChange({reason : ChangeReason.Remove});
|
|
313
|
+
});
|
|
305
314
|
}
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
if (that.
|
|
310
|
-
|
|
311
|
-
// calculate the context path and try to re-use the context for it
|
|
312
|
-
sPredicate = _Helper.getPrivateAnnotation(aEntities[i], "predicate");
|
|
313
|
-
sContextPath = sResolvedPath + (sPredicate || "/" + i$skipIndex);
|
|
314
|
-
oContext = that.mPreviousContextsByPath[sContextPath];
|
|
315
|
-
if (oContext) {
|
|
316
|
-
delete that.mPreviousContextsByPath[sContextPath];
|
|
317
|
-
if (oContext.iIndex === i$skipIndex) {
|
|
318
|
-
oContext.checkUpdate(); // same row, but different data
|
|
319
|
-
} else {
|
|
320
|
-
oContext.iIndex = i$skipIndex; // same data, but different row
|
|
321
|
-
}
|
|
322
|
-
} else {
|
|
323
|
-
oContext
|
|
324
|
-
= Context.create(that.oModel, that, sContextPath, i$skipIndex);
|
|
325
|
-
}
|
|
326
|
-
that.aContexts[i] = oContext;
|
|
315
|
+
if (iContextIndex < 0 || oContext.created()) {
|
|
316
|
+
that.iCreatedContexts += iOffset;
|
|
317
|
+
that.iActiveContexts += iOffset;
|
|
318
|
+
if (!that.iCreatedContexts) { //@see #destroyCreated
|
|
319
|
+
that.bFirstCreateAtEnd = undefined;
|
|
327
320
|
}
|
|
321
|
+
} else {
|
|
322
|
+
// iMaxLength is the number of server rows w/o the created entities
|
|
323
|
+
that.iMaxLength += iOffset; // this doesn't change Infinity
|
|
328
324
|
}
|
|
329
|
-
that.
|
|
330
|
-
|
|
325
|
+
that.aContexts.forEach(function (oContext0, i) {
|
|
326
|
+
oContext0.iIndex = i - that.iCreatedContexts;
|
|
327
|
+
});
|
|
331
328
|
} else if (that.bLengthFinal) {
|
|
332
329
|
// a kept-alive context is not in aContexts -> read the count afterwards
|
|
333
330
|
bReadCount = true;
|
|
334
331
|
}
|
|
335
|
-
// Do not destroy the context immediately to avoid timing issues with dependent
|
|
336
|
-
// bindings, keep it in mPreviousContextsByPath to destroy it later
|
|
337
332
|
}
|
|
338
333
|
).then(function () {
|
|
339
334
|
var iOldMaxLength = that.iMaxLength;
|
|
340
335
|
|
|
336
|
+
that.iDeletedContexts -= 1;
|
|
337
|
+
oContext.resetKeepAlive();
|
|
341
338
|
if (bReadCount) {
|
|
342
339
|
that.iMaxLength = that.fetchValue("$count", undefined, true).getResult()
|
|
343
340
|
- that.iActiveContexts;
|
|
@@ -345,18 +342,17 @@ sap.ui.define([
|
|
|
345
342
|
// Note: Although we know that oContext is not in aContexts, a "change" event needs
|
|
346
343
|
// to be fired in order to notify the control about the new length, for example, to
|
|
347
344
|
// update the 'More' button or the scrollbar.
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
// read the data synchronously. This is important for extended change detection.
|
|
352
|
-
// Without change event there is no destroyPreviousContexts and a kept-alive context
|
|
353
|
-
// must be destroyed here.
|
|
354
|
-
if (bFireChange) {
|
|
355
|
-
that._fireChange({reason : ChangeReason.Remove});
|
|
356
|
-
} else if (bDestroy) {
|
|
357
|
-
delete that.mPreviousContextsByPath[oContext.getPath()];
|
|
358
|
-
oContext.destroy();
|
|
345
|
+
if (iOldMaxLength !== that.iMaxLength) {
|
|
346
|
+
that._fireChange({reason : ChangeReason.Remove});
|
|
347
|
+
}
|
|
359
348
|
}
|
|
349
|
+
oContext.iIndex = Context.VIRTUAL; // prevent further cache access via this context
|
|
350
|
+
that.oModel.addPrerenderingTask(
|
|
351
|
+
that.destroyPreviousContexts.bind(that, [oContext.getPath()]));
|
|
352
|
+
}, function (oError) {
|
|
353
|
+
that.iDeletedContexts -= 1;
|
|
354
|
+
that._fireChange({reason : ChangeReason.Insert});
|
|
355
|
+
throw oError;
|
|
360
356
|
});
|
|
361
357
|
};
|
|
362
358
|
|
|
@@ -431,7 +427,10 @@ sap.ui.define([
|
|
|
431
427
|
if ("$apply" in mParameters) {
|
|
432
428
|
throw new Error("Cannot combine $$aggregation and $apply");
|
|
433
429
|
}
|
|
434
|
-
//
|
|
430
|
+
if (!sChangeReason) { // called from c'tor or #setAggregation
|
|
431
|
+
_AggregationHelper.validateAggregation(mParameters.$$aggregation, this.sPath,
|
|
432
|
+
this.oModel.oInterface.fetchMetadata, this.oModel.bAutoExpandSelect);
|
|
433
|
+
}
|
|
435
434
|
sApply = _AggregationHelper.buildApply(mParameters.$$aggregation).$apply;
|
|
436
435
|
}
|
|
437
436
|
this.mQueryOptions = this.oModel.buildQueryOptions(mParameters, true);
|
|
@@ -1128,9 +1127,9 @@ sap.ui.define([
|
|
|
1128
1127
|
* Removes and destroys contexts from mPreviousContextsByPath.
|
|
1129
1128
|
*
|
|
1130
1129
|
* @param {string[]} [aPathsToDelete]
|
|
1131
|
-
* If given, only contexts with paths in this list except kept-alive ones are
|
|
1132
|
-
* destroyed (transient contexts are removed only); otherwise all contexts in the
|
|
1133
|
-
* removed and destroyed
|
|
1130
|
+
* If given, only contexts with paths in this list except kept-alive and deleted ones are
|
|
1131
|
+
* removed and destroyed (transient contexts are removed only); otherwise all contexts in the
|
|
1132
|
+
* list are removed and destroyed
|
|
1134
1133
|
*
|
|
1135
1134
|
* @private
|
|
1136
1135
|
*/
|
|
@@ -1142,7 +1141,7 @@ sap.ui.define([
|
|
|
1142
1141
|
var oContext = mPreviousContextsByPath[sPath];
|
|
1143
1142
|
|
|
1144
1143
|
if (oContext) {
|
|
1145
|
-
if (aPathsToDelete && oContext.isKeepAlive()) {
|
|
1144
|
+
if (aPathsToDelete && (oContext.isKeepAlive() || oContext.isDeleted())) {
|
|
1146
1145
|
oContext.iIndex = undefined;
|
|
1147
1146
|
} else {
|
|
1148
1147
|
if (!oContext.isTransient()) {
|
|
@@ -1224,8 +1223,7 @@ sap.ui.define([
|
|
|
1224
1223
|
* @private
|
|
1225
1224
|
*/
|
|
1226
1225
|
ODataListBinding.prototype.doReplaceWith = function (oOldContext, oElement, sPredicate) {
|
|
1227
|
-
var
|
|
1228
|
-
bKeepAlive = oOldContext.isKeepAlive(),
|
|
1226
|
+
var iModelIndex = oOldContext.getModelIndex(),
|
|
1229
1227
|
bNew,
|
|
1230
1228
|
fnOnBeforeDestroy = oOldContext.fnOnBeforeDestroy,
|
|
1231
1229
|
fnOnBeforeDestroyClone,
|
|
@@ -1239,21 +1237,21 @@ sap.ui.define([
|
|
|
1239
1237
|
if (oResult.iIndex !== undefined) {
|
|
1240
1238
|
throw new Error("Unexpected index: " + oResult);
|
|
1241
1239
|
}
|
|
1242
|
-
oResult.iIndex = iIndex;
|
|
1240
|
+
oResult.iIndex = oOldContext.iIndex;
|
|
1243
1241
|
delete this.mPreviousContextsByPath[sPath];
|
|
1244
1242
|
} else {
|
|
1245
|
-
oResult = Context.create(this.oModel, this, sPath, iIndex);
|
|
1243
|
+
oResult = Context.create(this.oModel, this, sPath, oOldContext.iIndex);
|
|
1246
1244
|
bNew = true;
|
|
1247
1245
|
}
|
|
1248
1246
|
oOldContext.iIndex = undefined;
|
|
1249
|
-
if (
|
|
1247
|
+
if (iModelIndex === undefined) {
|
|
1250
1248
|
this.mPreviousContextsByPath[sPath] = oResult;
|
|
1251
1249
|
this.oCache.addKeptElement(oElement);
|
|
1252
1250
|
} else {
|
|
1253
|
-
this.aContexts[
|
|
1254
|
-
this.oCache.doReplaceWith(
|
|
1251
|
+
this.aContexts[iModelIndex] = oResult;
|
|
1252
|
+
this.oCache.doReplaceWith(iModelIndex, oElement);
|
|
1255
1253
|
}
|
|
1256
|
-
if (
|
|
1254
|
+
if (oOldContext.isKeepAlive()) {
|
|
1257
1255
|
this.mPreviousContextsByPath[oOldContext.getPath()] = oOldContext;
|
|
1258
1256
|
if (bNew) {
|
|
1259
1257
|
if (fnOnBeforeDestroy) {
|
|
@@ -1767,7 +1765,8 @@ sap.ui.define([
|
|
|
1767
1765
|
* are ignored if they relate to a
|
|
1768
1766
|
* {@link sap.ui.model.odata.v4.Context#setKeepAlive kept-alive} context of this binding.
|
|
1769
1767
|
* Since 1.98.0, {@link sap.ui.model.odata.v4.Context#isTransient transient} contexts
|
|
1770
|
-
* of a {@link #getRootBinding root binding} do not count as pending changes.
|
|
1768
|
+
* of a {@link #getRootBinding root binding} do not count as pending changes. Pending
|
|
1769
|
+
* {@link sap.ui.model.odata.v4.Context#delete deletions} lead to an error.
|
|
1771
1770
|
*
|
|
1772
1771
|
* @public
|
|
1773
1772
|
* @see sap.ui.model.ListBinding#filter
|
|
@@ -1787,6 +1786,10 @@ sap.ui.define([
|
|
|
1787
1786
|
return this;
|
|
1788
1787
|
}
|
|
1789
1788
|
|
|
1789
|
+
if (this.iDeletedContexts) {
|
|
1790
|
+
throw new Error("Cannot filter when delete requests are pending");
|
|
1791
|
+
}
|
|
1792
|
+
|
|
1790
1793
|
if (this.hasPendingChanges(true)) {
|
|
1791
1794
|
throw new Error("Cannot filter due to pending changes");
|
|
1792
1795
|
}
|
|
@@ -2014,6 +2017,7 @@ sap.ui.define([
|
|
|
2014
2017
|
}
|
|
2015
2018
|
if (!that.isRootBindingSuspended()) {
|
|
2016
2019
|
// request data (before removing virtual context), but avoid E.C.D.
|
|
2020
|
+
// (see BCP: 2270085692 for some interesting discussions)
|
|
2017
2021
|
that.bUseExtendedChangeDetection = false;
|
|
2018
2022
|
that.getContexts(iStart, iLength, iMaximumPrefetchSize);
|
|
2019
2023
|
that.bUseExtendedChangeDetection = bOld;
|
|
@@ -2724,6 +2728,10 @@ sap.ui.define([
|
|
|
2724
2728
|
});
|
|
2725
2729
|
}
|
|
2726
2730
|
|
|
2731
|
+
if (this.iDeletedContexts) {
|
|
2732
|
+
throw new Error("Cannot refresh when delete requests are pending");
|
|
2733
|
+
}
|
|
2734
|
+
|
|
2727
2735
|
if (this.isRootBindingSuspended()) {
|
|
2728
2736
|
// Note: side-effects (incl. refresh) are forbidden while suspended
|
|
2729
2737
|
this.refreshSuspended(sGroupId);
|
|
@@ -2781,8 +2789,8 @@ sap.ui.define([
|
|
|
2781
2789
|
}
|
|
2782
2790
|
// Note: after reset the dependent bindings cannot be found any more
|
|
2783
2791
|
aDependentBindings = that.getDependentBindings();
|
|
2784
|
-
|
|
2785
|
-
|
|
2792
|
+
that.reset(ChangeReason.Refresh, !oCache || (bKeepCacheOnError ? false : undefined),
|
|
2793
|
+
sGroupId); // this may reset that.oRefreshPromise
|
|
2786
2794
|
return SyncPromise.all(
|
|
2787
2795
|
refreshAll(aDependentBindings).concat(oPromise, oKeptElementsPromise)
|
|
2788
2796
|
).then(function () {
|
|
@@ -2891,7 +2899,7 @@ sap.ui.define([
|
|
|
2891
2899
|
var iIndex = oContext.getModelIndex(),
|
|
2892
2900
|
i;
|
|
2893
2901
|
|
|
2894
|
-
if (oContext.
|
|
2902
|
+
if (oContext.iIndex < 0) {
|
|
2895
2903
|
that.destroyCreated(oContext);
|
|
2896
2904
|
bDestroyed = true;
|
|
2897
2905
|
} else {
|
|
@@ -3114,9 +3122,6 @@ sap.ui.define([
|
|
|
3114
3122
|
var aContexts,
|
|
3115
3123
|
bMissingPredicate,
|
|
3116
3124
|
oModel = this.oModel,
|
|
3117
|
-
// Hash set of collection-valued navigation property meta paths (relative to the cache's
|
|
3118
|
-
// root) which need to be refreshed, maps string to <code>true</code>
|
|
3119
|
-
mNavigationPropertyPaths = {},
|
|
3120
3125
|
aPredicates,
|
|
3121
3126
|
aPromises,
|
|
3122
3127
|
// since this is called from a context or a parent binding, the binding is resolved
|
|
@@ -3159,7 +3164,7 @@ sap.ui.define([
|
|
|
3159
3164
|
aContexts = [oContext];
|
|
3160
3165
|
} else {
|
|
3161
3166
|
aContexts = this.getCurrentContexts().filter(function (oContext0) {
|
|
3162
|
-
return !oContext0.isTransient();
|
|
3167
|
+
return oContext0 && !oContext0.isTransient();
|
|
3163
3168
|
});
|
|
3164
3169
|
// add kept-alive contexts outside collection
|
|
3165
3170
|
Object.keys(this.mPreviousContextsByPath).forEach(function (sPath) {
|
|
@@ -3178,11 +3183,10 @@ sap.ui.define([
|
|
|
3178
3183
|
});
|
|
3179
3184
|
if (!bMissingPredicate) {
|
|
3180
3185
|
aPromises = this.oCache
|
|
3181
|
-
? [this.oCache.requestSideEffects(this.lockGroup(sGroupId),
|
|
3182
|
-
|
|
3186
|
+
? [this.oCache.requestSideEffects(this.lockGroup(sGroupId), aPaths, aPredicates,
|
|
3187
|
+
bSingle)]
|
|
3183
3188
|
: []; // can happen if invoked via absolute side effect
|
|
3184
|
-
this.visitSideEffects(sGroupId, aPaths, bSingle ? oContext : undefined,
|
|
3185
|
-
mNavigationPropertyPaths, aPromises);
|
|
3189
|
+
this.visitSideEffects(sGroupId, aPaths, bSingle ? oContext : undefined, aPromises);
|
|
3186
3190
|
|
|
3187
3191
|
return SyncPromise.all(aPromises.map(reportError)).then(function () {
|
|
3188
3192
|
return that.refreshDependentListBindingsWithoutCache();
|
|
@@ -3375,7 +3379,11 @@ sap.ui.define([
|
|
|
3375
3379
|
* used to turn on the handling of grand totals like in 1.84.0, using aggregates of aggregates
|
|
3376
3380
|
* and thus allowing to filter by aggregated properties while grand totals are needed. Beware
|
|
3377
3381
|
* that methods like "average" or "countdistinct" are not compatible with this approach, and
|
|
3378
|
-
* it cannot be combined with group levels
|
|
3382
|
+
* it cannot be combined with group levels.<br>
|
|
3383
|
+
* Since 1.105.0, either a recursive hierarchy or pure data aggregation is supported, but no
|
|
3384
|
+
* mix; <code>hierarchyQualifier</code> is the leading property that decides between those two
|
|
3385
|
+
* use cases - this is an <b>experimental API</b> and is only supported if the model uses the
|
|
3386
|
+
* <code>autoExpandSelect</code> parameter!
|
|
3379
3387
|
* @param {object} [oAggregation.aggregate]
|
|
3380
3388
|
* A map from aggregatable property names or aliases to objects containing the following
|
|
3381
3389
|
* details:
|
|
@@ -3397,6 +3405,9 @@ sap.ui.define([
|
|
|
3397
3405
|
* there is only one, or <code>null</code> otherwise ("multi-unit situation"). (SQL
|
|
3398
3406
|
* suggestion: <code>CASE WHEN MIN(Unit) = MAX(Unit) THEN MIN(Unit) END</code>)
|
|
3399
3407
|
* </ul>
|
|
3408
|
+
* @param {number} [oAggregation.expandTo=1]
|
|
3409
|
+
* The number of initially expanded levels as a positive integer (@experimental as of version
|
|
3410
|
+
* 1.105.0), supported only if a <code>hierarchyQualifier</code> is given.
|
|
3400
3411
|
* @param {boolean} [oAggregation.grandTotalAtBottomOnly]
|
|
3401
3412
|
* Tells whether the grand totals for aggregatable properties are displayed at the bottom only
|
|
3402
3413
|
* (since 1.86.0); <code>true</code> for bottom only, <code>false</code> for top and bottom,
|
|
@@ -3414,6 +3425,12 @@ sap.ui.define([
|
|
|
3414
3425
|
* A list of groupable property names used to determine group levels. They may, but don't need
|
|
3415
3426
|
* to, be repeated in <code>oAggregation.group</code>. Group levels cannot be combined with
|
|
3416
3427
|
* filtering for aggregated properties or (since 1.93.0) with "$search".
|
|
3428
|
+
* @param {string} [oAggregation.hierarchyQualifier]
|
|
3429
|
+
* The qualifier for the pair of "Org.OData.Aggregation.V1.RecursiveHierarchy" and
|
|
3430
|
+
* "com.sap.vocabularies.Hierarchy.v1.RecursiveHierarchy" annotations at this binding's
|
|
3431
|
+
* entity type (@experimental as of version 1.105.0). If present, a recursive hierarchy
|
|
3432
|
+
* without data aggregation is defined, and the only other supported property is
|
|
3433
|
+
* <code>expandTo</code>.
|
|
3417
3434
|
* @param {string} [oAggregation.search]
|
|
3418
3435
|
* Like the <a
|
|
3419
3436
|
* href="https://docs.oasis-open.org/odata/odata/v4.0/odata-v4.0-part2-url-conventions.html">
|
|
@@ -3434,7 +3451,9 @@ sap.ui.define([
|
|
|
3434
3451
|
* <li> the given data aggregation object is unsupported,
|
|
3435
3452
|
* <li> the <code>$apply</code> system query option has been specified explicitly before,
|
|
3436
3453
|
* <li> the binding has a kept-alive context,
|
|
3437
|
-
* <li> there are pending changes
|
|
3454
|
+
* <li> there are pending changes,
|
|
3455
|
+
* <li> a recursive hierarchy is requested, but the model does not use the
|
|
3456
|
+
* <code>autoExpandSelect</code> parameter.
|
|
3438
3457
|
* </ul>
|
|
3439
3458
|
* @example <caption>First group level is product category including subtotals for the net
|
|
3440
3459
|
* amount in display currency. On leaf level, transaction currency is used as an additional
|
|
@@ -3566,13 +3585,18 @@ sap.ui.define([
|
|
|
3566
3585
|
* the dynamic sorters.
|
|
3567
3586
|
* @returns {this}
|
|
3568
3587
|
* <code>this</code> to facilitate method chaining
|
|
3569
|
-
* @throws {Error}
|
|
3570
|
-
*
|
|
3571
|
-
*
|
|
3572
|
-
*
|
|
3573
|
-
*
|
|
3574
|
-
*
|
|
3575
|
-
*
|
|
3588
|
+
* @throws {Error} If
|
|
3589
|
+
* <ul>
|
|
3590
|
+
* <li> there are pending changes that cannot be ignored,
|
|
3591
|
+
* <li> an unsupported operation mode is used (see
|
|
3592
|
+
* {@link sap.ui.model.odata.v4.ODataModel#bindList}). Since 1.97.0, pending changes are
|
|
3593
|
+
* ignored if they relate to a
|
|
3594
|
+
* {@link sap.ui.model.odata.v4.Context#setKeepAlive kept-alive} context of this binding.
|
|
3595
|
+
* Since 1.98.0, {@link sap.ui.model.odata.v4.Context#isTransient transient} contexts of a
|
|
3596
|
+
* {@link #getRootBinding root binding} do not count as pending changes.
|
|
3597
|
+
* <li> contexts are {@link sap.ui.model.data.v4.Context#delete deleted} on the client, but
|
|
3598
|
+
* the server request has not finished yet.
|
|
3599
|
+
* </ul>
|
|
3576
3600
|
*
|
|
3577
3601
|
* @public
|
|
3578
3602
|
* @see sap.ui.model.ListBinding#sort
|
|
@@ -3590,6 +3614,10 @@ sap.ui.define([
|
|
|
3590
3614
|
return this;
|
|
3591
3615
|
}
|
|
3592
3616
|
|
|
3617
|
+
if (this.iDeletedContexts) {
|
|
3618
|
+
throw new Error("Cannot sort when delete requests are pending");
|
|
3619
|
+
}
|
|
3620
|
+
|
|
3593
3621
|
if (this.hasPendingChanges(true)) {
|
|
3594
3622
|
throw new Error("Cannot sort due to pending changes");
|
|
3595
3623
|
}
|
|
@@ -214,7 +214,7 @@ sap.ui.define([
|
|
|
214
214
|
* @extends sap.ui.model.Model
|
|
215
215
|
* @public
|
|
216
216
|
* @since 1.37.0
|
|
217
|
-
* @version 1.
|
|
217
|
+
* @version 1.105.0
|
|
218
218
|
*/
|
|
219
219
|
ODataModel = Model.extend("sap.ui.model.odata.v4.ODataModel",
|
|
220
220
|
/** @lends sap.ui.model.odata.v4.ODataModel.prototype */{
|
|
@@ -870,7 +870,7 @@ sap.ui.define([
|
|
|
870
870
|
ODataModel.prototype.buildQueryOptions = function (mParameters, bSystemQueryOptionsAllowed,
|
|
871
871
|
bSapAllowed) {
|
|
872
872
|
var sParameterName,
|
|
873
|
-
mTransformedOptions =
|
|
873
|
+
mTransformedOptions = Object.assign({}, mParameters); // shallow clone
|
|
874
874
|
|
|
875
875
|
/*
|
|
876
876
|
* Parses the query options for the given option name "sOptionName" in the given map of
|
|
@@ -897,6 +897,7 @@ sap.ui.define([
|
|
|
897
897
|
mOptions[sOptionName] = vValue;
|
|
898
898
|
}
|
|
899
899
|
if (sOptionName === "$expand") {
|
|
900
|
+
vValue = mOptions[sOptionName] = _Helper.clone(vValue); // deep clone needed!
|
|
900
901
|
for (sExpandPath in vValue) {
|
|
901
902
|
mExpandOptions = vValue[sExpandPath];
|
|
902
903
|
if (mExpandOptions === null || typeof mExpandOptions !== "object") {
|
|
@@ -599,11 +599,11 @@ sap.ui.define([
|
|
|
599
599
|
* @param {boolean} [bDoNotRequestCount]
|
|
600
600
|
* Whether not to request the new count from the server; useful in case of
|
|
601
601
|
* {@link sap.ui.model.odata.v4.Context#replaceWith} where it is known that the count remains
|
|
602
|
-
* unchanged;
|
|
603
|
-
* @param {function} fnCallback
|
|
604
|
-
*
|
|
605
|
-
*
|
|
606
|
-
* entity and
|
|
602
|
+
* unchanged; only relevant for the list binding
|
|
603
|
+
* @param {function} [fnCallback]
|
|
604
|
+
* A function which is called immediately when an entity has been deleted from the cache, or
|
|
605
|
+
* when it was re-inserted due to an error; only used in the list binding; the index of the
|
|
606
|
+
* entity and an offset (-1 for deletion, 1 for re-insertion) are passed as parameter
|
|
607
607
|
* @returns {sap.ui.base.SyncPromise}
|
|
608
608
|
* A promise which is resolved without a result in case of success, or rejected with an
|
|
609
609
|
* instance of <code>Error</code> in case of failure; returns <code>undefined</code> if the
|
|
@@ -720,8 +720,8 @@ sap.ui.define([
|
|
|
720
720
|
|
|
721
721
|
if (bDependsOnOperation && !sResolvedChildPath.includes("/$Parameter/")
|
|
722
722
|
|| this.getRootBinding().isSuspended()
|
|
723
|
-
||
|
|
724
|
-
// With
|
|
723
|
+
|| _Helper.isDataAggregation(this.mParameters)) {
|
|
724
|
+
// With data aggregation, no auto-$expand/$select is needed, but the child may still use
|
|
725
725
|
// the parent's cache
|
|
726
726
|
// Note: Operation bindings do not support auto-$expand/$select yet
|
|
727
727
|
return SyncPromise.resolve(sResolvedChildPath);
|
|
@@ -1417,8 +1417,8 @@ sap.ui.define([
|
|
|
1417
1417
|
* @override
|
|
1418
1418
|
* @see sap.ui.model.odata.v4.ODataBinding#visitSideEffects
|
|
1419
1419
|
*/
|
|
1420
|
-
ODataParentBinding.prototype.visitSideEffects = function (sGroupId, aPaths, oContext,
|
|
1421
|
-
|
|
1420
|
+
ODataParentBinding.prototype.visitSideEffects = function (sGroupId, aPaths, oContext, aPromises,
|
|
1421
|
+
sPrefix) {
|
|
1422
1422
|
var aDependentBindings = oContext
|
|
1423
1423
|
? this.oModel.getDependentBindings(oContext)
|
|
1424
1424
|
: this.getDependentBindings();
|
|
@@ -1435,11 +1435,8 @@ sap.ui.define([
|
|
|
1435
1435
|
aPromises.push(
|
|
1436
1436
|
oDependentBinding.requestSideEffects(sGroupId, aStrippedPaths));
|
|
1437
1437
|
}
|
|
1438
|
-
} else if (mNavigationPropertyPaths[sPath]) {
|
|
1439
|
-
aPromises.push(oDependentBinding.refreshInternal("", sGroupId));
|
|
1440
1438
|
} else {
|
|
1441
|
-
oDependentBinding.visitSideEffects(sGroupId, aPaths, null,
|
|
1442
|
-
mNavigationPropertyPaths, aPromises, sPath);
|
|
1439
|
+
oDependentBinding.visitSideEffects(sGroupId, aPaths, null, aPromises, sPath);
|
|
1443
1440
|
}
|
|
1444
1441
|
});
|
|
1445
1442
|
};
|
|
@@ -42,7 +42,7 @@ sap.ui.define([
|
|
|
42
42
|
* @mixes sap.ui.model.odata.v4.ODataBinding
|
|
43
43
|
* @public
|
|
44
44
|
* @since 1.37.0
|
|
45
|
-
* @version 1.
|
|
45
|
+
* @version 1.105.0
|
|
46
46
|
* @borrows sap.ui.model.odata.v4.ODataBinding#getGroupId as #getGroupId
|
|
47
47
|
* @borrows sap.ui.model.odata.v4.ODataBinding#getRootBinding as #getRootBinding
|
|
48
48
|
* @borrows sap.ui.model.odata.v4.ODataBinding#getUpdateGroupId as #getUpdateGroupId
|
|
@@ -365,7 +365,7 @@ sap.ui.define([
|
|
|
365
365
|
*
|
|
366
366
|
* @private
|
|
367
367
|
*/
|
|
368
|
-
ODataPropertyBinding.prototype.
|
|
368
|
+
ODataPropertyBinding.prototype.deregisterChangeListener = function () {
|
|
369
369
|
var that = this;
|
|
370
370
|
|
|
371
371
|
this.withCache(function (_oCache, sPath, oBinding) {
|
|
@@ -383,7 +383,7 @@ sap.ui.define([
|
|
|
383
383
|
*/
|
|
384
384
|
// @override sap.ui.model.Binding#destroy
|
|
385
385
|
ODataPropertyBinding.prototype.destroy = function () {
|
|
386
|
-
this.
|
|
386
|
+
this.deregisterChangeListener();
|
|
387
387
|
this.oModel.bindingDestroyed(this);
|
|
388
388
|
this.oCheckUpdateCallToken = undefined;
|
|
389
389
|
this.mQueryOptions = undefined;
|
|
@@ -672,7 +672,7 @@ sap.ui.define([
|
|
|
672
672
|
if (this.oContext !== oContext) {
|
|
673
673
|
if (this.bRelative) {
|
|
674
674
|
this.checkSuspended(true);
|
|
675
|
-
this.
|
|
675
|
+
this.deregisterChangeListener();
|
|
676
676
|
}
|
|
677
677
|
this.oContext = oContext;
|
|
678
678
|
this.sResumeChangeReason = undefined;
|