@openui5/sap.ui.core 1.98.0 → 1.101.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/.eslintrc.json +33 -1
- package/THIRDPARTY.txt +6 -6
- package/package.json +1 -1
- package/src/jquery.sap.global.js +6 -3
- package/src/jquery.sap.mobile.js +29 -11
- 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/Log.js +1 -1
- package/src/sap/base/strings/whitespaceReplacer.js +1 -1
- package/src/sap/base/util/LoaderExtensions.js +1 -10
- package/src/sap/base/util/UriParameters.js +2 -2
- 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/ui/Device.js +3 -3
- package/src/sap/ui/Global.js +4 -4
- package/src/sap/ui/VersionInfo.js +13 -10
- package/src/sap/ui/base/BindingParser.js +34 -7
- package/src/sap/ui/base/Event.js +1 -1
- package/src/sap/ui/base/EventProvider.js +2 -2
- package/src/sap/ui/base/ExpressionParser.js +1 -1
- package/src/sap/ui/base/Interface.js +1 -1
- package/src/sap/ui/base/ManagedObject.js +32 -22
- package/src/sap/ui/base/ManagedObjectMetadata.js +1 -1
- package/src/sap/ui/base/ManagedObjectObserver.js +2 -0
- package/src/sap/ui/base/ManagedObjectRegistry.js +10 -5
- 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 +2 -2
- package/src/sap/ui/core/BusyIndicator.js +1 -1
- package/src/sap/ui/core/Component.js +24 -20
- package/src/sap/ui/core/ComponentContainer.js +1 -1
- package/src/sap/ui/core/ComponentMetadata.js +2 -2
- package/src/sap/ui/core/ComponentSupport.js +1 -1
- package/src/sap/ui/core/Configuration.js +80 -11
- package/src/sap/ui/core/Control.js +2 -1
- package/src/sap/ui/core/Core.js +29 -12
- 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 +4 -7
- 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/ExtensionPoint.js +6 -1
- package/src/sap/ui/core/FocusHandler.js +1 -1
- package/src/sap/ui/core/Fragment.js +1 -1
- package/src/sap/ui/core/HTML.js +1 -1
- package/src/sap/ui/core/HTMLRenderer.js +1 -1
- package/src/sap/ui/core/History.js +1 -1
- package/src/sap/ui/core/Icon.js +17 -3
- package/src/sap/ui/core/IconRenderer.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 +1 -1
- package/src/sap/ui/core/Item.js +1 -1
- package/src/sap/ui/core/LabelEnablement.js +9 -2
- 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/LocalBusyIndicatorRenderer.js +2 -2
- package/src/sap/ui/core/Locale.js +1 -1
- package/src/sap/ui/core/LocaleData.js +73 -6
- package/src/sap/ui/core/Manifest.js +5 -3
- package/src/sap/ui/core/Message.js +1 -1
- package/src/sap/ui/core/Patcher.js +6 -4
- package/src/sap/ui/core/Popup.js +11 -8
- package/src/sap/ui/core/RenderManager.js +1 -1
- package/src/sap/ui/core/Renderer.js +1 -1
- package/src/sap/ui/core/ResizeHandler.js +1 -1
- package/src/sap/ui/core/ScrollBar.js +1 -1
- package/src/sap/ui/core/ScrollBarRenderer.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 +1 -1
- 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 +1 -1
- package/src/sap/ui/core/XMLCompositeMetadata.js +1 -1
- package/src/sap/ui/core/XMLTemplateProcessor.js +27 -26
- package/src/sap/ui/core/_IconRegistry.js +13 -3
- package/src/sap/ui/core/cache/CacheManager.js +1 -1
- package/src/sap/ui/core/cache/LRUPersistentCache.js +2 -1
- package/src/sap/ui/core/cldr/en_AU.json +1 -1
- package/src/sap/ui/core/date/Buddhist.js +3 -3
- package/src/sap/ui/core/date/Japanese.js +4 -4
- package/src/sap/ui/core/date/UniversalDate.js +10 -0
- package/src/sap/ui/core/date/UniversalDateUtils.js +49 -49
- package/src/sap/ui/core/delegate/ItemNavigation.js +1 -1
- package/src/sap/ui/core/delegate/ScrollEnablement.js +9 -6
- package/src/sap/ui/core/dnd/DragAndDrop.js +27 -22
- package/src/sap/ui/core/dnd/DragDropBase.js +1 -2
- package/src/sap/ui/core/dnd/DragDropInfo.js +1 -1
- package/src/sap/ui/core/dnd/DragInfo.js +1 -1
- package/src/sap/ui/core/dnd/DropInfo.js +3 -3
- package/src/sap/ui/core/format/DateFormat.js +670 -199
- package/src/sap/ui/core/format/DateFormatTimezoneDisplay.js +47 -0
- package/src/sap/ui/core/format/ListFormat.js +2 -2
- package/src/sap/ui/core/format/NumberFormat.js +502 -216
- package/src/sap/ui/core/format/TimezoneUtil.js +248 -0
- package/src/sap/ui/core/hyphenation/Hyphenation.js +1 -1
- package/src/sap/ui/core/library.js +220 -189
- 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 +1 -0
- package/src/sap/ui/core/messagebundle_bg.properties +6 -5
- package/src/sap/ui/core/messagebundle_ca.properties +1 -0
- package/src/sap/ui/core/messagebundle_cs.properties +1 -0
- package/src/sap/ui/core/messagebundle_cy.properties +1 -0
- package/src/sap/ui/core/messagebundle_da.properties +1 -0
- package/src/sap/ui/core/messagebundle_de.properties +2 -1
- package/src/sap/ui/core/messagebundle_el.properties +1 -0
- package/src/sap/ui/core/messagebundle_en.properties +1 -0
- package/src/sap/ui/core/messagebundle_en_GB.properties +1 -0
- 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 +1 -0
- package/src/sap/ui/core/messagebundle_es_MX.properties +1 -0
- package/src/sap/ui/core/messagebundle_et.properties +1 -0
- package/src/sap/ui/core/messagebundle_fi.properties +1 -0
- package/src/sap/ui/core/messagebundle_fr.properties +1 -0
- package/src/sap/ui/core/messagebundle_fr_CA.properties +1 -0
- package/src/sap/ui/core/messagebundle_hi.properties +1 -0
- package/src/sap/ui/core/messagebundle_hr.properties +1 -0
- package/src/sap/ui/core/messagebundle_hu.properties +1 -0
- package/src/sap/ui/core/messagebundle_id.properties +3 -2
- package/src/sap/ui/core/messagebundle_it.properties +1 -0
- package/src/sap/ui/core/messagebundle_iw.properties +1 -0
- package/src/sap/ui/core/messagebundle_ja.properties +1 -0
- package/src/sap/ui/core/messagebundle_kk.properties +1 -0
- package/src/sap/ui/core/messagebundle_ko.properties +2 -1
- package/src/sap/ui/core/messagebundle_lt.properties +1 -0
- package/src/sap/ui/core/messagebundle_lv.properties +2 -1
- package/src/sap/ui/core/messagebundle_ms.properties +1 -0
- package/src/sap/ui/core/messagebundle_nl.properties +1 -0
- package/src/sap/ui/core/messagebundle_no.properties +1 -0
- package/src/sap/ui/core/messagebundle_pl.properties +1 -0
- package/src/sap/ui/core/messagebundle_pt.properties +1 -0
- package/src/sap/ui/core/messagebundle_pt_PT.properties +1 -0
- package/src/sap/ui/core/messagebundle_ro.properties +1 -0
- package/src/sap/ui/core/messagebundle_ru.properties +1 -0
- package/src/sap/ui/core/messagebundle_sh.properties +1 -0
- package/src/sap/ui/core/messagebundle_sk.properties +1 -0
- package/src/sap/ui/core/messagebundle_sl.properties +1 -0
- package/src/sap/ui/core/messagebundle_sv.properties +1 -0
- package/src/sap/ui/core/messagebundle_th.properties +1 -0
- package/src/sap/ui/core/messagebundle_tr.properties +1 -0
- package/src/sap/ui/core/messagebundle_uk.properties +1 -0
- package/src/sap/ui/core/messagebundle_vi.properties +1 -0
- package/src/sap/ui/core/messagebundle_zh_CN.properties +1 -0
- package/src/sap/ui/core/messagebundle_zh_TW.properties +1 -0
- package/src/sap/ui/core/mvc/Controller.js +1 -1
- package/src/sap/ui/core/mvc/ControllerExtensionProvider.js +1 -1
- package/src/sap/ui/core/mvc/HTMLView.js +1 -1
- package/src/sap/ui/core/mvc/HTMLViewRenderer.js +1 -1
- package/src/sap/ui/core/mvc/JSONView.js +1 -1
- package/src/sap/ui/core/mvc/JSONViewRenderer.js +1 -1
- package/src/sap/ui/core/mvc/JSView.js +1 -1
- package/src/sap/ui/core/mvc/JSViewRenderer.js +1 -1
- package/src/sap/ui/core/mvc/TemplateView.js +1 -1
- package/src/sap/ui/core/mvc/TemplateViewRenderer.js +1 -1
- package/src/sap/ui/core/mvc/View.js +1 -1
- package/src/sap/ui/core/mvc/ViewRenderer.js +1 -1
- package/src/sap/ui/core/mvc/XMLView.js +16 -4
- package/src/sap/ui/core/mvc/XMLViewRenderer.js +5 -2
- 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/rules/App.support.js +6 -1
- package/src/sap/ui/core/rules/Misc.support.js +8 -3
- package/src/sap/ui/core/search/OpenSearchProvider.js +1 -1
- package/src/sap/ui/core/search/SearchProvider.js +1 -1
- 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 +29 -1
- package/src/sap/ui/core/support/Support.js +3 -3
- package/src/sap/ui/core/support/controls/InteractionSlider.js +395 -407
- package/src/sap/ui/core/support/plugins/Breakpoint.js +5 -5
- package/src/sap/ui/core/support/plugins/ControlTree.js +434 -347
- package/src/sap/ui/core/support/plugins/Debugging.js +153 -129
- package/src/sap/ui/core/support/plugins/Interaction.js +71 -85
- package/src/sap/ui/core/support/plugins/LocalStorage.js +1 -1
- package/src/sap/ui/core/support/plugins/Performance.js +10 -13
- package/src/sap/ui/core/support/plugins/Selector.js +1 -1
- package/src/sap/ui/core/support/plugins/TechInfo.js +5 -3
- package/src/sap/ui/core/support/plugins/Trace.js +7 -7
- package/src/sap/ui/core/support/plugins/ViewInfo.js +84 -22
- package/src/sap/ui/core/support/support.css +23 -23
- package/src/sap/ui/core/support/support.html +4 -6
- package/src/sap/ui/core/support/techinfo/TechnicalInfo.js +1 -1
- package/src/sap/ui/core/themes/base/CommandShortcutHints.less +1 -1
- package/src/sap/ui/core/themes/base/DragAndDrop.less +3 -3
- package/src/sap/ui/core/themes/base/base.less +1524 -54
- package/src/sap/ui/core/themes/base/fonts/SAP-icons.woff2 +0 -0
- package/src/sap/ui/core/themes/base/global.less +169 -13
- package/src/sap/ui/core/themes/base/shared.less +1 -0
- package/src/sap/ui/core/themes/sap_hcb/global.less +164 -7
- package/src/sap/ui/core/theming/Parameters.js +1 -1
- 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 +1 -1
- 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 +1 -1
- package/src/sap/ui/core/util/MockServer.js +20 -17
- package/src/sap/ui/core/util/PasteHelper.js +5 -5
- package/src/sap/ui/core/util/XMLPreprocessor.js +17 -4
- package/src/sap/ui/core/util/reflection/XmlTreeModifier.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 +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/LogViewer.js +2 -2
- package/src/sap/ui/debug/PropertyList.js +1 -1
- package/src/sap/ui/dom/includeStylesheet.js +8 -3
- package/src/sap/ui/events/jquery/EventExtension.js +1 -1
- package/src/sap/ui/model/Binding.js +4 -3
- package/src/sap/ui/model/ClientModel.js +1 -1
- package/src/sap/ui/model/ClientTreeBinding.js +1 -1
- package/src/sap/ui/model/CompositeBinding.js +4 -1
- package/src/sap/ui/model/CompositeDataState.js +1 -1
- package/src/sap/ui/model/CompositeType.js +13 -1
- package/src/sap/ui/model/ContextBinding.js +1 -1
- package/src/sap/ui/model/DataState.js +1 -1
- package/src/sap/ui/model/MetaModel.js +1 -2
- package/src/sap/ui/model/Model.js +10 -7
- 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 +24 -0
- package/src/sap/ui/model/analytics/AnalyticalBinding.js +30 -15
- package/src/sap/ui/model/analytics/ODataModelAdapter.js +2 -1
- package/src/sap/ui/model/base/ManagedObjectModel.js +9 -7
- package/src/sap/ui/model/json/JSONListBinding.js +1 -1
- package/src/sap/ui/model/json/JSONModel.js +15 -8
- package/src/sap/ui/model/json/JSONPropertyBinding.js +1 -1
- package/src/sap/ui/model/message/MessageListBinding.js +1 -1
- package/src/sap/ui/model/message/MessageModel.js +1 -1
- package/src/sap/ui/model/message/MessagePropertyBinding.js +1 -1
- package/src/sap/ui/model/odata/ODataAnnotations.js +1 -1
- package/src/sap/ui/model/odata/ODataListBinding.js +1 -1
- package/src/sap/ui/model/odata/ODataMessageParser.js +1 -1
- package/src/sap/ui/model/odata/ODataMetaModel.js +1 -1
- package/src/sap/ui/model/odata/ODataMetadata.js +3 -3
- package/src/sap/ui/model/odata/ODataModel.js +2 -2
- package/src/sap/ui/model/odata/ODataPropertyBinding.js +3 -1
- package/src/sap/ui/model/odata/ODataTreeBinding.js +1 -1
- package/src/sap/ui/model/odata/ODataTreeBindingFlat.js +5 -4
- package/src/sap/ui/model/odata/ODataUtils.js +7 -9
- 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 +349 -0
- 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 +69 -5
- package/src/sap/ui/model/odata/v2/ODataAnnotations.js +1 -1
- package/src/sap/ui/model/odata/v2/ODataContextBinding.js +8 -4
- package/src/sap/ui/model/odata/v2/ODataListBinding.js +215 -78
- package/src/sap/ui/model/odata/v2/ODataModel.js +283 -80
- package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +6 -4
- package/src/sap/ui/model/odata/v4/AnnotationHelper.js +16 -17
- package/src/sap/ui/model/odata/v4/Context.js +117 -76
- package/src/sap/ui/model/odata/v4/ODataBinding.js +62 -37
- package/src/sap/ui/model/odata/v4/ODataContextBinding.js +157 -169
- package/src/sap/ui/model/odata/v4/ODataListBinding.js +451 -262
- package/src/sap/ui/model/odata/v4/ODataMetaModel.js +91 -63
- package/src/sap/ui/model/odata/v4/ODataModel.js +478 -250
- package/src/sap/ui/model/odata/v4/ODataParentBinding.js +74 -83
- package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +65 -61
- package/src/sap/ui/model/odata/v4/_AnnotationHelperExpression.js +61 -6
- package/src/sap/ui/model/odata/v4/lib/_AggregationCache.js +15 -0
- package/src/sap/ui/model/odata/v4/lib/_Cache.js +336 -86
- package/src/sap/ui/model/odata/v4/lib/_ConcatHelper.js +5 -13
- package/src/sap/ui/model/odata/v4/lib/_GroupLock.js +16 -0
- package/src/sap/ui/model/odata/v4/lib/_Helper.js +13 -6
- package/src/sap/ui/model/odata/v4/lib/_MetadataConverter.js +2 -2
- package/src/sap/ui/model/odata/v4/lib/_Requestor.js +233 -26
- package/src/sap/ui/model/odata/v4/lib/_V2Requestor.js +1 -1
- package/src/sap/ui/model/resource/ResourceModel.js +1 -1
- package/src/sap/ui/model/resource/ResourcePropertyBinding.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/XMLListBinding.js +1 -1
- package/src/sap/ui/model/xml/XMLModel.js +1 -1
- package/src/sap/ui/model/xml/XMLPropertyBinding.js +1 -1
- package/src/sap/ui/performance/trace/FESR.js +1 -1
- package/src/sap/ui/performance/trace/FESRHelper.js +72 -0
- package/src/sap/ui/performance/trace/Interaction.js +6 -2
- package/src/sap/ui/performance/trace/Passport.js +3 -3
- package/src/sap/ui/qunit/qunit-2-css.js +4 -4
- package/src/sap/ui/qunit/qunit-css.js +4 -4
- 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/BranchTracking.js +1 -0
- package/src/sap/ui/test/Opa5.js +10 -6
- package/src/sap/ui/test/OpaBuilder.js +7 -7
- package/src/sap/ui/test/TestUtils.js +11 -0
- package/src/sap/ui/test/_UsageReport.js +1 -1
- package/src/sap/ui/test/generic/GenericTestCollection.js +176 -0
- package/src/sap/ui/test/generic/TestBase.js +151 -0
- package/src/sap/ui/test/generic/Utils.js +284 -0
- package/src/sap/ui/test/gherkin/opa5TestHarness.js +14 -5
- package/src/sap/ui/test/opaQunit.js +11 -10
- package/src/sap/ui/test/selectors/_ControlSelectorGenerator.js +9 -8
- package/src/sap/ui/test/selectors/_ControlSelectorValidator.js +1 -1
- package/src/sap/ui/test/starter/_setupAndStart.js +4 -0
- 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 +7 -3
- package/src/sap/ui/thirdparty/URITemplate.js +1 -1
- package/src/sap/ui/thirdparty/jqueryui/jquery-ui-datepicker.js +143 -3
- package/src/sap/ui/thirdparty/jqueryui/jquery-ui-position.js +8 -1
- package/src/sap/ui/thirdparty/jszip.js +17 -7
- package/src/sap/ui/thirdparty/mobify-carousel.js +1 -1
- package/src/sap/ui/util/Mobile.js +17 -0
- package/src/sap/ui/util/Storage.js +1 -1
- package/src/ui5loader.js +9 -5
|
@@ -52,6 +52,8 @@ sap.ui.define([
|
|
|
52
52
|
// system query options allowed within a $expand query option
|
|
53
53
|
aExpandQueryOptions = ["$count", "$expand", "$filter", "$levels", "$orderby", "$search",
|
|
54
54
|
"$select"],
|
|
55
|
+
// binding-specific parameters allowed in getKeepAliveContext
|
|
56
|
+
aGetKeepAliveParameters = ["$$groupId", "$$patchWithoutSideEffects", "$$updateGroupId"],
|
|
55
57
|
rGroupID = /^(\$auto(\.\w+)?|\$direct|\w+)$/,
|
|
56
58
|
MessageType = coreLibrary.MessageType,
|
|
57
59
|
aMessageTypes = [
|
|
@@ -85,269 +87,288 @@ sap.ui.define([
|
|
|
85
87
|
aSystemQueryOptions = ["$apply", "$count", "$expand", "$filter", "$orderby", "$search",
|
|
86
88
|
"$select"],
|
|
87
89
|
// valid header values: non-empty, only US-ASCII, no control chars
|
|
88
|
-
rValidHeader = /^[ -~]
|
|
90
|
+
rValidHeader = /^[ -~]+$/,
|
|
91
|
+
/**
|
|
92
|
+
* Constructor for a new ODataModel.
|
|
93
|
+
*
|
|
94
|
+
* @param {object} mParameters
|
|
95
|
+
* The parameters
|
|
96
|
+
* @param {string|string[]} [mParameters.annotationURI]
|
|
97
|
+
* The URL (or an array of URLs) from which the annotation metadata are loaded.
|
|
98
|
+
* The annotation files are merged into the service metadata in the given order (last one
|
|
99
|
+
* wins). The same annotations are overwritten; if an annotation file contains other
|
|
100
|
+
* elements (like a type definition) that are already merged, an error is thrown.
|
|
101
|
+
* Supported since 1.41.0
|
|
102
|
+
* @param {boolean} [mParameters.autoExpandSelect]
|
|
103
|
+
* Whether the OData model's bindings automatically generate $select and $expand system
|
|
104
|
+
* query options from the binding hierarchy. Note: Dynamic changes to the binding
|
|
105
|
+
* hierarchy are not supported. This parameter is supported since 1.47.0, and since 1.75.0
|
|
106
|
+
* it also enables property paths containing navigation properties in
|
|
107
|
+
* <code>$select</code>.
|
|
108
|
+
* @param {boolean} [mParameters.earlyRequests]
|
|
109
|
+
* Whether the following is requested at the earliest convenience:
|
|
110
|
+
* <ul>
|
|
111
|
+
* <li> root $metadata document and annotation files;
|
|
112
|
+
* <li> the security token.
|
|
113
|
+
* </ul>
|
|
114
|
+
* Note: The root $metadata document and annotation files are just requested but not yet
|
|
115
|
+
* converted from XML to JSON unless really needed.
|
|
116
|
+
* Supported since 1.53.0.
|
|
117
|
+
* <b>BEWARE:</b> The default value may change to <code>true</code> in later releases.
|
|
118
|
+
* You may also set {@link topic:26ba6a5c1e5c417f8b21cce1411dba2c Manifest Model Preload}
|
|
119
|
+
* in order to further speed up the start of a UI5 component.
|
|
120
|
+
* @param {string} [mParameters.groupId="$auto"]
|
|
121
|
+
* Controls the model's use of batch requests: '$auto' bundles requests from the model in
|
|
122
|
+
* a batch request which is sent automatically before rendering; '$direct' sends requests
|
|
123
|
+
* directly without batch; other values result in an error
|
|
124
|
+
* @param {object} [mParameters.groupProperties]
|
|
125
|
+
* Controls the use of batch requests for application groups. A map of application
|
|
126
|
+
* group IDs having an object with exactly one property <code>submit</code>. Valid values
|
|
127
|
+
* are 'API', 'Auto', 'Direct' see {@link sap.ui.model.odata.v4.SubmitMode}. Supported
|
|
128
|
+
* since 1.51.0
|
|
129
|
+
* @param {object} [mParameters.httpHeaders]
|
|
130
|
+
* Map of HTTP header names to their values, see {@link #changeHttpHeaders}
|
|
131
|
+
* @param {object} [mParameters.metadataUrlParams]
|
|
132
|
+
* Additional map of URL parameters used specifically for $metadata requests. Note that
|
|
133
|
+
* "sap-context-token" applies only to the service's root $metadata, but not to
|
|
134
|
+
* "cross-service references". Supported since 1.81.0
|
|
135
|
+
* @param {string} [mParameters.odataVersion="4.0"]
|
|
136
|
+
* The version of the OData service. Supported values are "2.0" and "4.0".
|
|
137
|
+
* @param {sap.ui.model.odata.OperationMode} [mParameters.operationMode]
|
|
138
|
+
* The operation mode for filtering and sorting. Since 1.39.0, the operation mode
|
|
139
|
+
* {@link sap.ui.model.odata.OperationMode.Server} is supported. All other operation modes
|
|
140
|
+
* including <code>undefined</code> lead to an error if 'vFilters' or 'vSorters' are given
|
|
141
|
+
* or if {@link sap.ui.model.odata.v4.ODataListBinding#filter} or
|
|
142
|
+
* {@link sap.ui.model.odata.v4.ODataListBinding#sort} is called.
|
|
143
|
+
* @param {string} mParameters.serviceUrl
|
|
144
|
+
* Root URL of the service to request data from. The path part of the URL must end with a
|
|
145
|
+
* forward slash according to OData V4 specification ABNF, rule "serviceRoot". You may
|
|
146
|
+
* append OData custom query options to the service root URL separated with a "?", for
|
|
147
|
+
* example "/MyService/?custom=foo". See specification "OData Version 4.0 Part 2: URL
|
|
148
|
+
* Conventions", "5.2 Custom Query Options". OData system query options and OData
|
|
149
|
+
* parameter aliases lead to an error.
|
|
150
|
+
* @param {boolean} [mParameters.sharedRequests]
|
|
151
|
+
* Whether all list bindings for the same resource path share their data, so that it is
|
|
152
|
+
* requested only once; only the value <code>true</code> is allowed; see parameter
|
|
153
|
+
* "$$sharedRequest" of {@link #bindList}. Additionally,
|
|
154
|
+
* {@link sap.ui.model.BindingMode.OneWay} becomes the default binding mode and
|
|
155
|
+
* {@link sap.ui.model.BindingMode.TwoWay} is forbidden. Note: This makes all bindings
|
|
156
|
+
* read-only, so it may be especially useful for value list models. Supported since 1.80.0
|
|
157
|
+
* @param {boolean} [mParameters.supportReferences=true]
|
|
158
|
+
* Whether <code><edmx:Reference></code> and <code><edmx:Include></code> directives
|
|
159
|
+
* are supported in order to load schemas on demand from other $metadata documents and
|
|
160
|
+
* include them into the current service ("cross-service references").
|
|
161
|
+
* @param {string} mParameters.synchronizationMode
|
|
162
|
+
* Controls synchronization between different bindings which refer to the same data for
|
|
163
|
+
* the case data changes in one binding. Must be set to 'None' which means bindings are
|
|
164
|
+
* not synchronized at all; all other values are not supported and lead to an error.
|
|
165
|
+
* @param {string} [mParameters.updateGroupId]
|
|
166
|
+
* The group ID that is used for update requests. If no update group ID is specified,
|
|
167
|
+
* <code>mParameters.groupId</code> is used. Valid update group IDs are
|
|
168
|
+
* <code>undefined</code>, '$auto', '$direct' or an application group ID.
|
|
169
|
+
* @throws {Error} If an unsupported synchronization mode is given, if the given service
|
|
170
|
+
* root URL does not end with a forward slash, if an unsupported parameter is given, if
|
|
171
|
+
* OData system query options or parameter aliases are specified as parameters, if an
|
|
172
|
+
* invalid group ID or update group ID is given, if the given operation mode is not
|
|
173
|
+
* supported, if an annotation file cannot be merged into the service metadata, if an
|
|
174
|
+
* unsupported value for <code>odataVersion</code> is given.
|
|
175
|
+
*
|
|
176
|
+
* @alias sap.ui.model.odata.v4.ODataModel
|
|
177
|
+
* @author SAP SE
|
|
178
|
+
* @class Model implementation for OData V4.
|
|
179
|
+
*
|
|
180
|
+
* This model is not prepared to be inherited from.
|
|
181
|
+
*
|
|
182
|
+
* Every resource path (relative to the service root URL, no query options) according to
|
|
183
|
+
* "4 Resource Path" in specification "OData Version 4.0 Part 2: URL Conventions" is
|
|
184
|
+
* a valid data binding path within this model if a leading slash is added; for example
|
|
185
|
+
* "/" + "SalesOrderList('A%2FB%26C')" to access an entity instance with key "A/B&C". Note
|
|
186
|
+
* that appropriate URI encoding is necessary, see the example of
|
|
187
|
+
* {@link sap.ui.model.odata.v4.ODataUtils.formatLiteral}. "4.5.1 Addressing Actions"
|
|
188
|
+
* needs an operation binding, see {@link sap.ui.model.odata.v4.ODataContextBinding}.
|
|
189
|
+
*
|
|
190
|
+
* Note that the OData V4 model has its own {@link sap.ui.model.odata.v4.Context} class.
|
|
191
|
+
* Bindings which are relative to such a V4 context depend on their corresponding parent
|
|
192
|
+
* binding and do not access data with their own service requests unless parameters are
|
|
193
|
+
* provided.
|
|
194
|
+
*
|
|
195
|
+
* <b>Group IDs</b> control the model's use of batch requests. Valid group IDs are:
|
|
196
|
+
* <ul>
|
|
197
|
+
* <li> <b>$auto</b> and <b>$auto.*</b>: Bundles requests from the model in a batch
|
|
198
|
+
* request which is sent automatically before rendering. You can use different
|
|
199
|
+
* '$auto.*' group IDs to use different batch requests. The suffix may be any
|
|
200
|
+
* non-empty string consisting of alphanumeric characters from the basic Latin
|
|
201
|
+
* alphabet, including the underscore. The submit mode for these group IDs is always
|
|
202
|
+
* {@link sap.ui.model.odata.v4.SubmitMode#Auto}.
|
|
203
|
+
* <li> <b>$direct</b>: Sends requests directly without batch. The submit mode for this
|
|
204
|
+
* group ID is always {@link sap.ui.model.odata.v4.SubmitMode#Direct}.
|
|
205
|
+
* <li> An application group ID, which is a non-empty string consisting of alphanumeric
|
|
206
|
+
* characters from the basic Latin alphabet, including the underscore. By default, an
|
|
207
|
+
* application group has the submit mode {@link sap.ui.model.odata.v4.SubmitMode#API}.
|
|
208
|
+
* It is possible to use a different submit mode; for details see
|
|
209
|
+
* <code>mParameters.groupProperties</code>.
|
|
210
|
+
* </ul>
|
|
211
|
+
*
|
|
212
|
+
* @extends sap.ui.model.Model
|
|
213
|
+
* @public
|
|
214
|
+
* @since 1.37.0
|
|
215
|
+
* @version 1.101.0
|
|
216
|
+
*/
|
|
217
|
+
ODataModel = Model.extend("sap.ui.model.odata.v4.ODataModel",
|
|
218
|
+
/** @lends sap.ui.model.odata.v4.ODataModel.prototype */{
|
|
219
|
+
constructor : constructor
|
|
220
|
+
});
|
|
221
|
+
|
|
222
|
+
//*********************************************************************************************
|
|
223
|
+
// ODataModel
|
|
224
|
+
//*********************************************************************************************
|
|
89
225
|
|
|
90
226
|
/**
|
|
91
227
|
* Constructor for a new ODataModel.
|
|
92
228
|
*
|
|
93
229
|
* @param {object} mParameters
|
|
94
230
|
* The parameters
|
|
95
|
-
* @param {string|string[]} [mParameters.annotationURI]
|
|
96
|
-
* The URL (or an array of URLs) from which the annotation metadata are loaded.
|
|
97
|
-
* The annotation files are merged into the service metadata in the given order (last one
|
|
98
|
-
* wins). The same annotations are overwritten; if an annotation file contains other elements
|
|
99
|
-
* (like a type definition) that are already merged, an error is thrown.
|
|
100
|
-
* Supported since 1.41.0
|
|
101
|
-
* @param {boolean} [mParameters.autoExpandSelect]
|
|
102
|
-
* Whether the OData model's bindings automatically generate $select and $expand system query
|
|
103
|
-
* options from the binding hierarchy. Note: Dynamic changes to the binding hierarchy are not
|
|
104
|
-
* supported. This parameter is supported since 1.47.0, and since 1.75.0 it also enables
|
|
105
|
-
* property paths containing navigation properties in <code>$select</code>.
|
|
106
|
-
* @param {boolean} [mParameters.earlyRequests]
|
|
107
|
-
* Whether the following is requested at the earliest convenience:
|
|
108
|
-
* <ul>
|
|
109
|
-
* <li> root $metadata document and annotation files;
|
|
110
|
-
* <li> the security token.
|
|
111
|
-
* </ul>
|
|
112
|
-
* Note: The root $metadata document and annotation files are just requested but not yet
|
|
113
|
-
* converted from XML to JSON unless really needed.
|
|
114
|
-
* Supported since 1.53.0.
|
|
115
|
-
* <b>BEWARE:</b> The default value may change to <code>true</code> in later releases.
|
|
116
|
-
* You may also set {@link topic:26ba6a5c1e5c417f8b21cce1411dba2c Manifest Model Preload} in
|
|
117
|
-
* order to further speed up the start of a UI5 component.
|
|
118
|
-
* @param {string} [mParameters.groupId="$auto"]
|
|
119
|
-
* Controls the model's use of batch requests: '$auto' bundles requests from the model in a
|
|
120
|
-
* batch request which is sent automatically before rendering; '$direct' sends requests
|
|
121
|
-
* directly without batch; other values result in an error
|
|
122
|
-
* @param {object} [mParameters.groupProperties]
|
|
123
|
-
* Controls the use of batch requests for application groups. A map of application
|
|
124
|
-
* group IDs having an object with exactly one property <code>submit</code>. Valid values are
|
|
125
|
-
* 'API', 'Auto', 'Direct' see {@link sap.ui.model.odata.v4.SubmitMode}.
|
|
126
|
-
* Supported since 1.51.0
|
|
127
|
-
* @param {object} [mParameters.httpHeaders]
|
|
128
|
-
* Map of HTTP header names to their values, see {@link #changeHttpHeaders}
|
|
129
|
-
* @param {object} [mParameters.metadataUrlParams]
|
|
130
|
-
* Additional map of URL parameters used specifically for $metadata requests. Note that
|
|
131
|
-
* "sap-context-token" applies only to the service's root $metadata, but not to
|
|
132
|
-
* "cross-service references". Supported since 1.81.0
|
|
133
|
-
* @param {string} [mParameters.odataVersion="4.0"]
|
|
134
|
-
* The version of the OData service. Supported values are "2.0" and "4.0".
|
|
135
|
-
* @param {sap.ui.model.odata.OperationMode} [mParameters.operationMode]
|
|
136
|
-
* The operation mode for filtering and sorting. Since 1.39.0, the operation mode
|
|
137
|
-
* {@link sap.ui.model.odata.OperationMode.Server} is supported. All other operation modes
|
|
138
|
-
* including <code>undefined</code> lead to an error if 'vFilters' or 'vSorters' are given or
|
|
139
|
-
* if {@link sap.ui.model.odata.v4.ODataListBinding#filter} or
|
|
140
|
-
* {@link sap.ui.model.odata.v4.ODataListBinding#sort} is called.
|
|
141
|
-
* @param {string} mParameters.serviceUrl
|
|
142
|
-
* Root URL of the service to request data from. The path part of the URL must end with a
|
|
143
|
-
* forward slash according to OData V4 specification ABNF, rule "serviceRoot". You may append
|
|
144
|
-
* OData custom query options to the service root URL separated with a "?", for example
|
|
145
|
-
* "/MyService/?custom=foo".
|
|
146
|
-
* See specification "OData Version 4.0 Part 2: URL Conventions", "5.2 Custom Query Options".
|
|
147
|
-
* OData system query options and OData parameter aliases lead to an error.
|
|
148
|
-
* @param {boolean} [mParameters.sharedRequests]
|
|
149
|
-
* Whether all list bindings for the same resource path share their data, so that it is
|
|
150
|
-
* requested only once; only the value <code>true</code> is allowed; see parameter
|
|
151
|
-
* "$$sharedRequest" of {@link #bindList}. Additionally,
|
|
152
|
-
* {@link sap.ui.model.BindingMode.OneWay} becomes the default binding mode and
|
|
153
|
-
* {@link sap.ui.model.BindingMode.TwoWay} is forbidden. Note: This makes all bindings
|
|
154
|
-
* read-only, so it may be especially useful for value list models. Supported since 1.80.0
|
|
155
|
-
* @param {boolean} [mParameters.supportReferences=true]
|
|
156
|
-
* Whether <code><edmx:Reference></code> and <code><edmx:Include></code> directives are
|
|
157
|
-
* supported in order to load schemas on demand from other $metadata documents and include
|
|
158
|
-
* them into the current service ("cross-service references").
|
|
159
|
-
* @param {string} mParameters.synchronizationMode
|
|
160
|
-
* Controls synchronization between different bindings which refer to the same data for the
|
|
161
|
-
* case data changes in one binding. Must be set to 'None' which means bindings are not
|
|
162
|
-
* synchronized at all; all other values are not supported and lead to an error.
|
|
163
|
-
* @param {string} [mParameters.updateGroupId]
|
|
164
|
-
* The group ID that is used for update requests. If no update group ID is specified, <code>
|
|
165
|
-
* mParameters.groupId</code> is used. Valid update group IDs are <code>undefined</code>,
|
|
166
|
-
* '$auto', '$direct' or an application group ID.
|
|
167
231
|
* @throws {Error} If an unsupported synchronization mode is given, if the given service root
|
|
168
232
|
* URL does not end with a forward slash, if an unsupported parameter is given, if OData
|
|
169
233
|
* system query options or parameter aliases are specified as parameters, if an invalid group
|
|
170
234
|
* ID or update group ID is given, if the given operation mode is not supported, if an
|
|
171
235
|
* annotation file cannot be merged into the service metadata, if an unsupported value for
|
|
172
236
|
* <code>odataVersion</code> is given.
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
* that appropriate URI encoding is necessary, see the example of
|
|
185
|
-
* {@link sap.ui.model.odata.v4.ODataUtils.formatLiteral}. "4.5.1 Addressing Actions" needs an
|
|
186
|
-
* operation binding, see {@link sap.ui.model.odata.v4.ODataContextBinding}.
|
|
187
|
-
*
|
|
188
|
-
* Note that the OData V4 model has its own {@link sap.ui.model.odata.v4.Context} class.
|
|
189
|
-
* Bindings which are relative to such a V4 context depend on their corresponding parent
|
|
190
|
-
* binding and do not access data with their own service requests unless parameters are
|
|
191
|
-
* provided.
|
|
192
|
-
*
|
|
193
|
-
* <b>Group IDs</b> control the model's use of batch requests. Valid group IDs are:
|
|
194
|
-
* <ul>
|
|
195
|
-
* <li> <b>$auto</b> and <b>$auto.*</b>: Bundles requests from the model in a batch request
|
|
196
|
-
* which is sent automatically before rendering. You can use different '$auto.*' group IDs
|
|
197
|
-
* to use different batch requests. The suffix may be any non-empty string consisting of
|
|
198
|
-
* alphanumeric characters from the basic Latin alphabet, including the underscore. The
|
|
199
|
-
* submit mode for these group IDs is always
|
|
200
|
-
* {@link sap.ui.model.odata.v4.SubmitMode#Auto}.
|
|
201
|
-
* <li> <b>$direct</b>: Sends requests directly without batch. The submit mode for this
|
|
202
|
-
* group ID is always {@link sap.ui.model.odata.v4.SubmitMode#Direct}.
|
|
203
|
-
* <li> An application group ID, which is a non-empty string consisting of alphanumeric
|
|
204
|
-
* characters from the basic Latin alphabet, including the underscore. By default, an
|
|
205
|
-
* application group has the submit mode {@link sap.ui.model.odata.v4.SubmitMode#API}. It
|
|
206
|
-
* is possible to use a different submit mode; for details see
|
|
207
|
-
* <code>mParameters.groupProperties</code>.
|
|
208
|
-
* </ul>
|
|
209
|
-
*
|
|
210
|
-
* @extends sap.ui.model.Model
|
|
211
|
-
* @public
|
|
212
|
-
* @since 1.37.0
|
|
213
|
-
* @version 1.98.0
|
|
214
|
-
*/
|
|
215
|
-
var ODataModel = Model.extend("sap.ui.model.odata.v4.ODataModel",
|
|
216
|
-
/** @lends sap.ui.model.odata.v4.ODataModel.prototype */
|
|
217
|
-
{
|
|
218
|
-
constructor : function (mParameters) {
|
|
219
|
-
var sGroupId,
|
|
220
|
-
oGroupProperties,
|
|
221
|
-
sLanguageTag = sap.ui.getCore().getConfiguration().getLanguageTag(),
|
|
222
|
-
sODataVersion,
|
|
223
|
-
sParameter,
|
|
224
|
-
sServiceUrl,
|
|
225
|
-
oUri,
|
|
226
|
-
mUriParameters,
|
|
227
|
-
that = this;
|
|
228
|
-
|
|
229
|
-
// do not pass any parameters to Model
|
|
230
|
-
Model.call(this);
|
|
231
|
-
|
|
232
|
-
if (!mParameters || mParameters.synchronizationMode !== "None") {
|
|
233
|
-
throw new Error("Synchronization mode must be 'None'");
|
|
234
|
-
}
|
|
235
|
-
sODataVersion = mParameters.odataVersion || "4.0";
|
|
236
|
-
this.sODataVersion = sODataVersion;
|
|
237
|
-
if (sODataVersion !== "4.0" && sODataVersion !== "2.0") {
|
|
238
|
-
throw new Error("Unsupported value for parameter odataVersion: "
|
|
239
|
-
+ sODataVersion);
|
|
240
|
-
}
|
|
241
|
-
for (sParameter in mParameters) {
|
|
242
|
-
if (!(sParameter in mSupportedParameters)) {
|
|
243
|
-
throw new Error("Unsupported parameter: " + sParameter);
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
sServiceUrl = mParameters.serviceUrl;
|
|
247
|
-
if (!sServiceUrl) {
|
|
248
|
-
throw new Error("Missing service root URL");
|
|
249
|
-
}
|
|
250
|
-
oUri = new URI(sServiceUrl);
|
|
251
|
-
if (oUri.path()[oUri.path().length - 1] !== "/") {
|
|
252
|
-
throw new Error("Service root URL must end with '/'");
|
|
253
|
-
}
|
|
254
|
-
if (mParameters.operationMode
|
|
255
|
-
&& mParameters.operationMode !== OperationMode.Server) {
|
|
256
|
-
throw new Error("Unsupported operation mode: "
|
|
257
|
-
+ mParameters.operationMode);
|
|
258
|
-
}
|
|
259
|
-
this.sOperationMode = mParameters.operationMode;
|
|
260
|
-
// Note: strict checking for model's URI parameters, but "sap-*" is allowed
|
|
261
|
-
mUriParameters = this.buildQueryOptions(oUri.query(true), false, true);
|
|
262
|
-
// BEWARE: these are shared across all bindings!
|
|
263
|
-
this.mUriParameters = mUriParameters;
|
|
264
|
-
if (sap.ui.getCore().getConfiguration().getStatistics()) {
|
|
265
|
-
// Note: this way, "sap-statistics" is not sent within $batch
|
|
266
|
-
mUriParameters = Object.assign({"sap-statistics" : true}, mUriParameters);
|
|
267
|
-
}
|
|
268
|
-
this.sServiceUrl = oUri.query("").toString();
|
|
269
|
-
this.sGroupId = mParameters.groupId;
|
|
270
|
-
if (this.sGroupId === undefined) {
|
|
271
|
-
this.sGroupId = "$auto";
|
|
272
|
-
}
|
|
273
|
-
if (this.sGroupId !== "$auto" && this.sGroupId !== "$direct") {
|
|
274
|
-
throw new Error("Group ID must be '$auto' or '$direct'");
|
|
275
|
-
}
|
|
276
|
-
this.checkGroupId(mParameters.updateGroupId, false,
|
|
277
|
-
"Invalid update group ID: ");
|
|
278
|
-
this.sUpdateGroupId = mParameters.updateGroupId || this.getGroupId();
|
|
279
|
-
this.mGroupProperties = {};
|
|
280
|
-
for (sGroupId in mParameters.groupProperties) {
|
|
281
|
-
that.checkGroupId(sGroupId, true);
|
|
282
|
-
oGroupProperties = mParameters.groupProperties[sGroupId];
|
|
283
|
-
if (typeof oGroupProperties !== "object"
|
|
284
|
-
|| Object.keys(oGroupProperties).length !== 1
|
|
285
|
-
|| !(oGroupProperties.submit in SubmitMode)) {
|
|
286
|
-
throw new Error("Group '" + sGroupId + "' has invalid properties: '"
|
|
287
|
-
+ oGroupProperties + "'");
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
this.mGroupProperties = _Helper.clone(mParameters.groupProperties) || {};
|
|
291
|
-
this.mGroupProperties.$auto = {submit : SubmitMode.Auto};
|
|
292
|
-
this.mGroupProperties.$direct = {submit : SubmitMode.Direct};
|
|
293
|
-
if (mParameters.autoExpandSelect !== undefined
|
|
294
|
-
&& typeof mParameters.autoExpandSelect !== "boolean") {
|
|
295
|
-
throw new Error("Value for autoExpandSelect must be true or false");
|
|
296
|
-
}
|
|
297
|
-
this.bAutoExpandSelect = mParameters.autoExpandSelect === true;
|
|
298
|
-
if ("sharedRequests" in mParameters && mParameters.sharedRequests !== true) {
|
|
299
|
-
throw new Error("Value for sharedRequests must be true");
|
|
300
|
-
}
|
|
301
|
-
this.bSharedRequests = mParameters.sharedRequests === true;
|
|
302
|
-
|
|
303
|
-
this.mHeaders = {"Accept-Language" : sLanguageTag};
|
|
304
|
-
this.mMetadataHeaders = {"Accept-Language" : sLanguageTag};
|
|
305
|
-
|
|
306
|
-
// BEWARE: do not share mHeaders between _MetadataRequestor and _Requestor!
|
|
307
|
-
this.oMetaModel = new ODataMetaModel(
|
|
308
|
-
_MetadataRequestor.create(this.mMetadataHeaders, sODataVersion,
|
|
309
|
-
Object.assign({}, mUriParameters, mParameters.metadataUrlParams)),
|
|
310
|
-
this.sServiceUrl + "$metadata", mParameters.annotationURI, this,
|
|
311
|
-
mParameters.supportReferences);
|
|
312
|
-
this.oInterface = {
|
|
313
|
-
fetchEntityContainer :
|
|
314
|
-
this.oMetaModel.fetchEntityContainer.bind(this.oMetaModel),
|
|
315
|
-
fetchMetadata : this.oMetaModel.fetchObject.bind(this.oMetaModel),
|
|
316
|
-
fireSessionTimeout : function () {
|
|
317
|
-
that.fireEvent("sessionTimeout");
|
|
318
|
-
},
|
|
319
|
-
getGroupProperty : this.getGroupProperty.bind(this),
|
|
320
|
-
onCreateGroup : function (sGroupId) {
|
|
321
|
-
if (that.isAutoGroup(sGroupId)) {
|
|
322
|
-
that.addPrerenderingTask(
|
|
323
|
-
that._submitBatch.bind(that, sGroupId, true));
|
|
324
|
-
}
|
|
325
|
-
},
|
|
326
|
-
reportStateMessages : this.reportStateMessages.bind(this),
|
|
327
|
-
reportTransitionMessages : this.reportTransitionMessages.bind(this)
|
|
328
|
-
};
|
|
329
|
-
this.oRequestor = _Requestor.create(this.sServiceUrl, this.oInterface,
|
|
330
|
-
this.mHeaders, mUriParameters, sODataVersion);
|
|
331
|
-
this.changeHttpHeaders(mParameters.httpHeaders);
|
|
332
|
-
if (mParameters.earlyRequests) {
|
|
333
|
-
this.oMetaModel.fetchEntityContainer(true);
|
|
334
|
-
this.initializeSecurityToken();
|
|
335
|
-
}
|
|
237
|
+
*/
|
|
238
|
+
function constructor(mParameters) {
|
|
239
|
+
var sGroupId,
|
|
240
|
+
oGroupProperties,
|
|
241
|
+
sLanguageTag = sap.ui.getCore().getConfiguration().getLanguageTag(),
|
|
242
|
+
sODataVersion,
|
|
243
|
+
sParameter,
|
|
244
|
+
sServiceUrl,
|
|
245
|
+
oUri,
|
|
246
|
+
mUriParameters,
|
|
247
|
+
that = this;
|
|
336
248
|
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
249
|
+
// do not pass any parameters to Model
|
|
250
|
+
Model.call(this);
|
|
251
|
+
|
|
252
|
+
if (!mParameters || mParameters.synchronizationMode !== "None") {
|
|
253
|
+
throw new Error("Synchronization mode must be 'None'");
|
|
254
|
+
}
|
|
255
|
+
sODataVersion = mParameters.odataVersion || "4.0";
|
|
256
|
+
this.sODataVersion = sODataVersion;
|
|
257
|
+
if (sODataVersion !== "4.0" && sODataVersion !== "2.0") {
|
|
258
|
+
throw new Error("Unsupported value for parameter odataVersion: " + sODataVersion);
|
|
259
|
+
}
|
|
260
|
+
for (sParameter in mParameters) {
|
|
261
|
+
if (!(sParameter in mSupportedParameters)) {
|
|
262
|
+
throw new Error("Unsupported parameter: " + sParameter);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
sServiceUrl = mParameters.serviceUrl;
|
|
266
|
+
if (!sServiceUrl) {
|
|
267
|
+
throw new Error("Missing service root URL");
|
|
268
|
+
}
|
|
269
|
+
oUri = new URI(sServiceUrl);
|
|
270
|
+
if (oUri.path()[oUri.path().length - 1] !== "/") {
|
|
271
|
+
throw new Error("Service root URL must end with '/'");
|
|
272
|
+
}
|
|
273
|
+
if (mParameters.operationMode && mParameters.operationMode !== OperationMode.Server) {
|
|
274
|
+
throw new Error("Unsupported operation mode: "
|
|
275
|
+
+ mParameters.operationMode);
|
|
276
|
+
}
|
|
277
|
+
this.sOperationMode = mParameters.operationMode;
|
|
278
|
+
// Note: strict checking for model's URI parameters, but "sap-*" is allowed
|
|
279
|
+
mUriParameters = this.buildQueryOptions(oUri.query(true), false, true);
|
|
280
|
+
// BEWARE: these are shared across all bindings!
|
|
281
|
+
this.mUriParameters = mUriParameters;
|
|
282
|
+
if (sap.ui.getCore().getConfiguration().getStatistics()) {
|
|
283
|
+
// Note: this way, "sap-statistics" is not sent within $batch
|
|
284
|
+
mUriParameters = Object.assign({"sap-statistics" : true}, mUriParameters);
|
|
285
|
+
}
|
|
286
|
+
this.sServiceUrl = oUri.query("").toString();
|
|
287
|
+
this.sGroupId = mParameters.groupId;
|
|
288
|
+
if (this.sGroupId === undefined) {
|
|
289
|
+
this.sGroupId = "$auto";
|
|
290
|
+
}
|
|
291
|
+
if (this.sGroupId !== "$auto" && this.sGroupId !== "$direct") {
|
|
292
|
+
throw new Error("Group ID must be '$auto' or '$direct'");
|
|
293
|
+
}
|
|
294
|
+
this.checkGroupId(mParameters.updateGroupId, false, "Invalid update group ID: ");
|
|
295
|
+
this.sUpdateGroupId = mParameters.updateGroupId || this.getGroupId();
|
|
296
|
+
this.mGroupProperties = {};
|
|
297
|
+
for (sGroupId in mParameters.groupProperties) {
|
|
298
|
+
that.checkGroupId(sGroupId, true);
|
|
299
|
+
oGroupProperties = mParameters.groupProperties[sGroupId];
|
|
300
|
+
if (typeof oGroupProperties !== "object"
|
|
301
|
+
|| Object.keys(oGroupProperties).length !== 1
|
|
302
|
+
|| !(oGroupProperties.submit in SubmitMode)) {
|
|
303
|
+
throw new Error("Group '" + sGroupId + "' has invalid properties: '"
|
|
304
|
+
+ oGroupProperties + "'");
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
this.mGroupProperties = _Helper.clone(mParameters.groupProperties) || {};
|
|
308
|
+
this.mGroupProperties.$auto = {submit : SubmitMode.Auto};
|
|
309
|
+
this.mGroupProperties.$direct = {submit : SubmitMode.Direct};
|
|
310
|
+
if (mParameters.autoExpandSelect !== undefined
|
|
311
|
+
&& typeof mParameters.autoExpandSelect !== "boolean") {
|
|
312
|
+
throw new Error("Value for autoExpandSelect must be true or false");
|
|
313
|
+
}
|
|
314
|
+
this.bAutoExpandSelect = mParameters.autoExpandSelect === true;
|
|
315
|
+
if ("sharedRequests" in mParameters && mParameters.sharedRequests !== true) {
|
|
316
|
+
throw new Error("Value for sharedRequests must be true");
|
|
317
|
+
}
|
|
318
|
+
this.bSharedRequests = mParameters.sharedRequests === true;
|
|
319
|
+
|
|
320
|
+
this.mHeaders = {"Accept-Language" : sLanguageTag};
|
|
321
|
+
this.mMetadataHeaders = {"Accept-Language" : sLanguageTag};
|
|
322
|
+
|
|
323
|
+
// BEWARE: do not share mHeaders between _MetadataRequestor and _Requestor!
|
|
324
|
+
this.oMetaModel = new ODataMetaModel(
|
|
325
|
+
_MetadataRequestor.create(this.mMetadataHeaders, sODataVersion,
|
|
326
|
+
Object.assign({}, mUriParameters, mParameters.metadataUrlParams)),
|
|
327
|
+
this.sServiceUrl + "$metadata", mParameters.annotationURI, this,
|
|
328
|
+
mParameters.supportReferences);
|
|
329
|
+
this.oInterface = {
|
|
330
|
+
fetchEntityContainer : this.oMetaModel.fetchEntityContainer.bind(this.oMetaModel),
|
|
331
|
+
fetchMetadata : this.oMetaModel.fetchObject.bind(this.oMetaModel),
|
|
332
|
+
fireSessionTimeout : function () {
|
|
333
|
+
that.fireEvent("sessionTimeout");
|
|
334
|
+
},
|
|
335
|
+
getGroupProperty : this.getGroupProperty.bind(this),
|
|
336
|
+
getOptimisticBatchEnabler : this.getOptimisticBatchEnabler.bind(this),
|
|
337
|
+
getReporter : this.getReporter.bind(this),
|
|
338
|
+
onCreateGroup : function (sGroupId) {
|
|
339
|
+
if (that.isAutoGroup(sGroupId)) {
|
|
340
|
+
that.addPrerenderingTask(that._submitBatch.bind(that, sGroupId, true));
|
|
349
341
|
}
|
|
350
|
-
}
|
|
342
|
+
},
|
|
343
|
+
reportStateMessages : this.reportStateMessages.bind(this),
|
|
344
|
+
reportTransitionMessages : this.reportTransitionMessages.bind(this)
|
|
345
|
+
};
|
|
346
|
+
this.oRequestor = _Requestor.create(this.sServiceUrl, this.oInterface, this.mHeaders,
|
|
347
|
+
mUriParameters, sODataVersion);
|
|
348
|
+
this.changeHttpHeaders(mParameters.httpHeaders);
|
|
349
|
+
this.bEarlyRequests = mParameters.earlyRequests;
|
|
350
|
+
if (this.bEarlyRequests) {
|
|
351
|
+
this.oMetaModel.fetchEntityContainer(true);
|
|
352
|
+
this.initializeSecurityToken();
|
|
353
|
+
this.oRequestor.sendOptimisticBatch();
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
this.aAllBindings = [];
|
|
357
|
+
// The bindings holding keep-alive contexts without a $$getKeepAlive binding
|
|
358
|
+
this.mKeepAliveBindingsByPath = {};
|
|
359
|
+
this.mSupportedBindingModes = {
|
|
360
|
+
OneTime : true,
|
|
361
|
+
OneWay : true
|
|
362
|
+
};
|
|
363
|
+
if (mParameters.sharedRequests) {
|
|
364
|
+
this.sDefaultBindingMode = BindingMode.OneWay;
|
|
365
|
+
} else {
|
|
366
|
+
this.sDefaultBindingMode = BindingMode.TwoWay;
|
|
367
|
+
this.mSupportedBindingModes.TwoWay = true;
|
|
368
|
+
}
|
|
369
|
+
this.aPrerenderingTasks = null; // @see #addPrerenderingTask
|
|
370
|
+
this.fnOptimisticBatchEnabler = null;
|
|
371
|
+
}
|
|
351
372
|
|
|
352
373
|
/**
|
|
353
374
|
* Submits the requests associated with this group ID in one batch request.
|
|
@@ -646,6 +667,12 @@ sap.ui.define([
|
|
|
646
667
|
* Whether a binding relative to a {@link sap.ui.model.odata.v4.Context} uses the canonical
|
|
647
668
|
* path computed from its context's path for data service requests; only the value
|
|
648
669
|
* <code>true</code> is allowed.
|
|
670
|
+
* @param {boolean} [mParameters.$$getKeepAliveContext]
|
|
671
|
+
* Whether this binding is considered for a match when {@link #getKeepAliveContext} is called;
|
|
672
|
+
* only the value <code>true</code> is allowed. Must not be combined with <code>$apply</code>,
|
|
673
|
+
* <code>$$aggregation</code>, <code>$$canonicalPath</code>, or <code>$$sharedRequest</code>.
|
|
674
|
+
* If the binding is relative, <code>$$ownRequest</code> must be set as well.
|
|
675
|
+
* Supported since 1.99.0
|
|
649
676
|
* @param {string} [mParameters.$$groupId]
|
|
650
677
|
* The group ID to be used for <b>read</b> requests triggered by this binding; if not
|
|
651
678
|
* specified, either the parent binding's group ID (if the binding is relative) or the
|
|
@@ -1481,6 +1508,115 @@ sap.ui.define([
|
|
|
1481
1508
|
throw new Error("Unsupported operation: v4.ODataModel#getProperty");
|
|
1482
1509
|
};
|
|
1483
1510
|
|
|
1511
|
+
/**
|
|
1512
|
+
* Returns a context with the given path belonging to a matching list binding that has been
|
|
1513
|
+
* marked with <code>$$getKeepAliveContext</code> (see {@link #bindList}). If such a matching
|
|
1514
|
+
* binding can be found, a context is returned and kept alive (see
|
|
1515
|
+
* {@link sap.ui.model.odata.v4.ODataListBinding#getKeepAliveContext}). Since 1.100.0 a
|
|
1516
|
+
* temporary binding is used if no such binding could be found. If such a binding is created or
|
|
1517
|
+
* resolved later, the context and its data are transferred to it, and the temporary binding is
|
|
1518
|
+
* destroyed again.
|
|
1519
|
+
*
|
|
1520
|
+
* A <code>$$getKeepAliveContext</code> binding matches if its resolved binding path is the
|
|
1521
|
+
* collection path of the context. If the context is created using a temporary binding and the
|
|
1522
|
+
* parameters of the <code>$$getKeepAliveContext</code> binding differ from the given
|
|
1523
|
+
* <code>mParameters</code> (except <code>$$groupId</code> which is especially used for the
|
|
1524
|
+
* context), that binding later runs into an error when trying to read data.
|
|
1525
|
+
*
|
|
1526
|
+
* <b>Note</b>: The context received by this function may change its
|
|
1527
|
+
* {@link sap.ui.model.odata.v4.Context#getBinding binding} during its lifetime.
|
|
1528
|
+
*
|
|
1529
|
+
* @param {string} sPath
|
|
1530
|
+
* A list context path to an entity
|
|
1531
|
+
* @param {boolean} [bRequestMessages]
|
|
1532
|
+
* Whether to request messages for the context's entity
|
|
1533
|
+
* @param {object} [mParameters]
|
|
1534
|
+
* Parameters for the context or the temporary binding; supported since 1.100.0. All custom
|
|
1535
|
+
* query options and the following binding-specific parameters for a list binding may be given
|
|
1536
|
+
* (see {@link #bindList} for details).
|
|
1537
|
+
* @param {string} [mParameters.$$groupId]
|
|
1538
|
+
* The group ID used for read requests for the context's entity or its properties. If not
|
|
1539
|
+
* given, the model's {@link #getGroupId group ID} is used
|
|
1540
|
+
* @param {boolean} [mParameters.$$patchWithoutSideEffects]
|
|
1541
|
+
* Whether implicit loading of side effects via PATCH requests is switched off
|
|
1542
|
+
* @param {string} [mParameters.$$updateGroupId]
|
|
1543
|
+
* The group ID to be used for <b>update</b> requests triggered by the context's binding
|
|
1544
|
+
* @returns {sap.ui.model.odata.v4.Context}
|
|
1545
|
+
* The kept-alive context
|
|
1546
|
+
* @throws {Error} If
|
|
1547
|
+
* <ul>
|
|
1548
|
+
* <li> the model does not use the <code>autoExpandSelect</code> parameter,
|
|
1549
|
+
* <li> an invalid parameter was supplied,
|
|
1550
|
+
* <li> the path is not a list context path to an entity,
|
|
1551
|
+
* <li> multiple list bindings with <code>$$getKeepAliveContext</code> match,
|
|
1552
|
+
* <li> a suspended binding already having contexts matches, or
|
|
1553
|
+
* <li> {@link sap.ui.model.odata.v4.Context#setKeepAlive} fails
|
|
1554
|
+
* </ul>
|
|
1555
|
+
*
|
|
1556
|
+
* @public
|
|
1557
|
+
* @since 1.99.0
|
|
1558
|
+
*/
|
|
1559
|
+
ODataModel.prototype.getKeepAliveContext = function (sPath, bRequestMessages, mParameters) {
|
|
1560
|
+
var oListBinding,
|
|
1561
|
+
aListBindings,
|
|
1562
|
+
sListPath;
|
|
1563
|
+
|
|
1564
|
+
if (!this.bAutoExpandSelect) {
|
|
1565
|
+
throw new Error("Missing parameter autoExpandSelect");
|
|
1566
|
+
}
|
|
1567
|
+
if (sPath[0] !== "/") {
|
|
1568
|
+
throw new Error("Not a list context path to an entity: " + sPath);
|
|
1569
|
+
}
|
|
1570
|
+
mParameters = mParameters || {};
|
|
1571
|
+
// Only excess parameters are rejected here; the correctness is checked by ODLB
|
|
1572
|
+
Object.keys(mParameters).forEach(function (sParameter) {
|
|
1573
|
+
if (sParameter.startsWith("sap-") && !sParameter.startsWith("sap-valid-")
|
|
1574
|
+
|| sParameter[0] === "$" && !aGetKeepAliveParameters.includes(sParameter)) {
|
|
1575
|
+
throw new Error("Invalid parameter: " + sParameter);
|
|
1576
|
+
}
|
|
1577
|
+
});
|
|
1578
|
+
sListPath = sPath.slice(0, this.getPredicateIndex(sPath));
|
|
1579
|
+
oListBinding = this.mKeepAliveBindingsByPath[sListPath];
|
|
1580
|
+
if (!oListBinding) {
|
|
1581
|
+
aListBindings = this.aAllBindings.filter(function (oBinding) {
|
|
1582
|
+
if (oBinding.mParameters && oBinding.mParameters.$$getKeepAliveContext) {
|
|
1583
|
+
oBinding.removeCachesAndMessages(sListPath.slice(1), true);
|
|
1584
|
+
}
|
|
1585
|
+
return oBinding.isKeepAliveBindingFor && oBinding.isKeepAliveBindingFor(sListPath);
|
|
1586
|
+
});
|
|
1587
|
+
if (aListBindings.length > 1) {
|
|
1588
|
+
throw new Error("Multiple bindings with $$getKeepAliveContext for: " + sPath);
|
|
1589
|
+
}
|
|
1590
|
+
oListBinding = aListBindings[0];
|
|
1591
|
+
if (!oListBinding) {
|
|
1592
|
+
oListBinding = this.bindList(sListPath, undefined, undefined, undefined,
|
|
1593
|
+
mParameters);
|
|
1594
|
+
this.mKeepAliveBindingsByPath[sListPath] = oListBinding;
|
|
1595
|
+
}
|
|
1596
|
+
}
|
|
1597
|
+
|
|
1598
|
+
return oListBinding.getKeepAliveContext(sPath, bRequestMessages, mParameters.$$groupId);
|
|
1599
|
+
};
|
|
1600
|
+
|
|
1601
|
+
/**
|
|
1602
|
+
* Returns the index of the key predicate in the last segment of the given path.
|
|
1603
|
+
*
|
|
1604
|
+
* @param {string} sPath - The path
|
|
1605
|
+
* @returns {number} The index of the key predicate
|
|
1606
|
+
* @throws {Error} If the last segment contains no key predicate
|
|
1607
|
+
*
|
|
1608
|
+
* @private
|
|
1609
|
+
*/
|
|
1610
|
+
ODataModel.prototype.getPredicateIndex = function (sPath) {
|
|
1611
|
+
var iPredicateIndex = sPath.indexOf("(", sPath.lastIndexOf("/"));
|
|
1612
|
+
|
|
1613
|
+
if (iPredicateIndex < 0 || !sPath.endsWith(")")) {
|
|
1614
|
+
throw new Error("Not a list context path to an entity: " + sPath);
|
|
1615
|
+
}
|
|
1616
|
+
|
|
1617
|
+
return iPredicateIndex;
|
|
1618
|
+
};
|
|
1619
|
+
|
|
1484
1620
|
/**
|
|
1485
1621
|
* Returns the model's update group ID.
|
|
1486
1622
|
*
|
|
@@ -1518,7 +1654,8 @@ sap.ui.define([
|
|
|
1518
1654
|
/**
|
|
1519
1655
|
* Returns <code>true</code> if there are pending changes, meaning updates or created entities
|
|
1520
1656
|
* (see {@link sap.ui.model.odata.v4.ODataListBinding#create}) that have not yet been
|
|
1521
|
-
* successfully sent to the server.
|
|
1657
|
+
* successfully sent to the server. Since 1.98.0,
|
|
1658
|
+
* {@link sap.ui.model.odata.v4.Context#isInactive inactive} contexts are ignored.
|
|
1522
1659
|
*
|
|
1523
1660
|
* @param {string} [sGroupId]
|
|
1524
1661
|
* A group ID as specified in {@link sap.ui.model.odata.v4.ODataModel}, except group IDs
|
|
@@ -1688,6 +1825,24 @@ sap.ui.define([
|
|
|
1688
1825
|
});
|
|
1689
1826
|
};
|
|
1690
1827
|
|
|
1828
|
+
/**
|
|
1829
|
+
* Returns and releases the temporary keep-alive binding for the given path.
|
|
1830
|
+
*
|
|
1831
|
+
* @param {string} sPath - The path
|
|
1832
|
+
* @returns {sap.ui.model.odata.v4.ODataListBinding|undefined}
|
|
1833
|
+
* The binding or <code>undefined</code> if there is none
|
|
1834
|
+
*
|
|
1835
|
+
* @private
|
|
1836
|
+
*/
|
|
1837
|
+
ODataModel.prototype.releaseKeepAliveBinding = function (sPath) {
|
|
1838
|
+
var oBinding = this.mKeepAliveBindingsByPath[sPath];
|
|
1839
|
+
|
|
1840
|
+
if (oBinding) {
|
|
1841
|
+
delete this.mKeepAliveBindingsByPath[sPath];
|
|
1842
|
+
return oBinding;
|
|
1843
|
+
}
|
|
1844
|
+
};
|
|
1845
|
+
|
|
1691
1846
|
/**
|
|
1692
1847
|
* Reports a technical error by firing a <code>messageChange</code> event with a new message and
|
|
1693
1848
|
* logging the error to the console. Takes care that the error is only reported once via the
|
|
@@ -1965,6 +2120,79 @@ sap.ui.define([
|
|
|
1965
2120
|
throw new Error("Unsupported operation: v4.ODataModel#setLegacySyntax");
|
|
1966
2121
|
};
|
|
1967
2122
|
|
|
2123
|
+
/**
|
|
2124
|
+
* Getter for the optimistic batch enabler callback function; see
|
|
2125
|
+
* {@link sap.ui.model.odata.v4.ODataModel#setOptimisticBatchEnabler}.
|
|
2126
|
+
*
|
|
2127
|
+
*
|
|
2128
|
+
* @returns {function(string)}
|
|
2129
|
+
* The optimistic batch enabler callback function
|
|
2130
|
+
*
|
|
2131
|
+
* @experimental As of version 1.100.0
|
|
2132
|
+
* @private
|
|
2133
|
+
* @ui5-restricted sap.fe
|
|
2134
|
+
*/
|
|
2135
|
+
ODataModel.prototype.getOptimisticBatchEnabler = function () {
|
|
2136
|
+
return this.fnOptimisticBatchEnabler;
|
|
2137
|
+
};
|
|
2138
|
+
|
|
2139
|
+
/**
|
|
2140
|
+
* Setter for the optimistic batch enabler callback function. Setting this callback activates
|
|
2141
|
+
* the optimistic batch feature. Via the callback the optimistic batch behavior can be enabled
|
|
2142
|
+
* or disabled by returning either a boolean or a promise resolving with a boolean.
|
|
2143
|
+
* As its first argument the callback gets the <code>window.location.href</code> at the point in
|
|
2144
|
+
* time when the OData model is instantiated.
|
|
2145
|
+
*
|
|
2146
|
+
* If the callback returns or resolves with <code>true</code>, the OData model remembers the
|
|
2147
|
+
* first sent $batch request. With the next model instantiation for the same key, this
|
|
2148
|
+
* remembered $batch request will be sent at the earliest point in time in order to have the
|
|
2149
|
+
* response already available when the first $batch request is triggered from the UI or the
|
|
2150
|
+
* binding. If the returned promise is rejected, this error will be reported and the optimistic
|
|
2151
|
+
* batch will be disabled.
|
|
2152
|
+
*
|
|
2153
|
+
* There are several preconditions on the usage of this API:
|
|
2154
|
+
* <ul>
|
|
2155
|
+
* <li> Optimistic batch handling requires the "earlyRequests" model parameter; see
|
|
2156
|
+
* {@link sap.ui.model.odata.v4.ODataModel#constructor},
|
|
2157
|
+
* <li> the setter has to be called before the first $batch request is sent,
|
|
2158
|
+
* <li> the setter may only be called once for an OData model,
|
|
2159
|
+
* <li> the callback has to return a boolean, or a <code>Promise</code> resolving with a
|
|
2160
|
+
* boolean
|
|
2161
|
+
* <li> the callback is not called if the first $batch request is modifying, means that it
|
|
2162
|
+
* contains not only GET requests.
|
|
2163
|
+
* </ul>
|
|
2164
|
+
*
|
|
2165
|
+
* @param {function(string):Promise<boolean>|boolean} fnOptimisticBatchEnabler
|
|
2166
|
+
* The optimistic batch enabler callback controlling whether optimistic batch should be used
|
|
2167
|
+
* @throws {Error} If
|
|
2168
|
+
* <ul>
|
|
2169
|
+
* <li> the earlyRequests model parameter is not set,
|
|
2170
|
+
* <li> the setter is called after a non-optimistic batch is sent,
|
|
2171
|
+
* <li> the given <code>fnOptimisticBatchEnabler</code> parameter is not a function
|
|
2172
|
+
* <li> the setter is called more than once
|
|
2173
|
+
* </ul>
|
|
2174
|
+
*
|
|
2175
|
+
* @experimental As of version 1.100.0
|
|
2176
|
+
* @private
|
|
2177
|
+
* @ui5-restricted sap.fe
|
|
2178
|
+
*/
|
|
2179
|
+
ODataModel.prototype.setOptimisticBatchEnabler = function (fnOptimisticBatchEnabler) {
|
|
2180
|
+
if (!this.bEarlyRequests) {
|
|
2181
|
+
throw new Error("The earlyRequests model parameter is not set");
|
|
2182
|
+
}
|
|
2183
|
+
if (this.oRequestor.isBatchSent()) {
|
|
2184
|
+
throw new Error("The setter is called after a non-optimistic batch is sent");
|
|
2185
|
+
}
|
|
2186
|
+
if (typeof fnOptimisticBatchEnabler !== "function") {
|
|
2187
|
+
throw new Error("The given fnOptimisticBatchEnabler parameter is not a function");
|
|
2188
|
+
}
|
|
2189
|
+
if (this.fnOptimisticBatchEnabler) {
|
|
2190
|
+
throw new Error("The setter is called more than once");
|
|
2191
|
+
}
|
|
2192
|
+
|
|
2193
|
+
this.fnOptimisticBatchEnabler = fnOptimisticBatchEnabler;
|
|
2194
|
+
};
|
|
2195
|
+
|
|
1968
2196
|
/**
|
|
1969
2197
|
* Submits the requests associated with the given group ID in one batch request. Requests from
|
|
1970
2198
|
* subsequent calls to this method for the same group ID may be combined in one batch request
|