From 371cf989cf6f7386a64ef1895137ad0b63bb14b7 Mon Sep 17 00:00:00 2001 From: OpenUI5 Bot Date: Tue, 20 Aug 2024 08:16:35 +0000 Subject: [PATCH] OpenUI5 Documentation Update 20.08.2024 --- ...asic_Example_How_to_Use_Gherkin_4b0c519.md | 15 ++---- ...apping_Loading_and_Initializing_a04b0d1.md | 14 +++--- docs/Component_Controller_27ce0e4.md | 31 +++++++------ docs/Create_an_index_html_File_f7cbafc.md | 16 +++---- ...tive_API_for_Initial_Components_82a0fce.md | 4 +- ...eprecated_Factories_Replacement_491bd9c.md | 5 +- docs/Logging_ebcf60c.md | 2 +- docs/Manifest_Model_Preload_26ba6a5.md | 4 +- ...lling_the_Initial_Instantiation_b430345.md | 2 +- docs/Multiple_Module_Locations_1dfab2e.md | 46 ++++++++----------- docs/Performance_Speed_Up_Your_App_408b40e.md | 8 ---- ...Unit_Test_with_QUnit_TypeScript_750c8c1.md | 4 +- docs/Step_27_Unit_Test_with_QUnit_e1ce1de.md | 4 +- ..._Dynamic_Page_for_the_List_View_0830bce.md | 10 ++-- docs/Step_4_Diagnostics_Window_04b75ea.md | 6 +-- docs/Use_Asynchronous_Loading_676b636.md | 5 +- docs/Using_and_Nesting_Components_346599f.md | 30 ++---------- ...g_from_Content_Delivery_Network_2d3eb2f.md | 25 +++------- docs/XML_View_Cache_3d85d5e.md | 16 +------ 19 files changed, 89 insertions(+), 158 deletions(-) diff --git a/docs/Basic_Example_How_to_Use_Gherkin_4b0c519.md b/docs/Basic_Example_How_to_Use_Gherkin_4b0c519.md index 2f790244..6806dbf6 100644 --- a/docs/Basic_Example_How_to_Use_Gherkin_4b0c519.md +++ b/docs/Basic_Example_How_to_Use_Gherkin_4b0c519.md @@ -93,16 +93,9 @@ sap.ui.define([ ``` -To execute Gherkin tests, you need to find a version of SAPUI5 or OpenUI5 that works for you. Here are some possibilities with different stability: +To execute Gherkin tests, you need to find a version of SAPUI5 or OpenUI5 that works for you. Our examples all use the nightly build from the OpenUI5 Content Delivery Network: -- Stable: `https://sdk.openui5.org/resources/sap-ui-core.js` - -- Stable: `https://sdk.openui5.org/resources/sap-ui-core.js` - -- Nightly: `https://openui5nightly.hana.ondemand.com/resources/sap-ui-core.js` - - -Our examples all use the nightly OpenUI5 build. +`https://sdk.openui5.org/nightly/resources/sap-ui-core.js` *** @@ -119,7 +112,7 @@ Here is a sample HTML bootstrap file for Gherkin. In this example, the feature f @@ -241,7 +234,7 @@ Here is a simple stub for a test Web site \(you may need to update the bootstrap Using Gherkin with OPA5 Website diff --git a/docs/Bootstrapping_Loading_and_Initializing_a04b0d1.md b/docs/Bootstrapping_Loading_and_Initializing_a04b0d1.md index 9e453fe6..44f2f36a 100644 --- a/docs/Bootstrapping_Loading_and_Initializing_a04b0d1.md +++ b/docs/Bootstrapping_Loading_and_Initializing_a04b0d1.md @@ -12,7 +12,7 @@ view on: [demo kit nightly build](https://sdk.openui5.org/nightly/#/topic/a04b0d To use OpenUI5 features in your HTML page, you have to load and initialize the SAPUI5 library. -You can use the OpenUI5 bootstrap script in your page to initialize OpenUI5 runtime automatically as soon as the script is loaded and executed by the browser. For simple use cases as well as the default OpenUI5 installation, this is sufficient to build and run UIs. In addition to this, you can specify the set of OpenUI5 libraries and the theme used for your application in the configuration settings. +You can use the OpenUI5 bootstrap script in your page to initialize OpenUI5 runtime automatically as soon as the script is loaded and executed by the browser. For simple use cases as well as the default OpenUI5 installation, this is sufficient to build and run UIs. > ### Note: > If you run your app standalone, the bootstrap is added to your HTML page. In an SAP Fiori launchpad environment, the launchpad executes the bootstrap and no additional HTML page is needed to display the app. @@ -21,15 +21,15 @@ The following code snippet shows a typical bootstrap script tag: ```html ``` -The attributes `data-sap-ui-theme="sap_horizon"` and `data-sap-ui-libs="sap.m"` already provide examples of how OpenUI5 runtime can be configured to the needs of an application. +In addition to the above snippet, you can specify a set of OpenUI5 libraries with `data-sap-ui-libs="sap.m, sap.ui.layout, sap.ui.unified, ..."` if there is no manifest.json to declare dependent libraries. More options that can be configured with `data-` can be found in [Configuration Options and URL Parameters](Configuration_Options_and_URL_Parameters_91f2d03.md). *** @@ -37,7 +37,7 @@ The attributes `data-sap-ui-theme="sap_horizon"` and `data-sap-ui-libs="sap.m"` ### `Core.ready` State -After bootstrapping, you can use the `sap/ui/core/Core` singleton to either `await` the Core's `ready` state or provide a callback function: +After bootstrapping, if `sap-ui-on-init` has not been configured already, you can use the `sap/ui/core/Core` singleton to either `await` the Core's `ready` state or provide a callback function: ```js sap.ui.require(["sap/ui/core/Core"], async (Core) => { diff --git a/docs/Component_Controller_27ce0e4.md b/docs/Component_Controller_27ce0e4.md index 231a85f3..cad3ed20 100644 --- a/docs/Component_Controller_27ce0e4.md +++ b/docs/Component_Controller_27ce0e4.md @@ -14,22 +14,23 @@ The component controller is a script file \(written in either JavaScript or Type When written in JavaScript, a component controller is defined with the asynchronous module definition \(AMD\) syntax; this does not apply when using TypeScript. In the `sap.ui.define` statement the required dependencies can be declared which can be used in the controller. -To create an OpenUI5 component, you extend either the `Component` or `UIComponent` base class and pass the name of the module \(namespace + `.Component`\). +To create a component, you extend either the `Component` or `UIComponent` base class and pass the name of the module \(namespace + `.Component`\). ```js -sap.ui.define(['sap/ui/core/UIComponent'], - function(UIComponent) { - "use strict"; - - var Component = UIComponent.extend("samples.components.sample.Component", { - metadata : { - interfaces: [ - "sap.ui.core.IAsyncContentCreation" - ], - manifest : "json" - } - }); - return Component; +sap.ui.define([ + "sap/ui/core/UIComponent" +], (UIComponent) => { + "use strict"; + + return UIComponent.extend("my.app.Component", { // given "my.app" being the value of sap.app/id in manifest.json + metadata: { + interfaces: [ + "sap.ui.core.IAsyncContentCreation" + ], + manifest: "json" + }, + // ... + }); }); ``` @@ -37,7 +38,7 @@ The metadata of the component controller should be used to declare the runtime m We recommend to define the component metadata externally in the descriptor \(`manifest.json`\), because the descriptor for components is mandatory for modern components and allows performance optimizations. -We recommend to add the `sap.ui.core.IAsyncContentCreation` marker interface when defining a new component. Using this interface allows the component to be created fully asynchronously. This interface will implicitly set the component's `rootView` and router configuration to `async`. Nested views will also be handled asynchronously. Additionally, the error handling during the processing of views is stricter and will fail if a view definition contains errors, e.g. broken binding strings. +We recommend to add the [`sap.ui.core.IAsyncContentCreation`](https://sdk.openui5.org/api/sap.ui.core.IAsyncContentCreation) marker interface when defining a new component. Using this interface allows the component to be created fully asynchronously. This interface will implicitly set the component's `rootView` and router configuration to `async`. Nested views will also be handled asynchronously. Additionally, the error handling during the processing of views is stricter and will fail if a view definition contains errors, e.g. broken binding strings. - **[Component Metadata](Component_Metadata_0187ea5.md "The component class provides specific metadata for components by extending the ManagedObject class. The UIComponent class provides diff --git a/docs/Create_an_index_html_File_f7cbafc.md b/docs/Create_an_index_html_File_f7cbafc.md index 98822c98..0b1f627f 100644 --- a/docs/Create_an_index_html_File_f7cbafc.md +++ b/docs/Create_an_index_html_File_f7cbafc.md @@ -27,16 +27,14 @@ A minimalistic `index.html` file is needed to test the project configuration. Th SAPUI5 Walkthrough - + data-sap-ui-async="true" + data-sap-ui-on-init="module:my/app/main" + data-sap-ui-resource-roots='{"my.app": "./"}'> + @@ -48,7 +46,7 @@ A minimalistic `index.html` file is needed to test the project configuration. Th **main.js** ```js - sap.ui.define(['sap/m/Text'], function(Text) { + sap.ui.define(["sap/m/Text"], function(Text) { new Text({ text: "OpenUI5 is loaded successfully!" }).placeAt("content"); @@ -59,7 +57,7 @@ A minimalistic `index.html` file is needed to test the project configuration. Th > ### Caution: > Adapt the path where the resources are located \(`src="/resources/sap-ui-core.js"`\) according to your installation. For OpenUI5 you can use `src="https://sdk.openui5.org/resources/sap-ui-core.js"`. > -> You can use this reference to the latest stable version of OpenUI5 for the tutorial or for testing purposes, but never use this for productive use. In an actual app, you always have to specify an OpenUI5 version explicitly. +> You can use this reference to the latest version of OpenUI5 for the tutorial or for testing purposes, but never use this for productive use. In an actual app, you always have to specify an OpenUI5 version explicitly. > > For more information, see [Variant for Bootstrapping from Content Delivery Network](Variant_for_Bootstrapping_from_Content_Delivery_Network_2d3eb2f.md). diff --git a/docs/Declarative_API_for_Initial_Components_82a0fce.md b/docs/Declarative_API_for_Initial_Components_82a0fce.md index 201a6bb6..030900b6 100644 --- a/docs/Declarative_API_for_Initial_Components_82a0fce.md +++ b/docs/Declarative_API_for_Initial_Components_82a0fce.md @@ -18,12 +18,12 @@ The declarative API enables you to define the initially started component direct ### Using the `ComponentSupport` Module -With the declarative `sap/ui/core/ComponentSupport` API it is possible to define the initially started component directly in the HTML markup instead of the imperative way using JavaScript or TypeScript. The declarative `ComponentSupport` is not activated by default, but must be enabled via the bootstrap: +With the declarative `sap/ui/core/ComponentSupport` API, you can define the initially started component directly in the HTML markup instead of in the imperative way using JavaScript or TypeScript. The declarative `ComponentSupport` must be enabled via the bootstrap: ```html diff --git a/docs/Manifest_Model_Preload_26ba6a5.md b/docs/Manifest_Model_Preload_26ba6a5.md index ba77022c..a8da59c1 100644 --- a/docs/Manifest_Model_Preload_26ba6a5.md +++ b/docs/Manifest_Model_Preload_26ba6a5.md @@ -26,9 +26,7 @@ The `preload` flag is located in `manifest.json` under `sap.ui5/models`: The flag is not active by default, as there are some prerequisites: -- `sap.ui.component` is set to `"async=true"` and `manifest` \(API parameter name of `sap.ui.component`\). - -- Make sure that the specific model implementation class \(e.g. `name.of.my.ModelClass`\) is loaded before calling one of the available component factories, e.g. `Component.create` or `sap.ui.core.Component#createComponent`; otherwise the model implementation class will be loaded synchronously. +- The component is created asynchronously. - As model events \(for example `attachMetadataLoaded`\) may be missed because they are fired before the component coding runs, we recommend using the `Promise` API \(e.g. `metadataLoaded`\) instead, depending on the model type. diff --git a/docs/Methods_Controlling_the_Initial_Instantiation_b430345.md b/docs/Methods_Controlling_the_Initial_Instantiation_b430345.md index bba6611a..52b00b63 100644 --- a/docs/Methods_Controlling_the_Initial_Instantiation_b430345.md +++ b/docs/Methods_Controlling_the_Initial_Instantiation_b430345.md @@ -67,7 +67,7 @@ You can use the following methods: > ### Note: -> The settings passed to the `sap.ui.core.Component.create` or `sap.ui.component` factory calls are not available in the `Init` and `createContent` methods. Use `componentData` instead. For more information, see [`sap.ui.core.Component.create`](https://sdk.openui5.org/api/sap.ui.core.Component/methods/sap.ui.core.Component.create). +> The settings passed to the `sap.ui.core.Component.create`or `sap.ui.component` factory calls are not available in the `init` and `createContent` methods. Use `componentData` instead. For more information, see [`sap.ui.core.Component.create`](https://sdk.openui5.org/api/sap.ui.core.Component/methods/sap.ui.core.Component.create). You can also overwrite the getters and setters for component properties in the Component controller. diff --git a/docs/Multiple_Module_Locations_1dfab2e.md b/docs/Multiple_Module_Locations_1dfab2e.md index 405ceebb..fb2a097f 100644 --- a/docs/Multiple_Module_Locations_1dfab2e.md +++ b/docs/Multiple_Module_Locations_1dfab2e.md @@ -16,47 +16,39 @@ In web applications, modules can be located in different locations, such as serv The `sap.ui.loader.config` function associates a module name prefix with a URL prefix. All modules are loaded from the registered URL instead of the standard resource root URL: -``` +```js sap.ui.loader.config({ paths: { - 'my/module': 'https://example.com/resources/my/module' + "my/module": "https://example.com/resources/my/module" } }); ``` Thus, it is possible to redirect the request for the application-specific modules to the corresponding web application: -```html - - - - +```js +// redirect the 'my.webapp' package to the local web app +sap.ui.loader.config({ + paths: { + "my/webapp": "my-webapp/resources/my/webapp" + } +}); +sap.ui.require([ + "sap/ui/core/Core", + "my/webapp/MyModule01" // loads /my-webapp/resources/my/webapp/MyModule01.js +], (Core, MyModule01) => { + // … +}); ``` > ### Note: > The registered URL above contains the transformed module name prefix `my/webapp/`. This allows a more flexible packaging of the modules, for example, if you decide to deploy all modules named `my.company.*` to the central URL `http://my.company/shared/` without packaging them into a two level hierarchy of subfolders: > -> ``` -> +> ```js > sap.ui.loader.config({ -> paths:{ -> "my/company": "http://my.company/shared/" -> } +> paths: { +> "my/company": "http://my.company/shared/" +> } > }); > ``` > diff --git a/docs/Performance_Speed_Up_Your_App_408b40e.md b/docs/Performance_Speed_Up_Your_App_408b40e.md index b9b19b49..cb340efa 100644 --- a/docs/Performance_Speed_Up_Your_App_408b40e.md +++ b/docs/Performance_Speed_Up_Your_App_408b40e.md @@ -140,14 +140,6 @@ For more information, see: When creating a component manually, make sure the `manifest.json` descriptor file is loaded first, so that the dependencies are analyzed and preloaded when the component is loaded. For more information, see [Manifest First Function](Descriptor_for_Applications_Components_and_Libraries_manifest_json_be0cf40.md#loiobe0cf40f61184b358b5faedaec98b2da__manifirst). -```js -// "Component" required from module "sap/ui/core/Component" -// load manifest.json from default location and evaluate it before creating an instance of the component -Component.create({ - name: "my.component", -}); -``` - *** diff --git a/docs/Step_27_Unit_Test_with_QUnit_TypeScript_750c8c1.md b/docs/Step_27_Unit_Test_with_QUnit_TypeScript_750c8c1.md index c5031ffe..7235d63e 100644 --- a/docs/Step_27_Unit_Test_with_QUnit_TypeScript_750c8c1.md +++ b/docs/Step_27_Unit_Test_with_QUnit_TypeScript_750c8c1.md @@ -12,7 +12,7 @@ view on: [demo kit nightly build](https://sdk.openui5.org/nightly/#/topic/750c8c Now that we have a test folder in the app, we can start to increase our test coverage. -Actually, every feature that we added to the app so far, would require a separate test case. We have totally neglected this so far, so let’s add a simple unit test for our custom formatter function from Step 23. We will test if the long text for our status is correct by comparing it with the texts from our resource bundle. +Actually, every feature that we added to the app so far, would require a separate test case. We have totally neglected this so far, so let’s add a simple unit test for our custom formatter function from Step 22. We will test if the long text for our status is correct by comparing it with the texts from our resource bundle. > ### Note: > In this tutorial, we focus on a simple use case for the test implementation. If you want to learn more about QUnit tests, have a look at our [Testing Tutorial](Testing_Tutorial_291c912.md) tutorial, especially [Step 2: A First Unit Test](Step_2_A_First_Unit_Test_b81736e.md). @@ -47,7 +47,7 @@ We add a new folder `unit` under the `test` folder and a `model` subfolder where We create a new `formatter.ts` file under `webapp/test/unit/model` where the unit test for the custom formatter is implemented. The `formatter` function that we want to test is from the `formatter.ts` file located in the `webapp/model` folder. -The new formatter file just contains one QUnit module for our formatter function and one unit test for the formatter function. In the implementation of the `statusText` function that we created in Step 23, we use the translated texts when calling the formatter. As we do not want to test the OpenUI5 binding functionality, we just use text in the test instead of a `ResourceBundle`. +The new formatter file just contains one QUnit module for our formatter function and one unit test for the formatter function. In the implementation of the `statusText` function that we created in Step 22, we use the translated texts when calling the formatter. As we do not want to test the OpenUI5 binding functionality, we just use text in the test instead of a `ResourceBundle`. Finally, we perform our assertions. We check each branch of the formatter logic by invoking the isolated formatter function with the values that we expect in the data model \(`A`, `B`, `C`, and everything else\). We strictly compare the result of the formatter function with the hard-coded strings that we expect from the resource bundle and give a meaningful error message if the test should fail. diff --git a/docs/Step_27_Unit_Test_with_QUnit_e1ce1de.md b/docs/Step_27_Unit_Test_with_QUnit_e1ce1de.md index e79b2881..20f80a6a 100644 --- a/docs/Step_27_Unit_Test_with_QUnit_e1ce1de.md +++ b/docs/Step_27_Unit_Test_with_QUnit_e1ce1de.md @@ -12,7 +12,7 @@ view on: [demo kit nightly build](https://sdk.openui5.org/nightly/#/topic/e1ce1d Now that we have a test folder in the app, we can start to increase our test coverage. -Actually, every feature that we added to the app so far, would require a separate test case. We have totally neglected this so far, so let’s add a simple unit test for our custom formatter function from Step 23. We will test if the long text for our status is correct by comparing it with the texts from our resource bundle. +Actually, every feature that we added to the app so far, would require a separate test case. We have totally neglected this so far, so let’s add a simple unit test for our custom formatter function from Step 22. We will test if the long text for our status is correct by comparing it with the texts from our resource bundle. > ### Note: > In this tutorial, we focus on a simple use case for the test implementation. If you want to learn more about QUnit tests, have a look at our [Testing Tutorial](Testing_Tutorial_291c912.md) tutorial, especially [Step 2: A First Unit Test](Step_2_A_First_Unit_Test_b81736e.md). @@ -86,7 +86,7 @@ sap.ui.define([ We create a new `formatter.js` file under `webapp/test/unit/model` where the unit test for the custom formatter is implemented. The `formatter` file that we want to test is loaded as a dependency. -The formatter file just contains one QUnit module for our formatter function and one unit test for the formatter function. In the implementation of the `statusText` function that we created in Step 23, we use the translated texts when calling the formatter. As we do not want to test the UI5 binding functionality, we just use text in the test instead of a `ResourceBundle`. +The formatter file just contains one QUnit module for our formatter function and one unit test for the formatter function. In the implementation of the `statusText` function that we created in Step 22, we use the translated texts when calling the formatter. As we do not want to test the UI5 binding functionality, we just use text in the test instead of a `ResourceBundle`. Finally, we perform our assertions. We check each branch of the formatter logic by invoking the isolated formatter function with the values that we expect in the data model \(`A`, `B`, `C`, and everything else\). We strictly compare the result of the formatter function with the hard-coded strings that we expect from the resource bundle and give a meaningful error message if the test should fail. diff --git a/docs/Step_3_Using_Dynamic_Page_for_the_List_View_0830bce.md b/docs/Step_3_Using_Dynamic_Page_for_the_List_View_0830bce.md index 8e262c34..50900d80 100644 --- a/docs/Step_3_Using_Dynamic_Page_for_the_List_View_0830bce.md +++ b/docs/Step_3_Using_Dynamic_Page_for_the_List_View_0830bce.md @@ -32,10 +32,12 @@ In this step, we create the list view of the app using `sap.f.DynamicPage` contr You can view and download all files at [Flexible Column Layout App - Step 3](https://sdk.openui5.org/sample/sap.f.tutorial.fiori2.03/preview). -webapp/manifest.json \[MODIFY\] - *** + + +### webapp/manifest.json \[MODIFY\] + ```json { "_version": "1.12.0", @@ -76,11 +78,11 @@ First, we add the `sap.m` library as a dependency in the `manifest.json`. ```html ... - - + data-...="..."> + ``` The first segment of the URL after the host name is used to specify a concrete version, which needs to be provided in the following form: `release_number.version_number.patch_number`. For more information, see [Versioning and Maintenance of OpenUI5](Versioning_and_Maintenance_of_OpenUI5_91f0214.md). @@ -58,10 +55,11 @@ The evergreen version allows you to automatically select the latest available pa @@ -70,11 +68,12 @@ The evergreen version allows you to automatically select the latest available pa data-name="my.app" data-height="100%" data-settings='{ "id": "myComponent" }' + data-...="..."> ``` -The first segment of the URL after the host name is used to specify an evergreen version, which needs to be provided in the following form: `release_number.version_number`. For more information, see [Versioning and Maintenance of OpenUI5](Versioning_and_Maintenance_of_OpenUI5_91f0214.md). All long-term maintenance versions \>= 1.71 can be used as evergreen versions to bootstrap OpenUI5 applications. You can find the available versions with long-term maintenance status at [https://sdk.openui5.org/versionoverview.html](https://sdk.openui5.org/versionoverview.html). +The first segment of the URL after the host name is used to specify an evergreen version, which needs to be provided in the following version number combination: `.` without patch number. For more information, see [Versioning and Maintenance of OpenUI5](Versioning_and_Maintenance_of_OpenUI5_91f0214.md). All long-term maintenance versions \>= 1.71 can be used as evergreen versions to bootstrap OpenUI5 applications. You can find the available versions with long-term maintenance status at [https://sdk.openui5.org/versionoverview.html](https://sdk.openui5.org/versionoverview.html). When using the patch-level independent bootstrap you must use `data-sap-ui-async="true"` and the `data-sap-ui-on-init` callback. Ideally, you refer to a module, for example `sap/ui/core/ComponentSupport` to bootstrap your Component; see [Declarative API for Initial Components](Declarative_API_for_Initial_Components_82a0fce.md). You can also refer to a custom module. @@ -89,18 +88,6 @@ When using the patch-level independent bootstrap you must use `data-sap-ui-async > ### Caution: > The default version is constantly being upgraded and this might have an impact on the stability of your application. Use this version for testing purposes only. -> -> The default version of our libraries has the generic URL [https://sdk.openui5.org/resources/sap-ui-core.js](https://sdk.openui5.org/resources/sap-ui-core.js) \(OpenUI5\). If you want to use the default version, you can use the following bootstrap script: -> -> ```html -> -> -> ``` *** diff --git a/docs/XML_View_Cache_3d85d5e.md b/docs/XML_View_Cache_3d85d5e.md index 1913ba27..c439c3e3 100644 --- a/docs/XML_View_Cache_3d85d5e.md +++ b/docs/XML_View_Cache_3d85d5e.md @@ -15,7 +15,7 @@ To be able to speed up processing times of XML views that make heavy use of the To make sure that the cache always contains the latest view data, the cache has to be invalidated whenever the data changes that is needed for preprocessing. When the cache is invalidated, all resources are processed again and the cache gets filled with new data. > ### Caution: -> Parts of this feature are currently still experimental. For more information, see [API Reference: `sap.ui.xmlview`](https://sdk.openui5.org/api/sap.ui/methods/sap.ui.xmlview). +> Parts of this feature are currently still experimental. For more information, see [API Reference: `sap.ui.core.mvc.XMLView.create`](https://sdk.openui5.org/api/sap.ui.core.mvc.XMLView%23methods/sap.ui.core.mvc.XMLView.create). The following data changes are handled automatically by OpenUI5: @@ -29,20 +29,6 @@ The following data changes are handled automatically by OpenUI5: > ### Note: > For each additional component that may have an influence on the preprocessing results of the view source, like OData metadata, you have to implement the invalidation by adding additional keys to the cache configuration. -*** - -### Prerequisites - -This feature is only enabled for the following browsers: - -- Google Chrome as of Version 49 for desktop - -- Google Chrome as of Version 80 for Android phone/tablet -- Microsoft Edge \(Chromium\) for desktop -- Mozilla Firefox as of Version 74 for Microsoft Windows desktop -- Safari as of Version 13 for desktop -- Safari as of Version 13 for iOS phone/tablet - The XML view has to be loaded asynchronously. ***