diff --git a/docs/01_Whats-New/images/Image_Map_What_s_New_60070cb.png b/docs/01_Whats-New/images/Image_Map_What_s_New_60070cb.png index 2c799e8f..45581bb2 100644 Binary files a/docs/01_Whats-New/images/Image_Map_What_s_New_60070cb.png and b/docs/01_Whats-New/images/Image_Map_What_s_New_60070cb.png differ diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-100-27dec1d.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-100-27dec1d.md index 95b6e195..529cdad5 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-100-27dec1d.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-100-27dec1d.md @@ -553,6 +553,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-101-7733b00.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-101-7733b00.md index 1de5646f..6eb6cdfb 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-101-7733b00.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-101-7733b00.md @@ -773,6 +773,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-102-f038c99.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-102-f038c99.md index 03cf3498..b89271e8 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-102-f038c99.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-102-f038c99.md @@ -1001,6 +1001,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-103-0e98c76.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-103-0e98c76.md index 121e9eeb..bf6a4ebd 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-103-0e98c76.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-103-0e98c76.md @@ -483,6 +483,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-104-69e567c.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-104-69e567c.md index f3da9bd8..5ea4c009 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-104-69e567c.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-104-69e567c.md @@ -326,6 +326,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-105-4d6c00e.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-105-4d6c00e.md index 54e1b578..1ce40c18 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-105-4d6c00e.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-105-4d6c00e.md @@ -691,6 +691,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-106-5b497b0.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-106-5b497b0.md index 64f9b0a1..c0be889b 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-106-5b497b0.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-106-5b497b0.md @@ -657,6 +657,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-107-d4ff916.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-107-d4ff916.md index 13be4a88..c6ba1c66 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-107-d4ff916.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-107-d4ff916.md @@ -577,6 +577,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-108-66e33f0.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-108-66e33f0.md index fdc9f8c8..2f8fc734 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-108-66e33f0.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-108-66e33f0.md @@ -733,6 +733,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-109-3264bd2.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-109-3264bd2.md index 6f3b96be..8bc6a3b9 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-109-3264bd2.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-109-3264bd2.md @@ -669,6 +669,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-110-71a855c.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-110-71a855c.md index e03991fd..22d14b4e 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-110-71a855c.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-110-71a855c.md @@ -1030,6 +1030,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-111-7a67837.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-111-7a67837.md index 287e904c..c13a5fbc 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-111-7a67837.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-111-7a67837.md @@ -403,7 +403,7 @@ SAP Fiori Elements The following changes and new features are available for SAP Fiori elements for OData V2: -- You can now create cards from the list report tables that can be added to the *Insights* section of *My Home* in SAP S/4HANA Cloud. For more information, see [Creating Cards for the Insights Cards Section of My Home in SAP S/4HANA](../06_SAP_Fiori_Elements/creating-cards-for-the-insights-cards-section-of-my-home-in-sap-s-4hana-9b13559.md) . +- You can now create cards from the list report tables that can be added to the *Insights* section of *My Home* in SAP S/4HANA Cloud. For more information, see [Creating Cards for the Insights Cards Section of My Home in SAP S/4HANA Cloud and My Home in SAP S/4HANA](../06_SAP_Fiori_Elements/creating-cards-for-the-insights-cards-section-of-my-home-in-sap-s-4hana-cloud-and-my-home-9b13559.md) . Changed•SAP Fiori Elements•Info Only•1.111 @@ -775,6 +775,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-112-34afc69.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-112-34afc69.md index c7b5a5c1..97b69db5 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-112-34afc69.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-112-34afc69.md @@ -493,6 +493,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-113-a9553fe.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-113-a9553fe.md index e6087d09..e208816f 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-113-a9553fe.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-113-a9553fe.md @@ -1169,6 +1169,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-114-890fce1.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-114-890fce1.md index 8072cda6..ab9c39c0 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-114-890fce1.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-114-890fce1.md @@ -209,7 +209,7 @@ The following changes and new features are available for SAP Fiori elements for - In draft-enabled applications, drafts are now saved after 20 seconds, thereby reducing the number of merge calls. For more information, see [Draft Handling](../06_SAP_Fiori_Elements/draft-handling-ed9aa41.md). -- You now have an option to create cards for the *Insights* section of *My Home* in SAP S/4HANA Cloud from the list report and analytical list page apps. For more information, see [Creating Cards for the Insights Cards Section of My Home in SAP S/4HANA](../06_SAP_Fiori_Elements/creating-cards-for-the-insights-cards-section-of-my-home-in-sap-s-4hana-9b13559.md). +- You now have an option to create cards for the *Insights* section of *My Home* in SAP S/4HANA Cloud from the list report and analytical list page apps. For more information, see [Creating Cards for the Insights Cards Section of My Home in SAP S/4HANA Cloud and My Home in SAP S/4HANA](../06_SAP_Fiori_Elements/creating-cards-for-the-insights-cards-section-of-my-home-in-sap-s-4hana-cloud-and-my-home-9b13559.md). - We've added another option to the *Share* menu button. When a user clicks the *Share* button and then the *Share Menu: Microsoft Teams* option, they can now also choose *As Tab*. @@ -265,9 +265,9 @@ The following changes and new features are available for SAP Fiori elements for - We now provide filtering by draft-related properties. For more information, see [Draft Handling](../06_SAP_Fiori_Elements/draft-handling-ed9aa41.md). -- You can now disable the `AddCardToInsights` option in the manifest. For more information, see [Creating Cards for the Insights Cards Section of My Home in SAP S/4HANA](../06_SAP_Fiori_Elements/creating-cards-for-the-insights-cards-section-of-my-home-in-sap-s-4hana-9b13559.md). +- You can now disable the `AddCardToInsights` option in the manifest. For more information, see [Creating Cards for the Insights Cards Section of My Home in SAP S/4HANA Cloud and My Home in SAP S/4HANA](../06_SAP_Fiori_Elements/creating-cards-for-the-insights-cards-section-of-my-home-in-sap-s-4hana-cloud-and-my-home-9b13559.md). -- You now have an option to create cards for the *Insights* section of *My Home* in SAP S/4HANA Cloud from the list report and analytical list page apps. For more information, see [Creating Cards for the Insights Cards Section of My Home in SAP S/4HANA](../06_SAP_Fiori_Elements/creating-cards-for-the-insights-cards-section-of-my-home-in-sap-s-4hana-9b13559.md). +- You now have an option to create cards for the *Insights* section of *My Home* in SAP S/4HANA Cloud from the list report and analytical list page apps. For more information, see [Creating Cards for the Insights Cards Section of My Home in SAP S/4HANA Cloud and My Home in SAP S/4HANA](../06_SAP_Fiori_Elements/creating-cards-for-the-insights-cards-section-of-my-home-in-sap-s-4hana-cloud-and-my-home-9b13559.md). - We've added more keys that can be overridden by application developers using the custom i18n file approach. You can now override the following keys: @@ -524,6 +524,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-115-409fde8.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-115-409fde8.md index 4fc6f69a..94b291c4 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-115-409fde8.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-115-409fde8.md @@ -713,6 +713,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-116-ebd6f34.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-116-ebd6f34.md index 6b44643a..104f9e11 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-116-ebd6f34.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-116-ebd6f34.md @@ -701,6 +701,8 @@ Required **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-117-029d3b4.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-117-029d3b4.md index 5db52872..5a2763de 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-117-029d3b4.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-117-029d3b4.md @@ -1055,6 +1055,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-118-3eecbde.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-118-3eecbde.md index dd25c9b6..157f4ab4 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-118-3eecbde.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-118-3eecbde.md @@ -821,6 +821,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-119-0b1903a.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-119-0b1903a.md index 892a62cc..9f26ace4 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-119-0b1903a.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-119-0b1903a.md @@ -886,6 +886,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-120-2359b63.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-120-2359b63.md index 596a765b..cee15a34 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-120-2359b63.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-120-2359b63.md @@ -1395,6 +1395,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-121-91a4a2f.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-121-91a4a2f.md index 4b794046..f561f586 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-121-91a4a2f.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-121-91a4a2f.md @@ -641,7 +641,7 @@ The following changes and new features are available for SAP Fiori elements for - Table types are now displayed on mobile devices. This means that there's no need to automatically switch to responsive tables when the app is launched on mobile devices. For more information, see [Tables](../06_SAP_Fiori_Elements/tables-c0f6592.md). -- List report applications now support the creation of insights cards from responsive tables in multiview scenarios. For more information, see [Creating Cards for the Insights Section of My Home in SAP S/4HANA Cloud](../06_SAP_Fiori_Elements/creating-cards-for-the-insights-cards-section-of-my-home-in-sap-s-4hana-9b13559.md) +- List report applications now support the creation of insights cards from responsive tables in multiview scenarios. For more information, see [Creating Cards for the Insights Section of My Home in SAP S/4HANA Cloud](../06_SAP_Fiori_Elements/creating-cards-for-the-insights-cards-section-of-my-home-in-sap-s-4hana-cloud-and-my-home-9b13559.md) - You can now hide the section title in a custom section, and sections with reuse components, using the `setAsTitleOwner` extension API . For more information, see [Placing Reuse Component Instances on the Object Page](../06_SAP_Fiori_Elements/placing-reuse-component-instances-on-the-object-page-1ba7f88.md), [Adding a Section to an Object Page](../06_SAP_Fiori_Elements/adding-a-section-to-an-object-page-a357047.md). @@ -1937,6 +1937,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-122-5d078da.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-122-5d078da.md index 1822c96c..ab6f29b8 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-122-5d078da.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-122-5d078da.md @@ -824,6 +824,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-123-9d00ac7.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-123-9d00ac7.md index 7cab4ee2..59b6e19d 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-123-9d00ac7.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-123-9d00ac7.md @@ -591,6 +591,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-124-7f77c3f.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-124-7f77c3f.md index 619d51dd..bda958fb 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-124-7f77c3f.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-124-7f77c3f.md @@ -1027,6 +1027,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-125-9d87044.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-125-9d87044.md index 857d44f0..a37cc287 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-125-9d87044.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-125-9d87044.md @@ -684,6 +684,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-126-1d98116.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-126-1d98116.md index bcc973b8..df342efe 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-126-1d98116.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-126-1d98116.md @@ -711,6 +711,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-127-e5e1317.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-127-e5e1317.md index 89461bcf..f5fa4693 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-127-e5e1317.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-127-e5e1317.md @@ -555,6 +555,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.126](what-s-new-in-sapui5-1-126-1d98116.md "With this release SAPUI5 is upgraded from version 1.125 to 1.126.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-128-1f76220.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-128-1f76220.md index 4ad5f0b1..0719465a 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-128-1f76220.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-128-1f76220.md @@ -652,6 +652,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") [What's New in SAPUI5 1.126](what-s-new-in-sapui5-1-126-1d98116.md "With this release SAPUI5 is upgraded from version 1.125 to 1.126.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-129-d22b8af.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-129-d22b8af.md index aa5de3ba..e85c7ea2 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-129-d22b8af.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-129-d22b8af.md @@ -965,3 +965,164 @@ Info Only +**Related Information** + + +[What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") + +[What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") + +[What's New in SAPUI5 1.126](what-s-new-in-sapui5-1-126-1d98116.md "With this release SAPUI5 is upgraded from version 1.125 to 1.126.") + +[What's New in SAPUI5 1.125](what-s-new-in-sapui5-1-125-9d87044.md "With this release SAPUI5 is upgraded from version 1.124 to 1.125.") + +[What's New in SAPUI5 1.124](what-s-new-in-sapui5-1-124-7f77c3f.md "With this release SAPUI5 is upgraded from version 1.123 to 1.124.") + +[What's New in SAPUI5 1.123](what-s-new-in-sapui5-1-123-9d00ac7.md "With this release SAPUI5 is upgraded from version 1.122 to 1.123.") + +[What's New in SAPUI5 1.122](what-s-new-in-sapui5-1-122-5d078da.md "With this release SAPUI5 is upgraded from version 1.121 to 1.122.") + +[What's New in SAPUI5 1.121](what-s-new-in-sapui5-1-121-91a4a2f.md "With this release SAPUI5 is upgraded from version 1.120 to 1.121.") + +[What's New in SAPUI5 1.120](what-s-new-in-sapui5-1-120-2359b63.md "With this release SAPUI5 is upgraded from version 1.119 to 1.120.") + +[What's New in SAPUI5 1.119](what-s-new-in-sapui5-1-119-0b1903a.md "With this release SAPUI5 is upgraded from version 1.118 to 1.119.") + +[What's New in SAPUI5 1.118](what-s-new-in-sapui5-1-118-3eecbde.md "With this release SAPUI5 is upgraded from version 1.117 to 1.118.") + +[What's New in SAPUI5 1.117](what-s-new-in-sapui5-1-117-029d3b4.md "With this release SAPUI5 is upgraded from version 1.116 to 1.117.") + +[What's New in SAPUI5 1.116](what-s-new-in-sapui5-1-116-ebd6f34.md "With this release SAPUI5 is upgraded from version 1.115 to 1.116.") + +[What's New in SAPUI5 1.115](what-s-new-in-sapui5-1-115-409fde8.md "With this release SAPUI5 is upgraded from version 1.114 to 1.115.") + +[What's New in SAPUI5 1.114](what-s-new-in-sapui5-1-114-890fce1.md "With this release SAPUI5 is upgraded from version 1.113 to 1.114.") + +[What's New in SAPUI5 1.113](what-s-new-in-sapui5-1-113-a9553fe.md "With this release SAPUI5 is upgraded from version 1.112 to 1.113.") + +[What's New in SAPUI5 1.112](what-s-new-in-sapui5-1-112-34afc69.md "With this release SAPUI5 is upgraded from version 1.111 to 1.112.") + +[What's New in SAPUI5 1.111](what-s-new-in-sapui5-1-111-7a67837.md "With this release SAPUI5 is upgraded from version 1.110 to 1.111.") + +[What's New in SAPUI5 1.110](what-s-new-in-sapui5-1-110-71a855c.md "With this release SAPUI5 is upgraded from version 1.109 to 1.110.") + +[What's New in SAPUI5 1.109](what-s-new-in-sapui5-1-109-3264bd2.md "With this release SAPUI5 is upgraded from version 1.108 to 1.109.") + +[What's New in SAPUI5 1.108](what-s-new-in-sapui5-1-108-66e33f0.md "With this release SAPUI5 is upgraded from version 1.107 to 1.108.") + +[What's New in SAPUI5 1.107](what-s-new-in-sapui5-1-107-d4ff916.md "With this release SAPUI5 is upgraded from version 1.106 to 1.107.") + +[What's New in SAPUI5 1.106](what-s-new-in-sapui5-1-106-5b497b0.md "With this release SAPUI5 is upgraded from version 1.105 to 1.106.") + +[What's New in SAPUI5 1.105](what-s-new-in-sapui5-1-105-4d6c00e.md "With this release SAPUI5 is upgraded from version 1.104 to 1.105.") + +[What's New in SAPUI5 1.104](what-s-new-in-sapui5-1-104-69e567c.md "With this release SAPUI5 is upgraded from version 1.103 to 1.104.") + +[What's New in SAPUI5 1.103](what-s-new-in-sapui5-1-103-0e98c76.md "With this release SAPUI5 is upgraded from version 1.102 to 1.103.") + +[What's New in SAPUI5 1.102](what-s-new-in-sapui5-1-102-f038c99.md "With this release SAPUI5 is upgraded from version 1.101 to 1.102.") + +[What's New in SAPUI5 1.101](what-s-new-in-sapui5-1-101-7733b00.md "With this release SAPUI5 is upgraded from version 1.100 to 1.101.") + +[What's New in SAPUI5 1.100](what-s-new-in-sapui5-1-100-27dec1d.md "With this release SAPUI5 is upgraded from version 1.99 to 1.100.") + +[What's New in SAPUI5 1.99](what-s-new-in-sapui5-1-99-4f35848.md "With this release SAPUI5 is upgraded from version 1.98 to 1.99.") + +[What's New in SAPUI5 1.98](what-s-new-in-sapui5-1-98-d9f16f2.md "With this release SAPUI5 is upgraded from version 1.97 to 1.98.") + +[What's New in SAPUI5 1.97](what-s-new-in-sapui5-1-97-fa0e282.md "With this release SAPUI5 is upgraded from version 1.96 to 1.97.") + +[What's New in SAPUI5 1.96](what-s-new-in-sapui5-1-96-7a9269f.md "With this release SAPUI5 is upgraded from version 1.95 to 1.96.") + +[What's New in SAPUI5 1.95](what-s-new-in-sapui5-1-95-a1aea67.md "With this release SAPUI5 is upgraded from version 1.94 to 1.95.") + +[What's New in SAPUI5 1.94](what-s-new-in-sapui5-1-94-c40f1e6.md "With this release SAPUI5 is upgraded from version 1.93 to 1.94.") + +[What's New in SAPUI5 1.93](what-s-new-in-sapui5-1-93-f273340.md "With this release SAPUI5 is upgraded from version 1.92 to 1.93.") + +[What's New in SAPUI5 1.92](what-s-new-in-sapui5-1-92-1ef345d.md "With this release SAPUI5 is upgraded from version 1.91 to 1.92.") + +[What's New in SAPUI5 1.91](what-s-new-in-sapui5-1-91-0a2bd79.md "With this release SAPUI5 is upgraded from version 1.90 to 1.91.") + +[What's New in SAPUI5 1.90](what-s-new-in-sapui5-1-90-91c10c2.md "With this release SAPUI5 is upgraded from version 1.89 to 1.90.") + +[What's New in SAPUI5 1.89](what-s-new-in-sapui5-1-89-e56cddc.md "With this release SAPUI5 is upgraded from version 1.88 to 1.89.") + +[What's New in SAPUI5 1.88](what-s-new-in-sapui5-1-88-e15a206.md "With this release SAPUI5 is upgraded from version 1.87 to 1.88.") + +[What's New in SAPUI5 1.87](what-s-new-in-sapui5-1-87-b506da7.md "With this release SAPUI5 is upgraded from version 1.86 to 1.87.") + +[What's New in SAPUI5 1.86](what-s-new-in-sapui5-1-86-4c1c959.md "With this release SAPUI5 is upgraded from version 1.85 to 1.86.") + +[What's New in SAPUI5 1.85](what-s-new-in-sapui5-1-85-1d18eb5.md "With this release SAPUI5 is upgraded from version 1.84 to 1.85.") + +[What's New in SAPUI5 1.84](what-s-new-in-sapui5-1-84-dc76640.md "With this release SAPUI5 is upgraded from version 1.82 to 1.84.") + +[What's New in SAPUI5 1.82](what-s-new-in-sapui5-1-82-3a8dd13.md "With this release SAPUI5 is upgraded from version 1.81 to 1.82.") + +[What's New in SAPUI5 1.81](what-s-new-in-sapui5-1-81-f5e2a21.md "With this release SAPUI5 is upgraded from version 1.80 to 1.81.") + +[What's New in SAPUI5 1.80](what-s-new-in-sapui5-1-80-8cee506.md "With this release SAPUI5 is upgraded from version 1.79 to 1.80.") + +[What's New in SAPUI5 1.79](what-s-new-in-sapui5-1-79-99c4cdc.md "With this release SAPUI5 is upgraded from version 1.78 to 1.79.") + +[What's New in SAPUI5 1.78](what-s-new-in-sapui5-1-78-f09b63e.md "With this release SAPUI5 is upgraded from version 1.77 to 1.78.") + +[What's New in SAPUI5 1.77](what-s-new-in-sapui5-1-77-c46b439.md "With this release SAPUI5 is upgraded from version 1.76 to 1.77.") + +[What's New in SAPUI5 1.76](what-s-new-in-sapui5-1-76-aad03b5.md "With this release SAPUI5 is upgraded from version 1.75 to 1.76.") + +[What's New in SAPUI5 1.75](what-s-new-in-sapui5-1-75-5cbb62d.md "With this release SAPUI5 is upgraded from version 1.74 to 1.75.") + +[What's New in SAPUI5 1.74](what-s-new-in-sapui5-1-74-c22208a.md "With this release SAPUI5 is upgraded from version 1.73 to 1.74.") + +[What's New in SAPUI5 1.73](what-s-new-in-sapui5-1-73-231dd13.md "With this release SAPUI5 is upgraded from version 1.72 to 1.73.") + +[What's New in SAPUI5 1.72](what-s-new-in-sapui5-1-72-521cad9.md "With this release SAPUI5 is upgraded from version 1.71 to 1.72.") + +[What's New in SAPUI5 1.71](what-s-new-in-sapui5-1-71-a93a6a3.md "With this release SAPUI5 is upgraded from version 1.70 to 1.71.") + +[What's New in SAPUI5 1.70](what-s-new-in-sapui5-1-70-f073d69.md "With this release SAPUI5 is upgraded from version 1.69 to 1.70.") + +[What's New in SAPUI5 1.69](what-s-new-in-sapui5-1-69-89a18bd.md "With this release SAPUI5 is upgraded from version 1.68 to 1.69.") + +[What's New in SAPUI5 1.68](what-s-new-in-sapui5-1-68-f94bf93.md "With this release SAPUI5 is upgraded from version 1.67 to 1.68.") + +[What's New in SAPUI5 1.67](what-s-new-in-sapui5-1-67-a6b1472.md "With this release SAPUI5 is upgraded from version 1.66 to 1.67.") + +[What's New in SAPUI5 1.66](what-s-new-in-sapui5-1-66-c9896e9.md "With this release SAPUI5 is upgraded from version 1.65 to 1.66.") + +[What's New in SAPUI5 1.65](what-s-new-in-sapui5-1-65-0f5acfd.md "With this release SAPUI5 is upgraded from version 1.64 to 1.65.") + +[What's New in SAPUI5 1.64](what-s-new-in-sapui5-1-64-0e30822.md "With this release SAPUI5 is upgraded from version 1.63 to 1.64.") + +[What's New in SAPUI5 1.63](what-s-new-in-sapui5-1-63-e8d9da7.md "With this release SAPUI5 is upgraded from version 1.62 to 1.63.") + +[What's New in SAPUI5 1.62](what-s-new-in-sapui5-1-62-771f4d5.md "With this release SAPUI5 is upgraded from version 1.61 to 1.62.") + +[What's New in SAPUI5 1.61](what-s-new-in-sapui5-1-61-d991552.md "With this release SAPUI5 is upgraded from version 1.60 to 1.61.") + +[What's New in SAPUI5 1.60](what-s-new-in-sapui5-1-60-5a0e1f7.md "With this release SAPUI5 is upgraded from version 1.58 to 1.60.") + +[What's New in SAPUI5 1.58](what-s-new-in-sapui5-1-58-7c927aa.md "With this release SAPUI5 is upgraded from version 1.56 to 1.58.") + +[What's New in SAPUI5 1.56](what-s-new-in-sapui5-1-56-108b7fd.md "With this release SAPUI5 is upgraded from version 1.54 to 1.56.") + +[What's New in SAPUI5 1.54](what-s-new-in-sapui5-1-54-c838330.md "With this release SAPUI5 is upgraded from version 1.52 to 1.54.") + +[What's New in SAPUI5 1.52](what-s-new-in-sapui5-1-52-849e1b6.md "With this release SAPUI5 is upgraded from version 1.50 to 1.52.") + +[What's New in SAPUI5 1.50](what-s-new-in-sapui5-1-50-759e9f3.md "With this release SAPUI5 is upgraded from version 1.48 to 1.50.") + +[What's New in SAPUI5 1.48](what-s-new-in-sapui5-1-48-fa1efac.md "With this release SAPUI5 is upgraded from version 1.46 to 1.48.") + +[What's New in SAPUI5 1.46](what-s-new-in-sapui5-1-46-6307539.md "With this release SAPUI5 is upgraded from version 1.44 to 1.46.") + +[What's New in SAPUI5 1.44](what-s-new-in-sapui5-1-44-a0cb7a0.md "With this release SAPUI5 is upgraded from version 1.42 to 1.44.") + +[What's New in SAPUI5 1.42](what-s-new-in-sapui5-1-42-468b05d.md "With this release SAPUI5 is upgraded from version 1.40 to 1.42.") + +[What's New in SAPUI5 1.40](what-s-new-in-sapui5-1-40-fbab50e.md "With this release SAPUI5 is upgraded from version 1.38 to 1.40.") + +[What's New in SAPUI5 1.38](what-s-new-in-sapui5-1-38-f218918.md "With this release SAPUI5 is upgraded from version 1.36 to 1.38.") + diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-130-85609d4.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-130-85609d4.md index 3384f47f..6b7dc3db 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-130-85609d4.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-130-85609d4.md @@ -1,7 +1,5 @@ - - # What's New in SAPUI5 1.130 With this release SAPUI5 is upgraded from version 1.129 to 1.130. @@ -9,9 +7,6 @@ With this release SAPUI5 is upgraded from version 1.129 to 1.130. > ### Tip: > If you want to do a search across all versions of the What's New content, you can also find it in the [SAPUI5 What's New viewer](https://help.sap.com/whats-new/67f60363b57f4ac0b23efd17fa192d60). -> ### Note: -> Content marked as **[Preview](https://help.sap.com/docs/whats-new-disclaimer)** is provided as a courtesy, without a warranty, and may be subject to change. For more information, see the [preview disclaimer](https://help.sap.com/docs/whats-new-disclaimer). - **** @@ -56,75 +51,6 @@ Available as of -Upcoming - - - - -Deleted - - - - -Announcement - - - - -**End of Cloud Provisioning for SAPUI5 Versions \(Q4/2024\)** - - - - -**End of Cloud Provisioning for SAPUI5 Versions \(Q4/2024\)** - -The following SAPUI5 versions will be removed from the SAPUI5 Content Delivery Network \(CDN\) after the end of Q4/2024. - -**Minor Versions Reaching Their End of Cloud Provisioning** - -The following versions including all patches will be removed entirely: - -- 1.114 -- 1.117 -- 1.118 -- 1.119 - -**Action**: Upgrade to a version that is still in maintenance. - -**Patch Versions Reaching Their End of Cloud Provisioning** - -The following patches will be removed: - -- Long-term maintenance versions: - - - 1.71.59 to 1.71.60 - - 1.84.37 to 1.84.39 - - 1.96.25 to 1.96.26 - - 1.108.23 to 1.108.25 - - 1.120.0 to 1.120.2 - - **Action**: Upgrade to the latest available patch for the respective SAPUI5 version. - - -For more information, see [Version Overview](https://ui5.sap.com/versionoverview.html). - -**[Preview](https://help.sap.com/docs/whats-new-disclaimer)**•Deleted•Announcement•Info Only•Upcoming - - - - -Info Only - - - - -9999-01-01 - - - - - - 1.130 diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-131-7d24d94.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-131-7d24d94.md new file mode 100644 index 00000000..06516f60 --- /dev/null +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-131-7d24d94.md @@ -0,0 +1,887 @@ + + + + +# What's New in SAPUI5 1.131 + +With this release SAPUI5 is upgraded from version 1.130 to 1.131. + +> ### Tip: +> If you want to do a search across all versions of the What's New content, you can also find it in the [SAPUI5 What's New viewer](https://help.sap.com/whats-new/67f60363b57f4ac0b23efd17fa192d60). + +> ### Note: +> Content marked as **[Preview](https://help.sap.com/docs/whats-new-disclaimer)** is provided as a courtesy, without a warranty, and may be subject to change. For more information, see the [preview disclaimer](https://help.sap.com/docs/whats-new-disclaimer). + +**** + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +Version + + + +Type + + + +Category + + + +Title + + + +Description + + + +Action + + + +Available as of + +
+ +Upcoming + + + +Deleted + + + +Announcement + + + +**End of Cloud Provisioning for SAPUI5 Versions \(Q4/2024\)** + + + +**End of Cloud Provisioning for SAPUI5 Versions \(Q4/2024\)** + +The following SAPUI5 versions will be removed from the SAPUI5 Content Delivery Network \(CDN\) after the end of Q4/2024. + +**Minor Versions Reaching Their End of Cloud Provisioning** + +The following versions including all patches will be removed entirely: + +- 1.114 +- 1.117 +- 1.118 +- 1.119 + +**Action**: Upgrade to a version that is still in maintenance. + +**Patch Versions Reaching Their End of Cloud Provisioning** + +The following patches will be removed: + +- Long-term maintenance versions: + + - 1.71.59 to 1.71.60 + - 1.84.37 to 1.84.39 + - 1.96.25 to 1.96.26 + - 1.108.23 to 1.108.25 + - 1.120.0 to 1.120.2 + + **Action**: Upgrade to the latest available patch for the respective SAPUI5 version. + + +For more information, see [Version Overview](https://ui5.sap.com/versionoverview.html). + +**[Preview](https://help.sap.com/docs/whats-new-disclaimer)**•Deleted•Announcement•Info Only•Upcoming + + + +Info Only + + + +9999-01-01 + +
+ +1.131 + + + +Deprecated + + + +Feature + + + +**Deprecations** + + + +**Deprecations** + +There are currently no major deprecations. For a complete list of all deprecations, see [Deprecated APIs](https://ui5.sap.com/#/api/deprecated). + +Deprecated•Feature•Info Only•1.131 + + + +Info Only + + + +2024-11-28 + +
+ +1.131 + + + +Changed + + + +Control + + + +**`sap.ui.mdc.Table`** + + + +**`sap.ui.mdc.Table`** + +- To collapse/expand either an entire node or an entire tree in tables with `TreeTableType`, we have introduced a `MenuButton`. For each functionality, the related function must be implemented in the configuration object of `TableDelegate`. For OData V4, we have already implemented this as a default functionality. For more information, see the [API Reference](https://ui5.sap.com/#/api/module:sap/ui/mdc/TableDelegate%23methods/sap/ui/mdc/TableDelegate.fetchExpandAndCollapseConfiguration). + +- We have enabled sticky group headers by default for tables with `ResponsiveTableType`. Group headers now remain in a fixed position at the top of the page during vertical scrolling. For more information, see the [Sample](https://ui5.sap.com/#/entity/sap.ui.mdc.Table/sample/sap.ui.mdc.demokit.sample.table.TableJson). + +Changed•Control•Info Only•1.131 + + + +Info Only + + + +2024-11-28 + +
+ +1.131 + + + +Changed + + + +Control + + + +**`sap.m.List`, `sap.m.Table`, `sap.m.Tree`, `sap.ui.mdc.Table,` `sap.ui.table.AnalyticalTable`, `sap.ui.table.Table`, `sap.ui.table.TreeTable` ** + + + +**`sap.m.List`, `sap.m.Table`, `sap.m.Tree`, `sap.ui.mdc.Table,` `sap.ui.table.AnalyticalTable`, `sap.ui.table.Table`, `sap.ui.table.TreeTable` ** + +We now also support the `Indication09` and `Indication10` color values for row highlights. Due to the accessibility contrast requirements, only values of `Indication01` to `Indication10` are supported. For more information, see the [API Reference](https://ui5.sap.com/#/api/sap.ui.table.RowSettings%23methods/getHighlight). + +Changed•Control•Info Only•1.131 + + + +Info Only + + + +2024-11-28 + +
+ +1.131 + + + +Changed + + + +SAP Fiori Elements + + + +**SAP Fiori Elements for OData V2** + + + +**SAP Fiori Elements for OData V2** + +The following changes and new features are available for SAP Fiori elements for OData V2: + +- We now save the information about the resized columns in the flexible column layout in the personalization settings. For more information, see [Enabling the Flexible Column Layout](../06_SAP_Fiori_Elements/enabling-the-flexible-column-layout-e762257.md). + +- We now ensure that applications properly handle and respond to 503 error messages caused by a temporary server downtime. + + +Changed•SAP Fiori Elements•Info Only•1.131 + + + +Info Only + + + +2024-11-28 + +
+ +1.131 + + + +Changed + + + +SAP Fiori Elements + + + +**SAP Fiori Elements for OData V2 and SAP Fiori Elements for OData V4** + + + +**SAP Fiori Elements for OData V2 and SAP Fiori Elements for OData V4** + +The following changes and new features are available for SAP Fiori elements for OData V2 and SAP Fiori elements for OData V4: + +- We now provide a `scrollThreshold` parameter that allows you to optimize data loading during scrolling in grid tables, analytical tables, and tree tables. For more information, see [Tables](../06_SAP_Fiori_Elements/tables-c0f6592.md). + + +Changed•SAP Fiori Elements•Info Only•1.131 + + + +Info Only + + + +2024-11-28 + +
+ +1.131 + + + +New + + + +Feature + + + +**Enabling Controls for SAPUI5 Flexibility** + + + +**Enabling Controls for SAPUI5 Flexibility** + +If you develop your own controls, you can now enable them for SAPUI5 flexibility. This allows you to offer personalization or key user adaptation to your users. They can use these features even when working with your custom controls. + +For more information, see [Enabling Controls for SAPUI5 Flexibility](../09_Developing_Controls/enabling-controls-for-sapui5-flexibility-46b2d74.md). + +New•Feature•Info Only•1.131 + + + +Info Only + + + +2024-11-28 + +
+ +1.131 + + + +Changed + + + +Feature + + + +**SAPUI5 Formatter** + + + +**SAPUI5 Formatter** + +When using the currency instance of `sap.ui.core.format.NumberFormat` with the `style` format option set to `short` or `long`, the number of decimals provided with custom currencies or defined in the Unicode Common Locale Data Repository is not applied for formatting. + +Changed•Feature•Info Only•1.131 + + + +Info Only + + + +2024-11-28 + +
+ +1.131 + + + +Changed + + + +Feature + + + +**`sap.ui.model.sorter`** + + + +**`sap.ui.model.sorter`** + +We have provided getters for the binding path and the sorting order parameter of `sap.ui.model.sorter`. + +Changed•Feature•Info Only•1.131 + + + +Info Only + + + +2024-11-28 + +
+ +1.131 + + + +Changed + + + +Feature + + + +**SAPUI5 OData V4 Model** + + + +**SAPUI5 OData V4 Model** + +The new version of the SAPUI5 OData V4 model introduces the following features: + +- You can now modify the annotations of a separate value help service using local annotation files. For more information, see [Value Lists](../04_Essentials/value-lists-ab267a6.md). + +- We have provided the experimental `separateReceived` event at the `sap.ui.model.odata.v4.ODataListBinding` for columns loaded separately using the experimental `$$separate` binding parameter introduced with SAPUI5 1.129. + + +Changed•Feature•Info Only•1.131 + + + +Info Only + + + +2024-11-28 + +
+ +1.131 + + + +Changed + + + +Feature + + + +**Improved Focus Handling in SAPUI5** + + + +**Improved Focus Handling in SAPUI5** + +Whenever a UI5 element loses focus due to becoming disabled, invisible, or destroyed, the focus now automatically shifts to the next logical element, ensuring improved navigation and accessibility. Control developers can customize this behavior by overriding the default `onfocusfail` handler to meet specific control requirements. + +For more information, see the [API Reference](https://ui5.sap.com/#/api/sap.ui.core.Element%23methods/onfocusfail). + +Changed•Feature•Info Only•1.131 + + + +Info Only + + + +2024-11-28 + +
+ +1.131 + + + +Changed + + + +Control + + + +**`sap.ui.comp.smartmultiedit.Container`** + + + +**`sap.ui.comp.smartmultiedit.Container`** + +We now support the `DateTimeWithTimezone` data type for fields within smart multi-edit containers. Date and time, along with time zone, can now be modified for fields in the smart multi-edit container. + +For more information, see the [API Reference](https://ui5.sap.com/#/api/sap.ui.comp.smartmultiedit.Container) and the [Sample](https://ui5.sap.com/#/entity/sap.ui.comp.smartmultiedit.Container/sample/sap.ui.comp.sample.smartmultiedit). + +Changed•Control•Info Only•1.131 + + + +Info Only + + + +2024-11-28 + +
+ +1.131 + + + +Changed + + + +Control + + + +**`sap.ui.comp.smartfilterbar.SmartFilterBar`** + + + +**`sap.ui.comp.smartfilterbar.SmartFilterBar`** + +- You can now set default values for semantic options in dynamic date range filters. You can manage this in the smart filter bar `ControlConfiguration`, where you can adjust the default value for this operation. For more information, see the [API Reference](https://ui5.sap.com/#/api/sap.ui.comp.smartfilterbar.SmartFilterBar) and the [Sample](https://ui5.sap.com/#/entity/sap.ui.comp.smartfilterbar.SmartFilterBar/sample/sap.ui.comp.sample.smartfilterbar.UseDateRangeType). + +- The basic search feature is now limited to 1000 characters, including spaces, to improve performance. If the input exceeds this limit, a `valueState` error appears, and the search isn't triggered. This restriction applies to both standalone smart filter bar and smart filter bar within a value help dialog. For more information, see the [API Reference](https://ui5.sap.com/#/api/sap.ui.comp.smartfilterbar.SmartFilterBar%23controlProperties) and the [Sample](https://ui5.sap.com/#/entity/sap.ui.comp.smartfilterbar.SmartFilterBar/sample/sap.ui.comp.sample.smartfilterbar.Basic). + +Changed•Control•Info Only•1.131 + + + +Info Only + + + +2024-11-28 + +
+ +1.131 + + + +Changed + + + +Control + + + +**`sap.m.Combobox`** + + + +**`sap.m.Combobox`** + +The down-arrow navigation has been updated to align with the specifications and the ARIA standard. Now, if there is a selection made through the type-ahead \(autocomplete\) functionality, pressing the [Down Arrow\] key moves the focus to the next available item in the dropdown menu. + +Changed•Control•Info Only•1.131 + + + +Info Only + + + +2024-11-28 + +
+ +1.131 + + + +Changed + + + +Control + + + +**`sap.m.IconTabBar`** + + + +**`sap.m.IconTabBar`** + +We have made some visual improvements when the `headerBackgroundDesign` is set to `Transparent`. Now, the control won't show any unnecessary borders or shadows, and looks better when used in content with a transparent design. For more information, see the [API Reference](https://ui5.sap.com/#/api/sap.m.IconTabBar). + +Changed•Control•Info Only•1.131 + + + +Info Only + + + +2024-11-28 + +
+ +1.131 + + + +Changed + + + +Control + + + +**`sap.m.MaskInput`** + + + +**`sap.m.MaskInput`** + +We have introduced a new `submit` event that fires when users press [Enter\] and submit a value. The event is fired only when the control is `enabled` and `editable`, regardless of whether there's a change in the submitted value. For more information, see the [API Reference](https://ui5.sap.com/#/api/sap.m.MaskInput). + +Changed•Control•Info Only•1.131 + + + +Info Only + + + +2024-11-28 + +
+ +1.131 + + + +Changed + + + +Control + + + +**`sap.m.Menu`** + + + +**`sap.m.Menu`** + +We have introduced a new `beforeClose` event, fired when the menu is closed. For more information, see the [API Reference](https://ui5.sap.com/#/api/sap.m.Menu). + +Changed•Control•Info Only•1.131 + + + +Info Only + + + +2024-11-28 + +
+ +1.131 + + + +Changed + + + +Control + + + +**`sap.m.Popover`** + + + +**`sap.m.Popover`** + +Users can now resize the control in all directions, depending on the position of the opener. For more information, see the [Sample](https://ui5.sap.com/#/entity/sap.m.Popover/sample/sap.m.sample.Popover). + +Changed•Control•Info Only•1.131 + + + +Info Only + + + +2024-11-28 + +
+ +1.131 + + + +Changed + + + +Control + + + +**`sap.ui.integration.widgets.Card`** + + + +**`sap.ui.integration.widgets.Card`** + +You can now set actions in the card header to be placed as nested items in a menu. This feature allows you to group multiple actions. For more information, see the [Custom Actions](https://ui5.sap.com/test-resources/sap/ui/integration/demokit/cardExplorer/webapp/index.html#/explore/extension/customActions) and the [Host Actions](https://ui5.sap.com/test-resources/sap/ui/integration/demokit/cardExplorer/webapp/index.html#/explore/hostActions) samples. + +Changed•Control•Info Only•1.131 + + + +Info Only + + + +2024-11-28 + +
+ diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-38-f218918.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-38-f218918.md index 6bf9a8d2..e516f23f 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-38-f218918.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-38-f218918.md @@ -2192,6 +2192,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-40-fbab50e.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-40-fbab50e.md index 36818de6..d99c1bd8 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-40-fbab50e.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-40-fbab50e.md @@ -1136,6 +1136,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-42-468b05d.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-42-468b05d.md index 86eaeae6..8be65dfa 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-42-468b05d.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-42-468b05d.md @@ -1602,6 +1602,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-44-a0cb7a0.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-44-a0cb7a0.md index e6b22995..2bc191a4 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-44-a0cb7a0.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-44-a0cb7a0.md @@ -1262,6 +1262,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-46-6307539.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-46-6307539.md index 935390a2..a30185ee 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-46-6307539.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-46-6307539.md @@ -1715,6 +1715,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-48-fa1efac.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-48-fa1efac.md index 92a838a5..7adb0fcc 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-48-fa1efac.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-48-fa1efac.md @@ -1961,6 +1961,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-50-759e9f3.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-50-759e9f3.md index 2098b31f..1712ba13 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-50-759e9f3.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-50-759e9f3.md @@ -1581,6 +1581,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-52-849e1b6.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-52-849e1b6.md index 5efd3ed3..f9882259 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-52-849e1b6.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-52-849e1b6.md @@ -1620,8 +1620,6 @@ Check out the following new and updated documentation topics: - [Test Automation](../04_Essentials/test-automation-ae44824.md#loioae448243822448d8ba04b4784f4b09a0) that describes the setup for automated testing with *Karma* -- [Continuous Integration: Ensure Code Quality](../05_Developing_Apps/continuous-integration-ensure-code-quality-fe7a158.md) - - [Performance: Speed Up Your App](../05_Developing_Apps/performance-speed-up-your-app-408b40e.md) @@ -1942,6 +1940,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-54-c838330.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-54-c838330.md index fb99a84a..0836201c 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-54-c838330.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-54-c838330.md @@ -2151,6 +2151,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-56-108b7fd.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-56-108b7fd.md index d99d8782..db08a354 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-56-108b7fd.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-56-108b7fd.md @@ -1680,6 +1680,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-58-7c927aa.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-58-7c927aa.md index 3d3f7fb4..0d00969c 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-58-7c927aa.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-58-7c927aa.md @@ -1762,6 +1762,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-60-5a0e1f7.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-60-5a0e1f7.md index d230a3da..b669c802 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-60-5a0e1f7.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-60-5a0e1f7.md @@ -1584,6 +1584,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-61-d991552.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-61-d991552.md index 35feef89..071aecba 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-61-d991552.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-61-d991552.md @@ -938,6 +938,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-62-771f4d5.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-62-771f4d5.md index 27c7f71f..41481231 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-62-771f4d5.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-62-771f4d5.md @@ -868,6 +868,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-63-e8d9da7.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-63-e8d9da7.md index 166d0a24..7e63e2b3 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-63-e8d9da7.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-63-e8d9da7.md @@ -810,6 +810,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-64-0e30822.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-64-0e30822.md index b5b9b899..f213222e 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-64-0e30822.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-64-0e30822.md @@ -865,6 +865,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-65-0f5acfd.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-65-0f5acfd.md index 6139f5c7..9382b905 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-65-0f5acfd.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-65-0f5acfd.md @@ -857,6 +857,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-66-c9896e9.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-66-c9896e9.md index 9505df67..028c393e 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-66-c9896e9.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-66-c9896e9.md @@ -723,6 +723,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-67-a6b1472.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-67-a6b1472.md index d9ddda23..3653b4f4 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-67-a6b1472.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-67-a6b1472.md @@ -543,6 +543,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-68-f94bf93.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-68-f94bf93.md index c407f99d..14d82634 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-68-f94bf93.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-68-f94bf93.md @@ -630,6 +630,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-69-89a18bd.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-69-89a18bd.md index 425dcb1b..ed3d7591 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-69-89a18bd.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-69-89a18bd.md @@ -837,6 +837,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-70-f073d69.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-70-f073d69.md index e9fbe446..6cbe6942 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-70-f073d69.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-70-f073d69.md @@ -651,6 +651,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-71-a93a6a3.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-71-a93a6a3.md index 1312b56b..532681f5 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-71-a93a6a3.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-71-a93a6a3.md @@ -1042,6 +1042,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-72-521cad9.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-72-521cad9.md index 69773f0f..a8d7c884 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-72-521cad9.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-72-521cad9.md @@ -1019,6 +1019,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-73-231dd13.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-73-231dd13.md index cbfcb6b1..845a060b 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-73-231dd13.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-73-231dd13.md @@ -1049,6 +1049,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-74-c22208a.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-74-c22208a.md index a1567b4f..2f458120 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-74-c22208a.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-74-c22208a.md @@ -1269,6 +1269,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-75-5cbb62d.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-75-5cbb62d.md index b3120fe1..1616a5a8 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-75-5cbb62d.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-75-5cbb62d.md @@ -849,6 +849,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-76-aad03b5.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-76-aad03b5.md index c0b97dee..7d169fcf 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-76-aad03b5.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-76-aad03b5.md @@ -907,6 +907,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-77-c46b439.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-77-c46b439.md index fbdda1d3..c7ee9c01 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-77-c46b439.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-77-c46b439.md @@ -893,6 +893,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-78-f09b63e.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-78-f09b63e.md index 14623965..e8db4d82 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-78-f09b63e.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-78-f09b63e.md @@ -707,6 +707,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-79-99c4cdc.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-79-99c4cdc.md index 7801e870..3b423642 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-79-99c4cdc.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-79-99c4cdc.md @@ -572,6 +572,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-80-8cee506.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-80-8cee506.md index bdf3bd3a..52ddc2db 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-80-8cee506.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-80-8cee506.md @@ -504,6 +504,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-81-f5e2a21.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-81-f5e2a21.md index 9ad25cf6..f3779a00 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-81-f5e2a21.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-81-f5e2a21.md @@ -849,6 +849,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-82-3a8dd13.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-82-3a8dd13.md index 40f8fcb0..234f5b95 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-82-3a8dd13.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-82-3a8dd13.md @@ -519,6 +519,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-84-dc76640.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-84-dc76640.md index 2134d973..14db3337 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-84-dc76640.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-84-dc76640.md @@ -1117,6 +1117,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-85-1d18eb5.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-85-1d18eb5.md index 27518134..360ebbee 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-85-1d18eb5.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-85-1d18eb5.md @@ -610,6 +610,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-86-4c1c959.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-86-4c1c959.md index 3ded6424..8dc58ac2 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-86-4c1c959.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-86-4c1c959.md @@ -924,6 +924,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-87-b506da7.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-87-b506da7.md index ce4fa02f..a3cd8641 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-87-b506da7.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-87-b506da7.md @@ -1056,6 +1056,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-88-e15a206.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-88-e15a206.md index 6a0688fb..aa9196f7 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-88-e15a206.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-88-e15a206.md @@ -970,6 +970,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-89-e56cddc.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-89-e56cddc.md index cd435e74..c56571dd 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-89-e56cddc.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-89-e56cddc.md @@ -688,6 +688,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-90-91c10c2.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-90-91c10c2.md index 5ef96856..4a3e4e40 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-90-91c10c2.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-90-91c10c2.md @@ -840,6 +840,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-91-0a2bd79.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-91-0a2bd79.md index 09addc52..e2afa5a3 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-91-0a2bd79.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-91-0a2bd79.md @@ -493,6 +493,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-92-1ef345d.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-92-1ef345d.md index 4d640209..8dd9752e 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-92-1ef345d.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-92-1ef345d.md @@ -633,6 +633,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-93-f273340.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-93-f273340.md index 092d0d05..569ec6c6 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-93-f273340.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-93-f273340.md @@ -766,6 +766,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-94-c40f1e6.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-94-c40f1e6.md index f3aa02ad..bb9b78b1 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-94-c40f1e6.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-94-c40f1e6.md @@ -570,6 +570,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-95-a1aea67.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-95-a1aea67.md index 3f92b158..29baecda 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-95-a1aea67.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-95-a1aea67.md @@ -480,6 +480,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-96-7a9269f.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-96-7a9269f.md index c54f3b98..dda61629 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-96-7a9269f.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-96-7a9269f.md @@ -741,6 +741,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-97-fa0e282.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-97-fa0e282.md index 7353b91f..608d1d3e 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-97-fa0e282.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-97-fa0e282.md @@ -792,6 +792,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-98-d9f16f2.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-98-d9f16f2.md index 8c30c656..54fd9370 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-98-d9f16f2.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-98-d9f16f2.md @@ -1074,6 +1074,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/01_Whats-New/what-s-new-in-sapui5-1-99-4f35848.md b/docs/01_Whats-New/what-s-new-in-sapui5-1-99-4f35848.md index 7aa47627..51f87b1c 100644 --- a/docs/01_Whats-New/what-s-new-in-sapui5-1-99-4f35848.md +++ b/docs/01_Whats-New/what-s-new-in-sapui5-1-99-4f35848.md @@ -580,6 +580,8 @@ Info Only **Related Information** +[What's New in SAPUI5 1.129](what-s-new-in-sapui5-1-129-d22b8af.md "With this release SAPUI5 is upgraded from version 1.128 to 1.129.") + [What's New in SAPUI5 1.128](what-s-new-in-sapui5-1-128-1f76220.md "With this release SAPUI5 is upgraded from version 1.127 to 1.128.") [What's New in SAPUI5 1.127](what-s-new-in-sapui5-1-127-e5e1317.md "With this release SAPUI5 is upgraded from version 1.126 to 1.127.") diff --git a/docs/02_Read-Me-First/the-ui5-ecosystem-b72ccb5.md b/docs/02_Read-Me-First/the-ui5-ecosystem-b72ccb5.md index 65d24c8d..a2f354f9 100644 --- a/docs/02_Read-Me-First/the-ui5-ecosystem-b72ccb5.md +++ b/docs/02_Read-Me-First/the-ui5-ecosystem-b72ccb5.md @@ -26,6 +26,31 @@ UI5 Tooling is a state-of-the-art way to develop SAPUI5 projects by consuming SA - [UI5 Tooling on GitHub](https://sap.github.io/ui5-tooling/) + + + + +## UI5 Linter + + + +UI5 linter is a static code analysis tool for SAPUI5 projects. It checks JavaScript, TypeScript, XML, JSON, and other files in your project and reports findings. + +UI5 linter scans your SAPUI5 project and detects issues that can prevent the project from running smoothly with SAPUI5 2.x. + +- Usage of deprecated SAPUI5 libraries +- Usage of deprecated SAPUI5 framework APIs +- Usage of global variables +- Possible CSP violations +- Deprecated component and manifest configurations +- and many more + + + +### Further Information + +- [UI5 linter on GitHub](https://github.com/SAP/ui5-linter) + diff --git a/docs/03_Get-Started/best-practices-for-developers-28fcd55.md b/docs/03_Get-Started/best-practices-for-developers-28fcd55.md index 33f76be9..cd67882e 100644 --- a/docs/03_Get-Started/best-practices-for-developers-28fcd55.md +++ b/docs/03_Get-Started/best-practices-for-developers-28fcd55.md @@ -25,6 +25,12 @@ Therefore, it's important that you keep applying best practices. To help you, we +### Supporting Tool - UI5 Linter + +[UI5 linter](https://github.com/SAP/ui5-linter) is a command-line tool to identify legacy code in your SAPUI5 project. It checks JavaScript, TypeScript, XML, JSON, and other files in your project and reports findings if legacy code is used. UI5 linter is our state-of-the-art tool to get and keep your SAPUI5 project legacy-free. + + + ### Goals The main objectives when migrating existing code or keeping it up to date with framework best practices are: @@ -90,76 +96,6 @@ Using the native web API `XMLHttpRequest#open` with `false` as the third argumen - Add only valid module IDs from the API Reference \(documented as Module: .../.../...\) to the dependency list. - - - - - - - - - -
- - Not Optimized - - - - Improved - -
- - ```js - sap.ui.define([ - "sap/m/SortOrder", // Outdated pseudo module - "sap/ui/model/FilterType", // standalone module - "sap/ui/layout" // target use: SimpleForm - ], (SortOrder, FilterType, sapUiLayoutLib) => { - "use strict" - var SimpleForm = sapUiLayoutLib.form.SimpleForm; // access to Control via globals - - // ... - - // access to Control via globals - sap.m.MessageBox.show(/*...*/); - - // ... - - }); - ``` - - - - - - ```js - sap.ui.define([ - "sap/m/library", // "SortOrder" is contained in the sap/m/library.js module - "sap/ui/model/FilterType", // remains the same - "sap/ui/layout/form/SimpleForm" // imported as a module, no access to globals needed - ], (sapMLib, FilterType, SimpleForm) => { - "use strict"; - const { SortOrder } = sapMLib; - - // ... - - // lazily require the sap/m/MessageBox on demand - sap.ui.require([ - "sap/m/MessageBox" - ], (MessageBox) => { - MessageBox.show(/*...*/); - }); - - // ... - - }); - ``` - - - -
- - For more information, see [Best Practices for Loading Modules](../04_Essentials/best-practices-for-loading-modules-00737d6.md). **Third-Party Libraries** @@ -170,10 +106,6 @@ When requiring third-party libraries that export global names and support AMD at Identify and resolve cyclic dependencies with the help of the SAPUI5 configuration parameter `sap-ui-xx-debug-module-loading=true`. Identified modules are logged in the browser console \([F12\]\) with the message '**cycle detected**'. Ensure that the console shows all levels of logs incl. "Verbose" ones to see this message. -**Additional Information:** - -- [Deprecated and Experimental Configuration Options](../04_Essentials/deprecated-and-experimental-configuration-options-b474a71.md) -
@@ -432,6 +364,7 @@ Prevent bundling modules \(`library-preload.js`\) into strings. - If tests create implementations of such entities, they must be implemented in a way that a module lookup can find them: either as individual files or as embedded and named `sap.ui.define` statements. - As modules can only be loaded and executed once, each test implementation must have a unique module name. The same name cannot be used multiple times as was the case with globals. -- Transform existing QUnit tests that are based on the outdated QUnit 1 version to using QUnit 2, i.e. `qunit-2.js` and `qunit-2.css`. Make sure to load QUnit only once when initiating QUnit tests. +- Migrate an existing QUnit and OPA test setup to the [Test Starter](../04_Essentials/test-starter-032be2c.md) concept. +- Transform existing QUnit tests that are based on the outdated QUnit 1 version to using QUnit 2. - Do not rely on the outdated Blanket.js \(`qunit-coverage.js`\) anymore. As of SAPUI5 1.113, code coverage measurement via IstanbulJS \(`qunit-coverage-istanbul.js`\) is the recommended option. For more information, see [Code Coverage Measurement](../04_Essentials/code-coverage-measurement-7ef3242.md). diff --git a/docs/03_Get-Started/make-your-app-csp-compliant-1f81a09.md b/docs/03_Get-Started/make-your-app-csp-compliant-1f81a09.md index 71fdc067..5cf25372 100644 --- a/docs/03_Get-Started/make-your-app-csp-compliant-1f81a09.md +++ b/docs/03_Get-Started/make-your-app-csp-compliant-1f81a09.md @@ -19,7 +19,6 @@ Don't use directly executable code in your HTML files, because this makes them v diff --git a/docs/03_Get-Started/performance-checklist-9c6400e.md b/docs/03_Get-Started/performance-checklist-9c6400e.md index 5991678f..296f2939 100644 --- a/docs/03_Get-Started/performance-checklist-9c6400e.md +++ b/docs/03_Get-Started/performance-checklist-9c6400e.md @@ -8,7 +8,7 @@ In addition to applying best practices, always stay up to date with the framewor 1. [Use the UI5 Support Assistant to Check for Known Issues](../04_Essentials/support-assistant-57ccd7d.md) 2. [Enable Asynchronous Loading in the Bootstrap](use-asynchronous-loading-676b636.md#loio676b636446c94eada183b1218a824717__section_EALB) -3. [Make Use of the `sap.ui.core.IAsyncContentCreation` Interface](use-asynchronous-loading-676b636.md#loio676b636446c94eada183b1218a824717__section_AsyncInterface)or [Ensure the Root View and Routing are Configured to Load Targets Asynchronously](use-asynchronous-loading-676b636.md#loio676b636446c94eada183b1218a824717__section_RootViewRoutingConfiguration) +3. [Make Use of the `sap.ui.core.IAsyncContentCreation` Interface](use-asynchronous-loading-676b636.md#loio676b636446c94eada183b1218a824717__section_AsyncInterface) or [Ensure the Root View and Routing are Configured to Load Targets Asynchronously](use-asynchronous-loading-676b636.md#loio676b636446c94eada183b1218a824717__section_RootViewRoutingConfiguration) 4. [Make Use of Asynchronous Module Loading \(AMD Style\)](use-asynchronous-loading-676b636.md#loio676b636446c94eada183b1218a824717__section_AsyncModuleLoading) 5. [Use `manifest.json` instead of the Bootstrap to define Dependencies](../05_Developing_Apps/performance-speed-up-your-app-408b40e.md#loio408b40efed3c416681e1bd8cdd8910d4__section_ManifestJson) 6. [Load SAPUI5 from the Content Delivery Network \(CDN\)](../05_Developing_Apps/performance-speed-up-your-app-408b40e.md#loio408b40efed3c416681e1bd8cdd8910d4__section_LoadFromCDN) diff --git a/docs/03_Get-Started/prerequisites-0e84ac7.md b/docs/03_Get-Started/prerequisites-0e84ac7.md index 0396e463..f87143ea 100644 --- a/docs/03_Get-Started/prerequisites-0e84ac7.md +++ b/docs/03_Get-Started/prerequisites-0e84ac7.md @@ -77,13 +77,12 @@ Open a terminal and install UI5 Tooling globally on your machine by executing th diff --git a/docs/03_Get-Started/step-1-3d-viewer-with-single-file-loading-0e21912.md b/docs/03_Get-Started/step-1-3d-viewer-with-single-file-loading-0e21912.md index 45337183..b82ce7c8 100644 --- a/docs/03_Get-Started/step-1-3d-viewer-with-single-file-loading-0e21912.md +++ b/docs/03_Get-Started/step-1-3d-viewer-with-single-file-loading-0e21912.md @@ -73,8 +73,10 @@ You can view and download all files at [3D Viewer - Step 1 - 3D Viewer With Sing - - - - - - - + > - -
-
+ +
+
``` -The so-called QUnit test suite is an HTML page that triggers all QUnit tests for the application. Most of it is generating the layout of the result page that you can see in the preview and we won’t further explain these parts but focus on the application parts instead. -Let’s start with the namespaces. Since we are now in the `webapp/test/unit` folder, we actually need to go up two levels to get the `webapp` folder again. This namespace can be used inside the tests to load and trigger application functionality. -First, we load some basic QUnit functionality via script tags. Other QUnit tests can be added here as well. Then the HTML page loads another script called `unitTests.qunit.js`, which we will create next. This script will execute our formatter. +
+## webapp/test/testsuite.qunit.js \(New\) +The `testsuite.qunit.js` file contains the configuration for our test suite. Although it comes with a set of defaults, we recommend specifying the used QUnit version to prevent potential future updates from breaking our tests. - +Additionally, the `sap_horizon` theme is configured in the `ui5` section, where you can provide the UI5 runtime configuration. -## webapp/test/unit/unitTests.qunit.js \(New\) +The test suite serves as the entry point for all tests within our project such as the previously created `unit/unitTests` \(The `.qunit.js` extension is omitted and will be added automatically during runtime\). The previously created generic `Test.qunit.html` file is referenced as the test `page` and configured with query parameters so that individual tests can be run. The placeholders `{suite}` and `{name}` are replaced with the suite and test names respectively. For more information, see [Concept and Basic Setup](../04_Essentials/concept-and-basic-setup-22f50c0.md). ```js -QUnit.config.autostart = false; - -sap.ui.require(["sap/ui/core/Core"], async(Core) => { - "use strict"; - await Core.ready(); - sap.ui.require([ - "ui5/walkthrough/test/unit/model/formatter" - ], () => { - QUnit.start(); - }); +sap.ui.define(() => { + "use strict"; + return { + name: "QUnit test suite for UI5 Walkthrough", + defaults: { + page: "ui5://test-resources/ui5/walkthrough/Test.qunit.html?testsuite={suite}&test={name}", + qunit: { + version: 2 + }, + ui5: { + theme: "sap_horizon" + }, + loader: { + paths: { + "ui5/walkthrough": "../" + } + } + }, + tests: { + "unit/unitTests": { + title: "UI5 Walkthrough - Unit Tests" + } + } + }; }); ``` -This script loads and executes our formatter. If we now open the `webapp/test/unit/unitTests.qunit.html` file in the browser, we should see our test running and verifying the formatter logic. + + + + +## webapp/test/testsuite.qunit.html \(New\) + +We also create a corresponding `testsuite.qunit.html` in the same folder. This is the page we will open in the browser to see a list of all our tests and run them by clicking on the test name. + +It registers a resource root mapping for the test resources of our project and references the `testsuite.qunit` module we created in the previous step. + +```html + + + + + + + + + +``` + +If we now open the `webapp/test/testsuite.qunit.html` file in the browser and select `unit/unitTests`, we should see our test running and verifying the formatter logic. @@ -154,9 +208,9 @@ This script loads and executes our formatter. If we now open the `webapp/test/un - All unit tests are placed in the webapp/test/unit folder of the app. -- Files in the test suite end with `*.qunit.html`. +- The default naming convention for the test suite is `testsuite.qunit.html` and `testsuite.qunit.js`. When adding additional test suites, the naming must follow the pattern`testsuite..qunit.html`/`testsuite..qunit.js`. -- The `unitTests.qunit.html` file triggers all unit tests of the app. +- Test files referenced in the test suite end with `.qunit.js`. - A unit test should be written for formatters, controller logic, and other individual functionality. @@ -172,3 +226,5 @@ This script loads and executes our formatter. If we now open the `webapp/test/un [Testing Tutorial](testing-tutorial-291c912.md "In this tutorial we will test application functionality with the testing tools that are delivered with SAPUI5. At different steps of this tutorial you will write tests using QUnit, OPA5, and the OData V2 mock server. Additionally, you will learn about testing strategies, Test Driven Development (TDD), and much more.") +[Test Starter](../04_Essentials/test-starter-032be2c.md "The test starter is a concept intended to simplify the test setup for SAPUI5 applications and libraries by orchestrating your QUnit and OPA5 tests.") + diff --git a/docs/03_Get-Started/step-27-unit-test-with-qunit-typescript-750c8c1.md b/docs/03_Get-Started/step-27-unit-test-with-qunit-typescript-750c8c1.md index eb4cef03..31e6ca62 100644 --- a/docs/03_Get-Started/step-27-unit-test-with-qunit-typescript-750c8c1.md +++ b/docs/03_Get-Started/step-27-unit-test-with-qunit-typescript-750c8c1.md @@ -43,10 +43,13 @@ The new formatter file just contains one QUnit module for our formatter function 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. -```js +> ### Note: +> The test code should import the modules under test \(i.e. the productive code\) using their full namespace \(in our case `ui5/walkthrough/`\). Avoid using relative paths because the test code uses a different namespace \(`test-resources/ui5/walkthrough/`\). + +```ts import ResourceModel from "sap/ui/model/resource/ResourceModel"; import Controller from "sap/ui/core/mvc/Controller"; -import formatter from "../../../model/formatter"; +import formatter from "ui5/walkthrough/model/formatter"; QUnit.module("Formatting function", {}); @@ -86,73 +89,115 @@ QUnit.test("Should return the translated texts", (assert) => { ## webapp/test/unit/unitTests.qunit.ts \(New\) -We create a new `unitTests.qunit.ts` file under `webapp/test/unit/`. This script loads and executes our formatter. - -Before the QUnit test execution can be started, we need to wait until the Core has booted. Therefore, you need to disable the autostart via `QUnit.config.autostart = false;`, require the `sap/ui/core/Core` module, and use `Core.ready()` to wait until the Core has booted. Only then can you start the QUnit tests with `QUnit.start()`. +We create a new `unitTests.qunit.ts` file under `webapp/test/unit/`. This module will serve as the entry point for all our unit tests. It will be referenced in the test suite that we will set up later on. -```js -/* @sapUiRequire */ -QUnit.config.autostart = false; +Inside the `unitTests.qunit.ts` file we import the unit test for the custom formatter. This ensures that any tests related to the custom formatter functionality will be included when running our unit tests. -// import all your QUnit tests here -void Promise.all([ - import("sap/ui/core/Core"), // required to wait until Core has booted to start the QUnit tests - import("ui5/walkthrough/test/unit/model/formatter"), -]).then(([{default: Core}]) => Core.ready()).then(() => { - QUnit.start(); -}); +```ts +import "./model/formatter"; ``` -> ### Note: -> The `@sapUiRequire` annotation instructs the SAPUI5 TypeScript transpilation process \(executed by `ui5-tooling-transpile`\) to use `sap.ui.require` instead of `sap.ui.define` for a transpiled module. This allows to load the module via a ` + src="../resources/sap/ui/test/starter/runTest.js" + data-sap-ui-resource-roots='{ + "test-resources.ui5.walkthrough": "./" + }' + > + + +
+
+ + +``` + + + +
+ +## webapp/test/testsuite.qunit.ts \(New\) + +The `testsuite.qunit.ts` file contains the configuration for our test suite. Although it comes with a set of defaults, we recommend specifying the used QUnit version to prevent potential future updates from breaking our tests. - +Additionally, the `sap_horizon` theme is configured in the `ui5` section, where you can provide the UI5 runtime configuration. - - +The test suite serves as the entry point for all tests within our project such as the previously created `unit/unitTests` \(The `.qunit.ts` extension is omitted and will be added automatically during runtime\). - +The previously created generic `Test.qunit.html` file is referenced as the test `page` and configured with query parameters so that individual tests can be run. The placeholders `{suite}` and `{name}` are replaced with the suite and test names respectively. + +For more information, see [Concept and Basic Setup](../04_Essentials/concept-and-basic-setup-22f50c0.md). + +> ### Note: +> There are currently no types available for the test suite configuration. Please refer to [Configuration Options](../04_Essentials/configuration-options-738ed02.md) to see all options. + +```ts + +export default { + name: "QUnit test suite for UI5 TypeScript Walkthrough", + defaults: { + page: "ui5://test-resources/ui5/walkthrough/Test.qunit.html?testsuite={suite}&test={name}", + qunit: { + version: 2 + }, + ui5: { + theme: "sap_horizon" + }, + loader: { + paths: { + "ui5/walkthrough": "../" + } + } + }, + tests: { + "unit/unitTests": { + title: "UI5 TypeScript Walkthrough - Unit Tests" + } + } +}; +``` + + + + + +## webapp/test/testsuite.qunit.html \(New\) + +We also create a corresponding `testsuite.qunit.html` in the same folder. This is the page we will open in the browser to see a list of all our tests and run them by clicking on the test name. It registers a resource root mapping for the test resources of our project and references the `testsuite.qunit` module we created in the previous step. + +```html + + + + + -
-
``` -The so-called QUnit test suite is an HTML page that triggers all QUnit tests for the application. Most of it is generating the layout of the result page that you can see in the preview and we won’t further explain these parts. - -If we now open the `webapp/test/unit/unitTests.qunit.html` file in the browser, we should see our test running and verifying the formatter logic. +If we now open the `webapp/test/testsuite.qunit.html` file in the browser and select `unit/unitTests`, we should see our test running and verifying the formatter logic. @@ -160,9 +205,9 @@ If we now open the `webapp/test/unit/unitTests.qunit.html` file in the browser, - All unit tests are placed in the webapp/test/unit folder of the app. -- Files in the test suite end with `*.qunit.html`. +- The default naming convention for the test suite is `testsuite.qunit.html` and `testsuite.qunit.ts`. When adding additional test suites, the naming must follow the pattern `testsuite..qunit.html`/`testsuite..qunit.ts`. -- The `unitTests.qunit.html` file triggers all unit tests of the app. +- All test files referenced in the test suite end with `.qunit.ts`. - A unit test should be written for formatters, controller logic, and other individual functionality. @@ -178,3 +223,5 @@ If we now open the `webapp/test/unit/unitTests.qunit.html` file in the browser, [Testing Tutorial](testing-tutorial-291c912.md "In this tutorial we will test application functionality with the testing tools that are delivered with SAPUI5. At different steps of this tutorial you will write tests using QUnit, OPA5, and the OData V2 mock server. Additionally, you will learn about testing strategies, Test Driven Development (TDD), and much more.") +[Test Starter](../04_Essentials/test-starter-032be2c.md "The test starter is a concept intended to simplify the test setup for SAPUI5 applications and libraries by orchestrating your QUnit and OPA5 tests.") + diff --git a/docs/03_Get-Started/step-28-integration-test-with-opa-9bf4dce.md b/docs/03_Get-Started/step-28-integration-test-with-opa-9bf4dce.md index c580a0ce..64e774df 100644 --- a/docs/03_Get-Started/step-28-integration-test-with-opa-9bf4dce.md +++ b/docs/03_Get-Started/step-28-integration-test-with-opa-9bf4dce.md @@ -140,70 +140,46 @@ In the assertions section we define a `waitFor` statement that checks if a `sap. -## webapp/test/integration/opaTests.qunit.html \(New\) - -```html - - - - Integration tests for the UI5 Walkthrough - - - - - - - - - - - - -
-
- - -``` +## webapp/test/integration/opaTests.qunit.js \(New\) -This file contains our test suite for all OPA tests of the app. We use the same namespace as for our application. +We create a new `opaTests.qunit.js` file under `webapp/test/integration/`. -Then we load the basic QUnit functionality via script tags from SAPUI5 so that we can execute the test journey. The `NavigationJourney` we defined above will be loaded via a script called `opaTests.qunit.js`: +This module imports our `NavigationJourney` and is the entrypoint for all integration tests in the project. +```js +sap.ui.define([ + "./NavigationJourney" +]); +``` -
-## webapp/test/integration/opaTests.qunit.js \(New\) -```js -QUnit.config.autostart = false; + -sap.ui.require(["sap/ui/core/Core"], async(Core) => { - "use strict"; +## webapp/test/testsuite.qunit.js - await Core.ready(); +Finally we reference the new `integration/opaTests.qunit.js` in the `testsuite.qunit.js` file. The `.qunit.js` extension is omitted and will be added automatically during runtime. - sap.ui.require([ - "ui5/walkthrough/localService/mockserver", - "ui5/walkthrough/test/integration/NavigationJourney" - ], (mockserver) => { - // initialize the mock server - mockserver.init(); - QUnit.start(); - }); +```js + +sap.ui.define(() => { + "use strict"; + return { + // ... + tests: { + "unit/unitTests": { + title: "UI5 Walkthrough - Unit Tests" + }, + "integration/opaTests": { + title: "UI5 Walkthrough - Integration Tests" + } + } + }; }); ``` -This script loads the `NavigationJourney`, and the test functions inside are immediately executed. When you call the `webapp/test/integration/opaTests.qunit.html` page of your project on the server, you should see the QUnit layout and a test “Should see the Hello dialog” is executed immediately. It will load the app component on the right side of the page. There you can see what operations the test is performing on the app, if everything works correctly the button click is triggered, then a dialog is shown and the test case is green. +If we now open the `webapp/test/testsuite.qunit.html` file in the browser and select `integration/opaTests`, the QUnit layout should appear and a test “Should see the Hello dialog” will run immediately. This action will load the app component on the right side of the page. There you can see the operations the test is performing on the app. If everything works correctly, a button click will be triggered, then a dialog will be displayed and the test case will be green. diff --git a/docs/03_Get-Started/step-28-integration-test-with-opa-typescript-412f0b6.md b/docs/03_Get-Started/step-28-integration-test-with-opa-typescript-412f0b6.md index aeac8778..be24cf74 100644 --- a/docs/03_Get-Started/step-28-integration-test-with-opa-typescript-412f0b6.md +++ b/docs/03_Get-Started/step-28-integration-test-with-opa-typescript-412f0b6.md @@ -49,7 +49,7 @@ In the actions section of the page object we define a function to click the "Hel In the assertions section we define a `waitFor` statement that checks if a `sap.m.Dialog` control is existing in the DOM of the app. When the dialog has been found, the test is successful and we can immediately confirm by calling an `ok` statement with a meaningful message. -```js +```ts import Opa5 from "sap/ui/test/Opa5"; import Press from "sap/ui/test/actions/Press"; @@ -105,7 +105,7 @@ The function `opaTest` is the main aspect for defining integration tests with OP In our journey, we create a very simple test that starts the `MainPage` and loads our app. Then, we carry out the actions we defined in our `MainPage` and expect that they will be executed successfully. Finally, we shut down the page again by calling the function `iTeardownMyApp` on the `MainPage`. -```js +```ts import opaTest from "sap/ui/test/opaQunit"; import HelloPanelPage from "./pages/HelloPanelPage"; @@ -141,67 +141,36 @@ As you can see, the test case reads like a user story; we actually do not need t ## webapp/test/integration/opaTests.qunit.ts \(New\) -We create a new `opaTests.qunit.ts` file under `webapp/test/integration/`. This script loads and executes our `NavigationJourney`. +We create a new `opaTests.qunit.ts` file under `webapp/test/integration/`. This module imports our `NavigationJourney` and is the entrypoint for all integration tests in the project. -Before the QUnit test execution can be started, we need to wait until the Core has booted. Therefore, you need to disable the autostart via `QUnit.config.autostart = false;`, require the `sap/ui/core/Core` module, and use `Core.ready()` to wait until the Core has booted. Only then can you start the QUnit tests with `QUnit.start()`. - -```js -/* @sapUiRequire */ -QUnit.config.autostart = false; - -// import all your integration tests here -void Promise.all([ - import("sap/ui/core/Core"), // required to wait until Core has booted to start the QUnit tests - import("ui5/walkthrough/test/integration/NavigationJourney"), -]).then(([{default: Core}]) => Core.ready()).then(() => { - QUnit.start(); -}); +```ts +import "./NavigationJourney"; ``` -## webapp/test/integration/opaTests.qunit.html \(New\) - -Finally, we create a new `opaTests.qunit.html` file under `webapp/test/integration/`. - -This HTML page contains our test suite for all OPA tests of the app. We use the same namespace as for our application. - -Then we load the basic QUnit functionality via script tags from SAPUI5 so that we can execute the test journey. Finally, we load the `opaTests.qunit`, which then again loads our `NavigationJourney`. - -```html - - - - UI5 Walkthrough - Integration Tests - - - - - - - -
-
- - +## webapp/test/testsuite.qunit.ts + +Finally we reference the new `integration/opaTests.qunit.ts` in the `testsuite.qunit.ts` file. The `.qunit.ts` extension is omitted and will be added automatically during runtime. + +```ts + +export default { + // ... + tests: { + "unit/unitTests": { + title: "UI5 TypeScript Walkthrough - Unit Tests" + }, + "integration/opaTests": { + title: "UI5 TypeScript Walkthrough - Integration Tests" + } + } +}; ``` -When you call the `webapp/test/integration/opaTests.qunit.html` page of your project on the server, you should see the QUnit layout and a test “Should see the Hello dialog” is executed immediately. It will load the app component on the right side of the page. There you can see what operations the test is performing on the app; if everything works correctly, the button click is triggered, then a dialog is shown and the test case is green. +If we now open the `webapp/test/testsuite.qunit.html` file in the browser and select `integration/opaTests`, the QUnit layout should appear and a test “Should see the Hello dialog” will run immediately. This action will load the app component on the right side of the page. There you can see the operations the test is performing on the app. If everything works correctly, a button click will be triggered, then a dialog will be displayed and the test case will be green. diff --git a/docs/03_Get-Started/step-3-3d-viewer-using-the-viewport-control-112d7b4.md b/docs/03_Get-Started/step-3-3d-viewer-using-the-viewport-control-112d7b4.md index bf1b231c..b1df4253 100644 --- a/docs/03_Get-Started/step-3-3d-viewer-using-the-viewport-control-112d7b4.md +++ b/docs/03_Get-Started/step-3-3d-viewer-using-the-viewport-control-112d7b4.md @@ -41,8 +41,10 @@ Update the `index.html` file to reference the `standaloneViewport` namespace, wh diff --git a/docs/04_Essentials/methods-controlling-the-initial-instantiation-b430345.md b/docs/04_Essentials/methods-controlling-the-initial-instantiation-b430345.md index 60b76f3c..b752f99a 100644 --- a/docs/04_Essentials/methods-controlling-the-initial-instantiation-b430345.md +++ b/docs/04_Essentials/methods-controlling-the-initial-instantiation-b430345.md @@ -63,3 +63,8 @@ You can use the following methods: You can also overwrite the getters and setters for component properties in the Component controller. +**Related Information** + + +[API Reference: `sap.ui.core.IAsyncContentCreation`](https://ui5.sap.com/#/api/sap.ui.core.IAsyncContentCreation) + diff --git a/docs/04_Essentials/nojquery-variant-for-bootstrapping-91f1dd0.md b/docs/04_Essentials/nojquery-variant-for-bootstrapping-91f1dd0.md index 858637cd..071e3bb8 100644 --- a/docs/04_Essentials/nojquery-variant-for-bootstrapping-91f1dd0.md +++ b/docs/04_Essentials/nojquery-variant-for-bootstrapping-91f1dd0.md @@ -18,8 +18,7 @@ In this variant, you include the `resources/sap-ui-core-nojQuery.js` file in you ``` diff --git a/docs/04_Essentials/odata-v4-metadata-json-format-87aac89.md b/docs/04_Essentials/odata-v4-metadata-json-format-87aac89.md index 53c882e4..15d981c0 100644 --- a/docs/04_Essentials/odata-v4-metadata-json-format-87aac89.md +++ b/docs/04_Essentials/odata-v4-metadata-json-format-87aac89.md @@ -16,11 +16,11 @@ We have prefixed constant property names with `"$"` as this is a legal first cha We assume that schema **aliases** have been resolved. We add a trailing dot after a schema's namespace; thus, the qualified name "A.B" cannot clash with schema namespace "A.B.". This trailing dot is also present for `"$Include"`, `"$TermNamespace"`, and `"$TargetNamespace"` values. -$kind has been added to each object with a \(qualified\) OData name and to almost each object which can be annotated via external targeting, but not to enum members! Actions and functions are arrays of overloads, and `$kind` has been added to each overload. +$kind has been added to each object with a \(qualified\) OData name and to almost each object which can be annotated via external targeting, but not to enum members. Actions and functions are arrays of overloads, and `$kind` has been added to each overload. We assume each **enum member** to have a value via the fallback rule *"If no values are specified, the members are assigned consecutive integer values in the order of their appearance, starting with zero for the first member."* -Facets like `MaxLength`, `Precision`, and `Scale` are represented as numbers, if possible \(`"$Scale" : "variable"` is the only exception\). `DefaultValue` is represented as a string for lack of type information in the general case. +Facets like `MaxLength`, `Precision`, and `Scale` are represented as numbers if possible \(`"$Scale" : "variable"` is the only exception\). `DefaultValue` is represented as a string for lack of type information in the general case. > ### Note: > `"$MaxLength" : "max"` is omitted and will be treated the same as an unspecified length on the client side. @@ -42,7 +42,7 @@ We use the "<key>@<14.3.1 Annotation Term>#<14.3.2 A - "7.3 Element OnDelete" with key `"$OnDelete"` -- "14.3 Annotation" with key `"@<14.3.1 Annotation Term>#<14.3.2 Annotation Qualifier>"` \(yes, this does lead to a double at-sign `"@...#...@...#..."`!\) +- "14.3 Annotation" with key `"@<14.3.1 Annotation Term>#<14.3.2 Annotation Qualifier>"` \(yes, this does lead to a double at-sign `"@...#...@...#..."`\) - "14.5.14.2 Element PropertyValue" with key `"<14.5.14.2.1 PropertyValue Property>"` @@ -66,7 +66,7 @@ We use the "<key>@<14.3.1 Annotation Term>#<14.3.2 A ## Metadata JSON Structure -The following JSON file represents the metadata document which corresponds to `GET /$metadata`. We assume it to be sent over the wire this way in future. In the first step, the transformation from XML to JSON can happen on the client side. Note that, in this case, **a wire format for annotations, references and includes is not needed! They are sent as XML, and the API on the client side will offer inlined annotations and resolve references and filter includes, etc.** +The following JSON file represents the metadata document which corresponds to `GET /$metadata`. ```json { diff --git a/docs/04_Essentials/standard-variant-for-bootstrapping-91f1f45.md b/docs/04_Essentials/standard-variant-for-bootstrapping-91f1f45.md index 857cc14a..8979634b 100644 --- a/docs/04_Essentials/standard-variant-for-bootstrapping-91f1f45.md +++ b/docs/04_Essentials/standard-variant-for-bootstrapping-91f1f45.md @@ -15,7 +15,6 @@ By setting the `async=true` configuration parameter, the module loader loads the diff --git a/docs/05_Developing_Apps/big-picture-how-does-it-all-work-fc4f8ef.md b/docs/05_Developing_Apps/big-picture-how-does-it-all-work-fc4f8ef.md index e79beb63..a381e33b 100644 --- a/docs/05_Developing_Apps/big-picture-how-does-it-all-work-fc4f8ef.md +++ b/docs/05_Developing_Apps/big-picture-how-does-it-all-work-fc4f8ef.md @@ -15,6 +15,6 @@ The following image shows an overview of the main tools, repositories, APIs, and > This doesn't happen for changes carried out using transaction `SNOTE` or the transport system. To ensure periodic recalculations of the SAPUI5 application index for these changes too, use transaction `SM36` to schedule periodic runs of the index processor triggered by the report `/UI5/APP_INDEX_CALCULATE`. - The SAPUI5 application index contains information related to the supported cache busting mechanisms and the content of the descriptor for SAPUI5 apps, components, and libraries. The content of the SAPUI5 application index can be **consumed by an API**, for example, by SAP Fiori launchpad. Cache busting-related information of the SAPUI5 application index can also be used by the request handlers \(at runtime, for SAPUI5 apps that are using this mechanism\). -- At runtime, the application resources needed by SAPUI5 apps are accessed through a specific **runtime API** from the SAPUI5 ABAP repository, whereas the SAPUI5 distribution layer artifacts \(such as controls\) are retrieved from the **MIME repository**. The application resources and the SAPUI5 distribution layer artifacts are served through SAPUI5-specific request handlers assigned to the respective ICF nodes. +- At runtime, the application resources needed by SAPUI5 apps are accessed through a specific **runtime API** from the SAPUI5 ABAP repository, whereas the SAPUI5 distribution layer artifacts \(such as controls\) are retrieved from a separate repository. The application resources and the SAPUI5 distribution layer artifacts are served through SAPUI5-specific request handlers assigned to the respective ICF nodes. - Another part of the SAPUI5 ABAP repository is the SAPUI5 text repository. diff --git a/docs/05_Developing_Apps/cache-behavior-for-application-resources-5449990.md b/docs/05_Developing_Apps/cache-behavior-for-application-resources-5449990.md index e383e203..a1dc6d2d 100644 --- a/docs/05_Developing_Apps/cache-behavior-for-application-resources-5449990.md +++ b/docs/05_Developing_Apps/cache-behavior-for-application-resources-5449990.md @@ -2,7 +2,7 @@ # Cache Behavior for Application Resources -By default, the application files are stored in the browser cache for one year to speed up the performance of an SAPUI5 app in a productive environment. To get the latest changes, you need to force your SAPUI5 start page to refresh, for example, with [CTRL\] + [F5\] on Windows systems. \(If the refresh doesn't work, clear your browser cache.\) +By default, the application files are stored in the browser cache for one year to speed up the performance of an SAPUI5 app in a productive environment. -If you are in development mode and want to get the latest changes immediately without refreshing your SAPUI5 start page, you can add the URL parameter `sap-ui-xx-devmode` to the SAPUI5 start page to force the browser to check whether there's a newer version of the application files available. +To get the latest changes, you need to force your SAPUI5 start page to refresh, for example, with [CTRL\] + [F5\] on Windows systems. If the refresh doesn't work, clear your browser cache. diff --git a/docs/05_Developing_Apps/continuous-integration-ensure-code-quality-fe7a158.md b/docs/05_Developing_Apps/continuous-integration-ensure-code-quality-fe7a158.md deleted file mode 100644 index 77cda63a..00000000 --- a/docs/05_Developing_Apps/continuous-integration-ensure-code-quality-fe7a158.md +++ /dev/null @@ -1,62 +0,0 @@ - - -# Continuous Integration: Ensure Code Quality - -This section describes the setup of a development project where multiple developers work together on the same code. - -When you develop an app, you want, of course, to deliver high code quality. To do so, you have various tools at hand: - -- Unit and integration tests to make sure that your change doesn't break the app or other tests \(see [Unit Testing with QUnit](../04_Essentials/unit-testing-with-qunit-09d145c.md) and [Integration Testing with One Page Acceptance Tests \(OPA5\)](../04_Essentials/integration-testing-with-one-page-acceptance-tests-opa5-2696ab5.md)\) - -- Code analyzer \(or "linter"\) to check whether the code follows the code style conventions that apply to your project - -- A code coverage analyzer to check the test coverage of your code - -- A code collaboration tool to let other experts review your code - -- An automation server that orchestrates the automated task - - -If you work in a team where you share the same code with your colleagues, or if you work in a continuous delivery context where an app is updated on a regular basis, you need the support of automated continuous integration processes. - -Continuous integration makes sure that only code that has passed various automated and manual checks is merged to productive use. - -In an SAPUI5 project, the process, for example, can look like this: - -1. When the code is ready, the developer commits the code to the source code management system \(SCMS, for example, *Gerrit Code Review*\) and assigns experts that should review the code. - -2. The SCMS calls an automation server \(for example, *Jenkins*\). - -3. The developer triggers the peer code review and the automation server starts a voter job that triggers, among others: - - - Static code checks \(for example, *ESLint*\) to check the code style - - - Unit and integration test automated by a test runner \(for example, *Karma*\) - - - Analysis to check whether all parts of the code are covered with automated tests \(for example, with *Karma* plug-in *Istanbul Code Coverage*\) - - -4. When the voter job and the human reviewer have both given their OK, the change can be merged. - - - - -**Code cannot be merged because automated tests failed** - -![](images/CI_Workflow_b1c16e7.png "Code cannot be merged because automated tests failed") - -**Related Information** - - -[Testing](../04_Essentials/testing-7cdee40.md "SAPUI5 provides several testing options, like to unit and integration tests and the OData V2 mock server.") - -[*Gerrit Code Review*Home Page](https://www.gerritcodereview.com) - -[*Jenkins* Home Page](https://jenkins.io/) - -[*ESLint* Home Page](https://eslint.org/) - -[*Karma* Home Page](https://karma-runner.github.io/) - -[*Istanbul Code Coverage* Home Page](https://istanbul.js.org/) - diff --git a/docs/05_Developing_Apps/developing-apps-23cfd95.md b/docs/05_Developing_Apps/developing-apps-23cfd95.md index bae3ee61..d9e9a1a4 100644 --- a/docs/05_Developing_Apps/developing-apps-23cfd95.md +++ b/docs/05_Developing_Apps/developing-apps-23cfd95.md @@ -16,8 +16,6 @@ Create apps with rich user interfaces for modern web business applications, resp Before you start developing apps with SAPUI5, you start by setting up the development environment of your choice. You can find our recommendations under [Development Environment](development-environment-7bb04e0.md). -After that, you define the project setup. If you work in a team, we recommend using a continuous integration setup as described under [Continuous Integration: Ensure Code Quality](continuous-integration-ensure-code-quality-fe7a158.md). If you work alone, you should at the very least set up an automated testing environment. -
diff --git a/docs/05_Developing_Apps/images/Big_Picture_473a10a.png b/docs/05_Developing_Apps/images/Big_Picture_473a10a.png index 349449b1..dc65e44a 100644 Binary files a/docs/05_Developing_Apps/images/Big_Picture_473a10a.png and b/docs/05_Developing_Apps/images/Big_Picture_473a10a.png differ diff --git a/docs/05_Developing_Apps/images/CI_Workflow_b1c16e7.png b/docs/05_Developing_Apps/images/CI_Workflow_b1c16e7.png deleted file mode 100644 index 2001eb92..00000000 Binary files a/docs/05_Developing_Apps/images/CI_Workflow_b1c16e7.png and /dev/null differ diff --git a/docs/05_Developing_Apps/performance-speed-up-your-app-408b40e.md b/docs/05_Developing_Apps/performance-speed-up-your-app-408b40e.md index 3d331b2f..bd82dfe3 100644 --- a/docs/05_Developing_Apps/performance-speed-up-your-app-408b40e.md +++ b/docs/05_Developing_Apps/performance-speed-up-your-app-408b40e.md @@ -144,7 +144,7 @@ In some cases it may happen that preloads are not enabled, or that modules of so - A subset of libraries in the `sap.ui5/dependencies/libs` section of the `manifest.json` is declared with the `lazy` loading option, but these `lazy` libraries aren't preloaded manually before their modules are used. For more information, see [Descriptor Dependencies to Libraries and Components](../04_Essentials/descriptor-dependencies-to-libraries-and-components-8521ad1.md). -- Neither `sap-ui-async` nor `sap-ui-preload` is enabled in the bootstrap configuration options.Note that if `sap-ui-async` is set to `true`, the value of the preload configuration is automatically set to `"async"`. +- Neither `sap-ui-async` nor `sap-ui-preload` is enabled in the bootstrap configuration options. Note that if `sap-ui-async` is set to `true`, the value of the preload configuration is automatically set to `"async"`. - Debug sources are enabled in the bootstrap \(`data-sap-ui-debug=true`\) or via the URL \(`sap-ui-debug=true`\). diff --git a/docs/05_Developing_Apps/recommendations-ee37fc7.md b/docs/05_Developing_Apps/recommendations-ee37fc7.md index 7ad20418..16ced2ff 100644 --- a/docs/05_Developing_Apps/recommendations-ee37fc7.md +++ b/docs/05_Developing_Apps/recommendations-ee37fc7.md @@ -10,20 +10,15 @@ When developing SAPUI5 applications, you need to pay attention to the correctnes -### Don't change the HTML - -Theming \(CSS selectors\), keyboard handling \(tab order\) and screen reader support are tightly coupled with the HTML structure of the generated pages. If you change the structure of the elements \(for example, from custom JavaScript, HTML or CSS\), this could break some or all of the accessibility aspects. In addition, it makes debugging the application more difficult. +### WCAG 2.2 +To ensure better accessibility experience and to adhere to the Web Content Accessibility Guidelines \(WCAG\) 2.2, it is important for developers and designers to follow specific guidelines. When working with SAPUI5 controls, refer to the SAP Fiori for Web design guidelines corresponding to the specific control you are using. The design guidelines provide detailed information on how each control should be implemented to meet accessibility requirements. For example for the `sap.m.Object` controls, see [Object Display Components Fiori Guidelines](https://experience.sap.com/fiori-design-web/object-display-elements/). -### Check the focus persistence -When opening or closing a dialog or navigating between pages, the focus should stay on the same control as it was on before opening or navigating. If the control no longer exists, the focus should be put on its parent \(for example, if the control was inside an action sheet, set the focus on the button which opened the action sheet\). - -> ### Note: -> When the parent control cannot receive focus or is no longer available, the focus should go to a control nearby. +### Don't change the HTML -For more information, see [sap.ui.core.Element/methods/focus](https://ui5.sap.com/#/api/sap.ui.core.Element/methods/focus) API documentation in the Demo Kit. +Theming \(CSS selectors\), keyboard handling \(tab order\) and screen reader support are tightly coupled with the HTML structure of the generated pages. If you change the structure of the elements \(for example, from custom JavaScript, HTML or CSS\), this could break some or all of the accessibility aspects. In addition, it makes debugging the application more difficult. diff --git a/docs/05_Developing_Apps/sapui5-flexibility-enable-your-app-for-ui-adaptation-f1430c0.md b/docs/05_Developing_Apps/sapui5-flexibility-enable-your-app-for-ui-adaptation-f1430c0.md index 6979bccf..0b6eac1f 100644 --- a/docs/05_Developing_Apps/sapui5-flexibility-enable-your-app-for-ui-adaptation-f1430c0.md +++ b/docs/05_Developing_Apps/sapui5-flexibility-enable-your-app-for-ui-adaptation-f1430c0.md @@ -29,14 +29,7 @@ If you set this flag, make sure that you provide stable IDs and follow the rules Please note that the `_version` property must be at least `1.11.0`. ```json -{ - "_version": "1.11.0" - […] - "sap.ui5": { - "flexEnabled": true, - […] -} - +{ "_version": "1.11.0" […] "sap.ui5": { "flexEnabled": true, […]} ``` > ### Caution: @@ -51,13 +44,16 @@ Please note that the `_version` property must be at least `1.11.0`. ## Very important: Use stable IDs -Stable IDs are used to identify the controls that can be changed via UI adaptation or personalization. For this reason, every control and view that you use must have a stable ID. For more information, see [Stable IDs: All You Need to Know](stable-ids-all-you-need-to-know-f51dbb7.md). Here, you also find information on how to check if all your IDs are stable. +Stable IDs are used to identify the controls that can be changed via UI adaptation or personalization. For this reason, every control and view in your application must have a stable ID. For more information, see [Stable IDs: All You Need to Know](stable-ids-all-you-need-to-know-f51dbb7.md). Here, you also find information on how to check if all your IDs are stable. If your app is based on SAP Fiori elements, it automatically generates IDs for its controls. You only have to set stable IDs if you use extension points to modify it, for example to add an additional view. > ### Caution: > Never change or delete the IDs when you're creating the next version of your app if the app was already delivered. Otherwise you'd risk inconsistencies and the loss of UI changes that a developer \(in an adaptation project\) or a key user might have done in the delivered version. +> ### Note: +> Even if you don't want a control to be adaptable, it still should have a stable ID. To deactivate the adaptation of a certain control in your application, see the section *Restrict adaptation for certain controls* in [Enabling UI Adaptation: Other Things to Consider](enabling-ui-adaptation-other-things-to-consider-de9fd55.md). + > ### Tip: > With the Stable control IDs are required for SAPUI5 flexibility services rule in the Support Assistant, you can check whether all controls have stable IDs. For more information, see [Stable IDs: All You Need to Know](stable-ids-all-you-need-to-know-f51dbb7.md). @@ -141,16 +137,7 @@ In addition, for SAPUI5 apps running standalone \(not in an SAP Fiori launchpad\ > manifest.json > > ``` - > "sap.ui5": { - > "dependencies": { - > … - > "libs": { - > "sap.ui.fl": {}, - > … - > } - > }, - > … - > + > "sap.ui5": { "dependencies": { … "libs": { "sap.ui.fl": {}, … } }, … > ``` diff --git a/docs/05_Developing_Apps/the-sapui5-abap-repository-and-the-abap-back-end-infrastructure-91f3467.md b/docs/05_Developing_Apps/the-sapui5-abap-repository-and-the-abap-back-end-infrastructure-91f3467.md index 91fbb986..b2a320d3 100644 --- a/docs/05_Developing_Apps/the-sapui5-abap-repository-and-the-abap-back-end-infrastructure-91f3467.md +++ b/docs/05_Developing_Apps/the-sapui5-abap-repository-and-the-abap-back-end-infrastructure-91f3467.md @@ -17,7 +17,7 @@ The BSP runtime is not used at runtime and SAPUI5-specific request handlers are The SAPUI5 text repository is part of the SAPUI5 ABAP repository. It's intended to be used as fallback mechanism if translation by properties files is not possible. > ### Note: -> SAPUI5 distribution layer artifacts, such as control libraries, are not stored in the SAPUI5 ABAP repository, but in a separate repository \(technically based on the MIME repository\). The runtime access is realized by SAPUI5-specific request handlers. +> SAPUI5 distribution layer artifacts, such as control libraries, are not stored in the SAPUI5 ABAP repository, but in a separate repository. The runtime access is realized by SAPUI5-specific request handlers. The following design time tools use the SAPUI5 ABAP repository: diff --git a/docs/06_SAP_Fiori_Elements/adapting-the-ui-59bfd31.md b/docs/06_SAP_Fiori_Elements/adapting-the-ui-59bfd31.md index ecde36d6..2ed847e1 100644 --- a/docs/06_SAP_Fiori_Elements/adapting-the-ui-59bfd31.md +++ b/docs/06_SAP_Fiori_Elements/adapting-the-ui-59bfd31.md @@ -577,7 +577,7 @@ Configure the *Add Card to Insights* feature for *My Home* in SAP S/4HANA. -[Creating Cards for the Insights Cards Section of My Home in SAP S/4HANA](creating-cards-for-the-insights-cards-section-of-my-home-in-sap-s-4hana-9b13559.md) +[Creating Cards for the Insights Cards Section of My Home in SAP S/4HANA Cloud and My Home in SAP S/4HANA](creating-cards-for-the-insights-cards-section-of-my-home-in-sap-s-4hana-cloud-and-my-home-9b13559.md) diff --git a/docs/06_SAP_Fiori_Elements/adapting-the-ui-list-report-and-object-page-0d2f1a9.md b/docs/06_SAP_Fiori_Elements/adapting-the-ui-list-report-and-object-page-0d2f1a9.md index 45e0d40a..9429704d 100644 --- a/docs/06_SAP_Fiori_Elements/adapting-the-ui-list-report-and-object-page-0d2f1a9.md +++ b/docs/06_SAP_Fiori_Elements/adapting-the-ui-list-report-and-object-page-0d2f1a9.md @@ -113,6 +113,18 @@ In the table, set the `popinLayout` property with the Page Editor to one of the The default layout is `Block`. + + + + + +Change the default value of the `scrollThreshold` parameter in grid tables, analytical tables, and tree tables on the list report page. The default value is 300. + + + + +In the outline, select the table whose value needs to be changed, and set the new value for the `scrollThreshold` parameter. + diff --git a/docs/06_SAP_Fiori_Elements/adding-a-custom-viewextension-to-the-mass-edit-dialog-fd26fee.md b/docs/06_SAP_Fiori_Elements/adding-a-custom-viewextension-to-the-mass-edit-dialog-fd26fee.md index 18041f11..582a5b68 100644 --- a/docs/06_SAP_Fiori_Elements/adding-a-custom-viewextension-to-the-mass-edit-dialog-fd26fee.md +++ b/docs/06_SAP_Fiori_Elements/adding-a-custom-viewextension-to-the-mass-edit-dialog-fd26fee.md @@ -11,13 +11,11 @@ You can add a custom `ViewExtension` to the mass edit dialog by defining it in t ## Additional Features in SAP Fiori Elements for OData V2 > ### Note: -> - Controls in custom extensions must be surrounded by `GroupElement`. +> - Controls in custom extensions must be surrounded by a `GroupElement`. > > - The application developer must provide stable IDs for the custom input fields. Handle input values using `beforeMultiEditSaveExtension`. -In `ViewExtension`, you can add custom controls inside a `GroupElement` such as a Rating bar, Calendar, etc. You can add `MultiEditFieldsExtension` under the `manifest.json` file in the `sap.ui5` extended section. `ViewExtension` is supported in both the `annotationPath` and `visibleTable` column scenarios. - -Configured extension in manifest and file of extension must be present in `ext >` fragments. +In `ViewExtension`, you can add custom controls inside a `GroupElement` such as a Rating bar, Calendar, and so on. You can add `MultiEditFieldsExtension` under the `manifest.json` file in the extended `sap.ui5`section. `ViewExtension` is supported in both the `annotationPath` and `visibleTable` column scenarios. > ### Sample Code: > `manifest.json` @@ -108,7 +106,7 @@ Configured extension in manifest and file of extension must be present in `ext > ## Additional Features in SAP Fiori Elements for OData V4 -You can add a custom fragment to the *Mass Edit* dialog by defining the `customFragment` property in the manifest. +You can add a custom fragment to the *Mass Edit* dialog by defining the `customFragment` property in the `manifest.json` file. > ### Note: > - Controls in custom extensions must be surrounded by a `FormContainer`. @@ -152,11 +150,9 @@ You can add a custom fragment to the *Mass Edit* dialog by defining the `customF > > ``` -You should then implement the `customMassEditSave` function within the list report or object page controller extension. For more information, see [Replacing the Standard Save Functionality in the Mass Edit Dialog](replacing-the-standard-save-functionality-in-the-mass-edit-dialog-492d8a9.md). +Next, implement the `customMassEditSave` function within the list report or object page controller extension. For more information, see [Replacing the Standard Save Functionality in the Mass Edit Dialog](replacing-the-standard-save-functionality-in-the-mass-edit-dialog-492d8a9.md). > ### Sample Code: -> `manifest.json` -> > ``` > sap.ui.define( > [ diff --git a/docs/06_SAP_Fiori_Elements/configuring-card-filters-ecde99f.md b/docs/06_SAP_Fiori_Elements/configuring-card-filters-ecde99f.md index 1ccb0fe8..56a12d75 100644 --- a/docs/06_SAP_Fiori_Elements/configuring-card-filters-ecde99f.md +++ b/docs/06_SAP_Fiori_Elements/configuring-card-filters-ecde99f.md @@ -62,7 +62,7 @@ The following example shows filter configuration in the annotation document. The -The preference for displaying the currency type is taken from the SAP Fiori Launchpad user settings in the `DisplayCurrency` field of an application. You can also set filters for SAP Fiori overview page by passing a filter paramter in the URL. Applicable when you launch SAP Fiori overview pages from SAP Fiori Launchpad or from any other application with a filter parameter. +The preference for displaying the currency type is taken from the SAP Fiori Launchpad user settings in the `DisplayCurrency` field of an application. You can also set filters for SAP Fiori overview page by passing a filter parameter in the URL. Applicable when you launch SAP Fiori overview pages from SAP Fiori Launchpad or from any other application with a filter parameter. > ### Note: > You can only pass strings or integers as filter parameters. The filter applies automatically if the filter property exists in the entityset. diff --git a/docs/06_SAP_Fiori_Elements/creating-cards-for-the-insights-cards-section-of-my-home-in-sap-s-4hana-9b13559.md b/docs/06_SAP_Fiori_Elements/creating-cards-for-the-insights-cards-section-of-my-home-in-sap-s-4hana-cloud-and-my-home-9b13559.md similarity index 89% rename from docs/06_SAP_Fiori_Elements/creating-cards-for-the-insights-cards-section-of-my-home-in-sap-s-4hana-9b13559.md rename to docs/06_SAP_Fiori_Elements/creating-cards-for-the-insights-cards-section-of-my-home-in-sap-s-4hana-cloud-and-my-home-9b13559.md index 72b1b723..dc2dc2eb 100644 --- a/docs/06_SAP_Fiori_Elements/creating-cards-for-the-insights-cards-section-of-my-home-in-sap-s-4hana-9b13559.md +++ b/docs/06_SAP_Fiori_Elements/creating-cards-for-the-insights-cards-section-of-my-home-in-sap-s-4hana-cloud-and-my-home-9b13559.md @@ -1,14 +1,14 @@ -# Creating Cards for the Insights Cards Section of **My Home** in SAP S/4HANA +# Creating Cards for the Insights Cards Section of **My Home** in SAP S/4HANA Cloud and **My Home** in SAP S/4HANA -An option for tables in the list report or charts in the analytical list page allows end users to create cards that can be added to the *Insights* section of **My Home** in SAP S/4HANA. +An option for tables in the list report or charts in the analytical list page allows end users to create cards that can be added to the *Insights* section of **My Home** in SAP S/4HANA Cloud and **My Home** in SAP S/4HANA. **Prerequisites** -You must enable **My Home** in SAP S/4HANA to create and add cards. +You must enable **My Home** in SAP S/4HANA Cloud and **My Home** in SAP S/4HANA to create and add cards. -Once you've enabled **My Home** in SAP S/4HANA, the *Add Card to Insights* option automatically appears in the overflow toolbar of the table in list report applications and the overflow toolbar of the chart in analytical list page applications. +Once you've enabled **My Home** in SAP S/4HANA Cloud and **My Home** in SAP S/4HANA, the *Add Card to Insights* option automatically appears in the overflow toolbar of the table in list report applications and the overflow toolbar of the chart in analytical list page applications. diff --git a/docs/06_SAP_Fiori_Elements/custom-cards-6d260f7.md b/docs/06_SAP_Fiori_Elements/custom-cards-6d260f7.md index eb83d69e..99bca65b 100644 --- a/docs/06_SAP_Fiori_Elements/custom-cards-6d260f7.md +++ b/docs/06_SAP_Fiori_Elements/custom-cards-6d260f7.md @@ -33,14 +33,13 @@ Creating a custom card consists of the following steps: > function (CustomCardComponent) { > "use strict"; > return CardComponent.extend("test.testovp.ext.myCustomCard.Component", { - > // use inline declaration instead of component.json to save 1 round trip + > > metadata: { > properties: { > "contentFragment": { > "type": "string", > "defaultValue": "test.testovp.ext.myCustomCard.MyCustomCard" > }, - > > customizing: { > "sap.ui.controllerExtensions": { > "sap.ovp.cards.generic.Card": { @@ -73,6 +72,7 @@ Creating a custom card consists of the following steps: > }); > } > ); + > > ``` 4. Define your view - In the `webapp/ext/myCustomCard` folder, create a new fragment file `MyCustomCard.fragment.xml`. diff --git a/docs/06_SAP_Fiori_Elements/customizing-overview-pages-using-runtime-capabilities-5b1dd11.md b/docs/06_SAP_Fiori_Elements/customizing-overview-pages-using-runtime-capabilities-5b1dd11.md index d6b6e164..557ac72f 100644 --- a/docs/06_SAP_Fiori_Elements/customizing-overview-pages-using-runtime-capabilities-5b1dd11.md +++ b/docs/06_SAP_Fiori_Elements/customizing-overview-pages-using-runtime-capabilities-5b1dd11.md @@ -6,7 +6,18 @@ End users can customize their overview pages by rearranging cards and by hiding End users can customize their overview pages in the following ways: -- Drag and drop cards to rearrange them. You can do this using the mouse, or with the keyboard by pressing [Ctrl\] and the arrow buttons. +- Drag and drop cards to rearrange them. You can do this using the mouse, or with the keyboard by pressing [Ctrl\] and the arrow buttons. You can enable the ClickLock option to highlight or drag an item without holding down the mouse button. You can enable this option by using the following steps: + + - Open the *Settings* of your system. + + - Select *Bluetooth and Devices* and choose *Touchpad*. + + - Click *More touchpad settings*. The classic *Mouse Properties* dialog opens. + + - Check the *Turn on ClickLock* option. + + + To use ClickLock, perform a single-click on an item and move the mouse to enter the drag mode. The selected element starts dragging. A second click on the desired location commits the drag and drop operation. > ### Note: > - You can only personalize cards with same screen resolution and size. diff --git a/docs/06_SAP_Fiori_Elements/displaying-text-and-id-for-value-help-input-fields-080886d.md b/docs/06_SAP_Fiori_Elements/displaying-text-and-id-for-value-help-input-fields-080886d.md index a131669d..a36299e4 100644 --- a/docs/06_SAP_Fiori_Elements/displaying-text-and-id-for-value-help-input-fields-080886d.md +++ b/docs/06_SAP_Fiori_Elements/displaying-text-and-id-for-value-help-input-fields-080886d.md @@ -4,33 +4,16 @@ You can configure object pages to show both text and ID for value help input fields in *Edit* and *Display* modes. -> ### Note: -> This topic has not yet been updated with information specific to SAP Fiori elements for OData V4. - ## Edit Mode -By default, all fields in the form are configured with `TextInEditModeSource = ValueListNoValidation`, so that you can enter a new value that is not defined in the value help. If the `textArrangement` annotation is defined, then the value help entity fetches and displays both text and ID, as per the annotation. +By default, you can enter a new value that is not defined in the value help. If the `textArrangement` annotation is defined, then the value help entity fetches and displays both text and ID, as per the annotation. ![](images/Value_Help_Object_Page_Text_amp_ID_4aa1f0d.png) -> ### Note: -> This is only supported in object page forms, and not supported in tables. - -`sap.ui.comp.smartfield.TextInEditModeSource.ValueList` enumeration members are supported in the following cases only. If any of these conditions are not met, only the ID is displayed in the field. - -- The value property of the `SmartField` control instance is bound to an Entity Data Model \(EDM\) property type as `Edm.String` or `Edm.Guid`. - -- The `com.sap.vocabularies.UI.v1.TextArrangement` annotation for the bound EDM property or entity type is specified in the service metadata document or annotation file. - -- The binding mode for the value property of the `SmartField` control is set as two-way binding. - -- The field from which the description is fetched is filterable. - - `textArrangement` is defined at the entity level or at the individual field level. The individual field level takes precedence over the entity level. @@ -128,20 +111,46 @@ You can use `ValueListForValidation` annotations under property level annotation > ``` > ### Note: -> - `ValueListForValidation` works only in cases where no qualifier is set, that is `String=""`. +> - `ValueListForValidation` works only in cases where no qualifier is set, that is, `String=""`. > -> - User input that does not match the entries in the `ValueListForValidation` aren't stored in the back end \(not even for drafts\). +> - User input that does not match the entries in the `ValueListForValidation` isn't stored in the back end \(not even for drafts\). + + + +## Additional Features in SAP Fiori Elements for OData V2 - -## Display Mode + +### Edit Mode + +Entering a new value that is not defined in the value help is ensured with the `TextInEditModeSource = ValueListNoValidation` configuration by default. + +> ### Note: +> This is only supported in object page forms and is not supported in tables. + +`sap.ui.comp.smartfield.TextInEditModeSource.ValueList` enumeration members are supported in the following cases only: + +- The value property of the `SmartField` control instance is bound to an Entity Data Model \(EDM\) property type as `Edm.String` or `Edm.Guid`. + +- The `com.sap.vocabularies.UI.v1.TextArrangement` annotation for the bound EDM property or entity type is specified in the service metadata document or annotation file. + +- The binding mode for the value property of the `SmartField` control is set as a two-way binding. + +- The field from which the description is fetched is filterable. + + +If any of these conditions are not met, only the ID is displayed in the field. + + + +### Display Mode You can display both the text and ID of a `SmartField` that has a value list. To do so, specify `sap:text` directed to the navigation property of the value help from which the application fetches the description. > ### Sample Code: -> Modeling `sap:text` via a Navigation Path +> Modeling `sap:text` Using a Navigation Path > > ``` > @@ -154,7 +163,7 @@ You can display both the text and ID of a `SmartField` that has a value list. To > > ``` -If this modeling is not done, text can also be fetched from value help entity by defining the text arrangement as follows: +If this modeling is not done, text can also be fetched from the value help entity by defining the text arrangement as follows: > ### Sample Code: > Modeling `sap:text` Using Value Help Entity @@ -182,13 +191,34 @@ If this modeling is not done, text can also be fetched from value help entity by ![](images/Object_Page_Value_Help_Text_amp_ID_Display_c9ae198.png) -For `DataField` record types that are bound to value help and rendered as a `SmartLink` \(using `SemanticObject` definition or using the quick view\), the value shows descriptive text and ID by default. +For `DataField` record types that are bound to value help and rendered as a `SmartLink` using `SemanticObject` definition or the quick view, the value shows the descriptive text and the ID by default. + +For `DataFieldWithNavigationPath` record types, when the value is bound to the value help, the field shows the descriptive text and the ID by default. + +This behavior is applicable for tables, object page headers, and object page form sections. You can change it according to your requirements by using the `TextArrangement` configuration, such as `TextFirst`, `TextLast`, or `TextOnly`. + +The functionality is not supported for the following record types: + +- `DataFieldWithIntentBasedNavigation` + +- `Communication.Contact` + + +If text arrangement is defined with `textSeparate`, only the ID is displayed. + + + + + +## Additional Features in SAP Fiori Elements for OData V4 + + -Also, for `DataFieldWithNavigationPath` record types, for the value that is bound to the value help, the field shows descriptive text and ID by default. +### Display Mode -This behavior is applicable for tables, object page headers, and object page form sections. You can change it according to your requirements using the `TextArrangement` configuration \(for example `TextFirst`, `TextLast`, `TextOnly`\). +For `DataField` record types that are bound to value help and rendered as a link using `SemanticObject` definition or the quick view, the value shows the descriptive text and the ID by default. -The functionality is not supported for the following `recordtype`: `DataFieldWithIntentBasedNavigation` and `Communication.Contact`. +For `DataFieldWithNavigationPath` record types, when the value is bound to the value help, the field shows the descriptive text and the ID by default. -If text arrangement is defined with `textSeperate`, only the ID is displayed. +This behavior is applicable for tables, object page headers, and object page form sections. You can change it according to your requirements by using the `TextArrangement` configuration, such as `TextFirst`, `TextLast`, or `TextOnly`. For more information, see [Further Features of the Field](further-features-of-the-field-f49a0f7.md). diff --git a/docs/06_SAP_Fiori_Elements/enabling-an-app-for-key-user-adaptation-ccd45ba.md b/docs/06_SAP_Fiori_Elements/enabling-an-app-for-key-user-adaptation-ccd45ba.md index e45246f1..87e82739 100644 --- a/docs/06_SAP_Fiori_Elements/enabling-an-app-for-key-user-adaptation-ccd45ba.md +++ b/docs/06_SAP_Fiori_Elements/enabling-an-app-for-key-user-adaptation-ccd45ba.md @@ -11,9 +11,9 @@ To enable an app for key user adaptation, you must set `flexEnabled` to 'true' i Key users can make the following adaptations on applications: -- Create different variants of the list report for users by adjusting filters, column sorting, and tab selection, for example +- Create different variants of the list report for users by adjusting filters, column sorting, and tab selection, for example. -- Define the fields visible in the mass edit dialog +- Define the fields visible in the mass edit dialog. In the key user adaptation mode, all fields except static read-only fields are available. - Move, rename, and remove buttons and add previously removed buttons to the following places: diff --git a/docs/06_SAP_Fiori_Elements/enabling-the-flexible-column-layout-e762257.md b/docs/06_SAP_Fiori_Elements/enabling-the-flexible-column-layout-e762257.md index e77926d1..5db664fd 100644 --- a/docs/06_SAP_Fiori_Elements/enabling-the-flexible-column-layout-e762257.md +++ b/docs/06_SAP_Fiori_Elements/enabling-the-flexible-column-layout-e762257.md @@ -8,7 +8,7 @@ For example, a list of items is shown in the first column, and when you choose a Use the following attributes to create the column layout you want: -- `defaultTwoColumnLayoutType`: 2-column layout with these options: +- `defaultTwoColumnLayoutType`: A 2-column layout with the following options: - `TwoColumnsBeginExpanded` @@ -19,7 +19,7 @@ Use the following attributes to create the column layout you want: ![](images/Two_Columns_Mid_Expanded_392c14f.png) -- `defaultThreeColumnLayoutType`: 3-column layout with these options: +- `defaultThreeColumnLayoutType`: A 3-column layout with the following options: - `ThreeColumnsMidExpanded` @@ -33,7 +33,7 @@ Use the following attributes to create the column layout you want: End users can expand and collapse the columns using the focus buttons. They can change to full-screen mode by choosing the full-screen button. -![](images/FCL_Master_Detail_9ff7dd4.jpg) +![](images/FCL_Master_Detail_9ff7dd4.png) @@ -67,6 +67,14 @@ The following screen recording shows how to enable the flexible column layout an + + +## Saving Column Resize Information + +The flexible column layout allows end users to resize the columns in both 2-column display and 3-column display, with SAP Fiori elements saving this information in the personalization settings. This information is specific to each application and device type, such as desktop, tablet, and phone. + + + ## Additional Features in SAP Fiori Elements for OData V2 @@ -74,15 +82,15 @@ The following screen recording shows how to enable the flexible column layout an > ### Note: > - For the overview page, the flexible column layout is not relevant. > -> - The analytical list page only supports the `TwoColumnsBeginExpanded` layout. For more information, see [2409984](https://me.sap.com/notes/2409984). +> - The analytical list page supports only the `TwoColumnsBeginExpanded` layout. For more information, see [2409984](https://me.sap.com/notes/2409984). > -> - The flexible column layout can be used in draft and non-draft scenarios. +> - The flexible column layout can be used in both draft and non-draft scenarios. > -> - Both draft and non-draft apps support 2-column and 3-column layouts. +> - Both draft and non-draft applications support 2-column and 3-column layouts. > -> In non-draft flexible column layout apps with create, read, update, and delete \(CRUD\) capabilities, only the last column shows the *Edit* and *Delete* buttons. +> In non-draft flexible column layout applications with create, read, update, and delete \(CRUD\) capabilities, only the last column shows the *Edit* and *Delete* buttons. -To enable the flexible column layout in an app, create an entry in the `manifest.json` file, as follows: +To enable the flexible column layout in an application, you must create an entry in the `manifest.json` file as shown in the following sample code: ``` "sap.ui.generic.app": { @@ -145,7 +153,7 @@ Usually, this setting is made on the main object page. After navigating from the ## Additional Features in SAP Fiori Elements for OData V4 -You must do the following configuration in the application's `manifest.json` file to enable the flexible column layout, compared to a full-screen mode: +You must do the following configuration in the `manifest.json` file to enable the flexible column layout, compared to a full-screen mode: 1. Add the `rootView` object to specify the use of the flexible column layout. @@ -560,9 +568,3 @@ You must set the following keys for each target: > > - In the flexible column layout, a tree table nor an analytical table cannot be displayed on the list report with a draft-enabled service. - - -### Saving Column Resize Information - -The flexible column layout allows end users to resize the columns in both 2-column display and 3-column display, with SAP Fiori elements saving this information in the personalization settings. This information is specific to each application and device type, such as desktop, tablet, and phone. - diff --git a/docs/06_SAP_Fiori_Elements/example-adding-columns-to-a-responsive-table-in-the-list-report-28e9570.md b/docs/06_SAP_Fiori_Elements/example-adding-columns-to-a-responsive-table-in-the-list-report-28e9570.md index 9d8d7e56..486102df 100644 --- a/docs/06_SAP_Fiori_Elements/example-adding-columns-to-a-responsive-table-in-the-list-report-28e9570.md +++ b/docs/06_SAP_Fiori_Elements/example-adding-columns-to-a-responsive-table-in-the-list-report-28e9570.md @@ -143,43 +143,37 @@ The table containing additional custom columns can look like this: > ``` > ### Note: - > In case the fragment needs to be re-used for multiple tabs, the `id` property must be set to make the ids unique. + > To reuse a fragment for multiple tabs, set the `id` property to ensure unique ids. > ### Sample Code: > ``` - > ... "extends":{ - > "extensions":{ + > "extensions":{ > "sap.ui.viewExtensions":{ > "sap.suite.ui.generic.template.ListReport.view.ListReport":{ > "ResponsiveTableColumnsExtension|STTA_C_MP_Product|Expensive":{ > "className":"sap.ui.core.Fragment", - > "fragmentName":"STTA_MP.ext.fragments.ListReportResponsiveTableColumnsExpensive", + > "fragmentName":"STTA_MP.ext.fragments.ListReportResponsiveTableColumns", > "type":"XML", - > "id":"Expensive" - > + > "id":"Expensive" > }, > "ResponsiveTableCellsExtension|STTA_C_MP_Product|Expensive":{ > "className":"sap.ui.core.Fragment", - > "fragmentName":"STTA_MP.ext.fragments.ListReportResponsiveTableCellsExpensive", + > "fragmentName":"STTA_MP.ext.fragments.ListReportResponsiveTableCells", > "type":"XML", - > "id":"Expensive" - > + > "id":"Expensive" > }, > "ResponsiveTableColumnsExtension|STTA_C_MP_Product|Cheap":{ > "className":"sap.ui.core.Fragment", - > "fragmentName":"STTA_MP.ext.fragments.ListReportResponsiveTableColumnsCheap", + > "fragmentName":"STTA_MP.ext.fragments.ListReportResponsiveTableColumns", > "type":"XML", - > "id":"Cheap" - > + > "id":"Cheap" > }, > "ResponsiveTableCellsExtension|STTA_C_MP_Product|Cheap":{ > "className":"sap.ui.core.Fragment", - > "fragmentName":"STTA_MP.ext.fragments.ListReportResponsiveTableCellsCheap", + > "fragmentName":"STTA_MP.ext.fragments.ListReportResponsiveTableCells", > "type":"XML", - > "id":"Cheap" - > + > "id":"Cheap" > },… - > > ``` diff --git a/docs/06_SAP_Fiori_Elements/extension-points-for-tables-d525522.md b/docs/06_SAP_Fiori_Elements/extension-points-for-tables-d525522.md index 5e5c92b8..0d1bc410 100644 --- a/docs/06_SAP_Fiori_Elements/extension-points-for-tables-d525522.md +++ b/docs/06_SAP_Fiori_Elements/extension-points-for-tables-d525522.md @@ -15,7 +15,7 @@ You can use extension points to enhance tables in SAP Fiori elements apps. ## Additional Features in SAP Fiori Elements for OData V2 -You use the following extension points to add additional columns to tables: +You can use the following extension points to add additional columns to tables: @@ -27,7 +27,7 @@ Table Type
-SAP Fiori Elements +Floorplan @@ -136,7 +136,7 @@ Object page -`` +`GridTableColumnsExtension||` @@ -211,9 +211,9 @@ List report > ### Note: > `` is the EntitySet of the current page. `` is the EntitySet of the table the extension is meant for. Use the `` for all table column extensions on the object page, as opposed to all other view extensions on the object page. -You use extension point `ListReportExtension` to replace default navigation within a responsive table in a list report. For more information, see the following example: [Example: Replacing Standard Navigation in a Responsive Table in the List Report](example-replacing-standard-navigation-in-a-responsive-table-in-the-list-report-a12ad60.md). +Use the `ListReportExtension` extension point to replace default navigation within a responsive table in a list report. For more information, see the following example: [Example: Replacing Standard Navigation in a Responsive Table in the List Report](example-replacing-standard-navigation-in-a-responsive-table-in-the-list-report-a12ad60.md). -You use extension point `DetailsExtension` to replace default navigation within a responsive table on an object page. For more information, see the following example: [Example: Replacing Standard Navigation in a Responsive Table on the Object Page](example-replacing-standard-navigation-in-a-responsive-table-on-the-object-page-b20dc7a.md). +Use the `DetailsExtension` extension point to replace default navigation within a responsive table on an object page. For more information, see the following example: [Example: Replacing Standard Navigation in a Responsive Table on the Object Page](example-replacing-standard-navigation-in-a-responsive-table-on-the-object-page-b20dc7a.md). @@ -225,23 +225,23 @@ The table containing additional custom columns can look like this: -**Custom Columns in a Table** +**Custom Column in a Table** -![](images/Custom_Columns_00819cd.png "Custom Columns in a Table") +![](images/Custom_Columns_00819cd.png "Custom Column in a Table") > ### Note: > When adding custom columns to tables, each column needs a column key as its unique identifier. Use only the following characters: > -> - : +> - Colon \(:\) > -> - \_ +> - Underscore \(\_\) > -> - \- +> - Dash \(-\) > -> - alpha-numeric characters +> - Alpha-numeric characters > > -> For `UI.DataField`, the column keys are created using the OData path. All columns start with ...`::C::` and follow this by the annotation type, for example `UI.DataField, ::` and then the corresponding property. Example: ``. For custom columns, the ID is concatenated with ...`C::CustomColumn::`. +> For `UI.DataField`, the column keys are created using the OData path. All columns start with ...`::C::` followed by the annotation type, for example, `UI.DataField`, `::`, and then the corresponding property. Example: ``. For custom columns, the ID is concatenated with ...`C::CustomColumn::`. @@ -249,7 +249,7 @@ The table containing additional custom columns can look like this: 1. Define a fragment for the view extension. - For a custom column in a table, you have to implement two extensions. First, implement the definition of the custom columns, then, implement the content of the custom columns. + For a custom column in a table, you have to implement two extensions. First, implement the definition of the custom columns, then implement the content of the custom columns. > ### Sample Code: > `CustomColumnButton.fragment.xml` @@ -314,7 +314,7 @@ The table containing additional custom columns can look like this: > "CustomColumnOnObjectPage": { > "header": "AnotherColumnLabel", > "template": "SalesOrder.ext.CustomColumnButton", - > "availability": "Adaption" + > "availability": "Adaptation" > } > } > } @@ -346,7 +346,7 @@ The table containing additional custom columns can look like this: > ``` -The `manifest.json` sample code above enables you to add an additional column to an object page. By default, the column isn't visible on the UI. Once it has been added via *Add/Remove Columns*, this is the result: +The `manifest.json` sample code above enables you to add an additional column to an object page. By default, the column isn't visible on the UI. When it has been added by using *Add/Remove Columns*, this is the result: ![](images/Custom_Button_bea7e9b.png) @@ -374,7 +374,7 @@ Description
-key +`key` @@ -384,19 +384,19 @@ aA-zZ, 0-9, :, \_, - -The key of the custom column is needed as an identifier, which can be used as reference for other columns. +The key of the custom column is needed as an identifier which can be used as reference for other columns.
-header +`header` -any Unicode string, a string containing an `i18n` text, a string containing a metadata path +Any Unicode string, a string containing an `i18n` text, a string containing a metadata path > ### Note: > The `i18n` model is the recommended way to add the header text. The use of a metadata path in the header text is optional and not recommended. @@ -406,24 +406,24 @@ any Unicode string, a string containing an `i18n` text, a string containing a me -The header is shown on the table as well as in the add/remove dialog.of +The header is shown on the table as well as in the add/remove dialog.
-tooltip +`tooltip` -any Unicode string, a string containing an `i18n` text +Any Unicode string, a string containing an `i18n` text -The tooltip is shown on the header of the custom columns when the mouse is hovered. +The tooltip is shown on the header of the custom columns when the user hovers over it. > ### Note: > The column header text is displayed as the tooltip if the tooltip isn't defined. @@ -435,54 +435,57 @@ The tooltip is shown on the header of the custom columns when the mouse is hover
-width\* +`width`\* -**auto**|value|inherit; +**`auto`** | `value` | `inherit` -auto: The browser calculates the width. +`auto`: The browser calculates the width. -length: Defines the width in px, cm, etc. +`length`: Defines the width in px, cm, and so on. -%: Defines the width in percent of the containing block. +`%`: Defines the width in percent of the containing block. -inherit: Inherits this property from its parent element. +`inherit`: Inherits this property from its parent element. + +I you don't provide a value, default values are set by SAP Fiori elements. + +> ### Note: +> This setting can also be used for existing annotation columns. -Default values are set by SAP Fiori elements if nothing is set. -Note: This setting can also be used for existing annotation columns.
-importance +`importance` -"High" | "Medium" | "Low" +`"High"` | `"Medium"` | `"Low"` The responsive table provides a feature where the table automatically moves the columns to the pop-in area in the following order based on their importance: -1. Columns with the setting "Low" importance are hidden first. +1. Columns with the `"Low"` importance setting are hidden first. -2. Columns with the setting "Medium" importance are hidden next. +2. Columns with the `"Medium"` importance setting are hidden next. -3. Columns with the setting "High" importance are always displayed. +3. Columns with the `"High"` importance setting are always displayed. > ### Tip: -> The concept for the *Show Details* button applies as described in the topic [Tables](tables-c0f6592.md). +> The concept for the *Show Details* button applies as described in [Tables](tables-c0f6592.md). For more information, see [Configuring Responsive Behavior of a Table](../10_More_About_Controls/configuring-responsive-behavior-of-a-table-38855e0.md). @@ -491,12 +494,12 @@ For more information, see [Configuring Responsive Behavior of a Table](../10_Mor
-horizontalAlign\* +`horizontalAlign`\* -**"Begin"** | "Center" | "End" +**`"Begin"`** | `"Center"` | `"End"` @@ -508,106 +511,113 @@ Aligns the header as well as the content horizontally.
-position +`position` -  +The column ID of the anchor Defines the position of the column relative to other columns. +For more information about finding the column ID of the anchor, see the + +[How to Find Anchors for the Table Column](finding-the-right-key-for-the-anchor-6ffb084.md#loio6ffb084e6d8247d1863005c14e8d5894__section_kfj_bcc_5nb) section in [Finding the Right Key for the Anchor](finding-the-right-key-for-the-anchor-6ffb084.md). +
-position.placement +`position.placement` -**"After"** | "Before" +**`"After"`** | `"Before"` -Defines the placement, either before or after the anchor column. +Defines the placement either before or after the anchor column.
-position.anchor +`position.anchor` -"" +`""` -The key of another column to be used as placement anchor. Columns defined via annotations can be referenced their `FieldId`. +The key of another column to be used as placement anchor. Columns defined with annotations can be referenced by using their `FieldId`.
-template +`template` -  +The relative path to the template file -Defining the target fragment follows the syntax of defining a fragment via Fragment.load +Defines the target fragment following the fragment defining syntax used in `Fragment.load`.
-availability\* +`availability`\* -**"Default"** | "Adaptation" | "Hidden" +**`"Default"`** | `"Adaptation"` | `"Hidden"` Defines where the column is shown. -- Default: it is shown in the table. +- `Default`: it is shown in the table. + +- `Adaptation`: it is initially not shown in the table but is available through key user adaptation -- Adaptation: it is initially not shown in the table but is available via end user adaptation +- `Hidden`: the column is not available in the table nor in key user adaptation. -- Hidden: the column is neither available in the table nor in adaptation + +> ### Note: +> This setting can also be used for existing annotation columns. -Note: This setting can also be used for existing annotation columns.
-properties\* +`properties`\* -Array of string\(s\) +A string or an array of strings @@ -616,24 +626,24 @@ The properties can be any that already exist in the annotations and that can be - Sorting - If sorting is enabled for the table, it is possible to click the header of the custom column. This results in a property or a list of properties for which sorting is enabled. The list is displayed based on the labels of the properties, corresponding to their definition in the annotations. Upon clicking, the table is sorted by the property. The sorting indicator can be seen on all columns that point to the selected property. + If sorting is enabled for the table, it is possible to click the header of the custom column. This opens a list of properties for which sorting is enabled. The list is displayed based on the labels of the properties, corresponding to their definition in the annotations. Upon clicking, the table is sorted by the property. The sorting indicator can be seen on all columns that point to the selected property. - Properties added to any custom column can also be found in the sorting and filtering dialog. Selecting them there results in the same behavior known from other properties in the table. + Properties added to any custom column can also be found in the sorting and filtering dialog and behave the same way as the properties of other columns. > ### Note: - > Sorting is not possible for navigation properties, as this is currently not supported by the back end. + > The back end doesn't support sorting navigation properties. - Message handling - If an error occurs while editing a custom column, the properties list is used to link the message to the column. + If an error occurs while editing a custom column, the property list is used to link the message to the column. - Export to spreadsheet and PDF - Every property listed here will be exported into the spreadsheet or PDF file. When you export to a spreadsheet, the basic export exports all properties in the same column, and the option *Split cells with multiple values* exports each property in a separate column. Custom columns without a properties list will not be exported. For more information, see [Using the Export Button](using-the-export-button-4bab6f2.md). + Every listed property is exported into the spreadsheet or PDF file. When exporting to a spreadsheet, the basic export exports all properties in the same column, and the option *Split cells with multiple values* exports each property in a separate column. Custom columns without a property list are not exported. For more information, see [Using the Export Button](using-the-export-button-4bab6f2.md). - Copying row or range - Every property listed here will be copied to the clipboard when using the row or range copy. + Every listed property is copied to the clipboard when using the row or range copy. @@ -643,7 +653,7 @@ The properties can be any that already exist in the annotations and that can be
-required +`required` @@ -653,10 +663,10 @@ required -Indicates whether a custom column is required. If set to `true`, an asterisk will be displayed in the column header. +Indicates whether a custom column is required. If set to `true`, an asterisk is displayed in the column header. > ### Note: -> This is only a visual indicator and no additional checks are performed by the framework. +> This is only a visual indicator. No additional checks are performed by the framework. @@ -664,24 +674,24 @@ Indicates whether a custom column is required. If set to `true`, an asterisk wil
-\(\*\) = optional value +\(\*\) = optional value. -**bold** formatting: default/fallback behavior +**Bold** formatting: default/fallback behavior. -The UI model can be leveraged within the fragment, for example to react to changes of the `editMode`: +The UI model can be leveraged within the fragment, for example, to react to changes of the `editMode`, for example. See the following code sample: > ### Sample Code: > ``` > enabled="{= ${ui>/editMode} === 'Editable'}" > ``` -For the correct positioning of your custom elements, you need to identify an anchor element. For more information, see [Finding the Right Key for the Anchor](finding-the-right-key-for-the-anchor-6ffb084.md). +To correctly position your custom elements, you must identify an anchor element. For more information, see [Finding the Right Key for the Anchor](finding-the-right-key-for-the-anchor-6ffb084.md). ### Sorting and Filtering -You can add the configuration to support sorting and filtering via "properties" to any custom column as an array of properties: +You can add the configuration to support sorting and filtering by using `"properties"` for any custom column as an array of properties: > ### Sample Code: > ``` @@ -703,7 +713,7 @@ If sorting is applied, the indicator is added to any column that points to the p ![](images/Sorted_By_Property_48480a8.png) -Properties added to any custom column can also be found in the sorting and filtering dialog \(make sure sorting and filtering is available for your table\): +Properties added to any custom column can also be found in the sorting and filtering dialog \(ensure that sorting and filtering is available for your table\): ![](images/Sorting_and_Filterin_Dialog_d8b8a6e.png) @@ -711,5 +721,5 @@ Properties added to any custom column can also be found in the sorting and filte ### Live Example: Custom Column with `Field` Building Block -You can explore and work with the coding yourself. Check out our live example in the flexible programming model explorer at [Custom Column](https://ui5.sap.com/test-resources/sap/fe/core/fpmExplorer/index.html#/customElements/customElementsOverview/customColumnContent). +Check out our live example in the flexible programming model explorer at [Custom Column](https://ui5.sap.com/test-resources/sap/fe/core/fpmExplorer/index.html#/customElements/customElementsOverview/customColumnContent). diff --git a/docs/06_SAP_Fiori_Elements/flexible-programming-model-549749b.md b/docs/06_SAP_Fiori_Elements/flexible-programming-model-549749b.md new file mode 100644 index 00000000..3ce89e90 --- /dev/null +++ b/docs/06_SAP_Fiori_Elements/flexible-programming-model-549749b.md @@ -0,0 +1,19 @@ + + +# Flexible Programming Model + +SAP Fiori elements for OData V4 offers multiple ways to extend applications according to your specific requirements. + +The flexible programming model provides a range of options for this, eliminating the need for a rigid choice between SAP Fiori elements and freestyle SAPUI5 development. + +While you have the freedom to use any SAPUI5 coding or controls in extension points, you can also make use of our building blocks and controller extensions to enhance your application. + +You can even create a custom app that runs on the SAP Fiori elements framework, where all pages are treated like custom pages. + +For more information and live examples, see [Flexible Programming Model](https://ui5.sap.com/test-resources/sap/fe/core/fpmExplorer/index.html#/overview/introduction). + +**Related Information** + + +[Building Blocks](building-blocks-24c1304.md "SAP Fiori elements provides you with building blocks that allow you to create a visual representation of your data in a convenient way.") + diff --git a/docs/06_SAP_Fiori_Elements/further-features-of-the-field-f49a0f7.md b/docs/06_SAP_Fiori_Elements/further-features-of-the-field-f49a0f7.md index 4398147a..77bba917 100644 --- a/docs/06_SAP_Fiori_Elements/further-features-of-the-field-f49a0f7.md +++ b/docs/06_SAP_Fiori_Elements/further-features-of-the-field-f49a0f7.md @@ -798,18 +798,25 @@ In SAP Fiori elements for OData V4, you can use the `common.FieldControl` annota > ### Note: > ABAP CDS only supports `@ObjectModel.mandatory` but **not** `@ObjectModel.readOnly`. +**** + + @@ -827,6 +834,11 @@ Property must have a non-null value whenever a save or an update is triggered. T + + @@ -839,6 +851,11 @@ Optional Property can have a null value. + + @@ -849,7 +866,14 @@ ReadOnly + @@ -868,10 +892,18 @@ Property has no meaning in the current entity state and will show up in disabled + +
-Value of the `FieldControl` +Value of the `FieldControl` Behavior + + +`EnumMember` to Use for `FieldControl` Values +
+ +`SAP__common.FieldControlType/Mandatory` +
+ +`SAP__common.FieldControlType/Optional` +
-Property value cannot be changed. In edit mode, this property will not show up as an editable field. +Property value cannot be changed. In edit mode, this property will not show up as an editable field + +. + + + +`SAP__common.FieldControlType/ReadOnly`
+ +SAP\_\_common.FieldControlType/Inapplicable +
+> ### Note: +> When using a path-based value for `FieldControl`, you must ensure that the path of `FieldControl` points to a property based on `Edm.Byte`. + > ### Tip: > Fields that are part of `InsertRestrictions`/`RequiredProperties` or `UpdateRestrictions`/`RequiredProperties` are marked as mandatory only in the `create`/`update` flow. For more information, see [Adding Actions to Tables](adding-actions-to-tables-b623e0b.md). diff --git a/docs/06_SAP_Fiori_Elements/images/Advanced_Panel_3694958.png b/docs/06_SAP_Fiori_Elements/images/Advanced_Panel_3694958.png new file mode 100644 index 00000000..9b4259f8 Binary files /dev/null and b/docs/06_SAP_Fiori_Elements/images/Advanced_Panel_3694958.png differ diff --git a/docs/06_SAP_Fiori_Elements/images/Apply_Criticality_eb2d18e.png b/docs/06_SAP_Fiori_Elements/images/Apply_Criticality_eb2d18e.png new file mode 100644 index 00000000..2c01a807 Binary files /dev/null and b/docs/06_SAP_Fiori_Elements/images/Apply_Criticality_eb2d18e.png differ diff --git a/docs/06_SAP_Fiori_Elements/images/Apply_Formatter_Date_Type_6789eda.png b/docs/06_SAP_Fiori_Elements/images/Apply_Formatter_Date_Type_6789eda.png new file mode 100644 index 00000000..a4cccd71 Binary files /dev/null and b/docs/06_SAP_Fiori_Elements/images/Apply_Formatter_Date_Type_6789eda.png differ diff --git a/docs/06_SAP_Fiori_Elements/images/Apply_Formatter_Number_Type_bdecc76.png b/docs/06_SAP_Fiori_Elements/images/Apply_Formatter_Number_Type_bdecc76.png new file mode 100644 index 00000000..c55808c9 Binary files /dev/null and b/docs/06_SAP_Fiori_Elements/images/Apply_Formatter_Number_Type_bdecc76.png differ diff --git a/docs/06_SAP_Fiori_Elements/images/Apply_Indicators_5276fe0.png b/docs/06_SAP_Fiori_Elements/images/Apply_Indicators_5276fe0.png new file mode 100644 index 00000000..17fbd409 Binary files /dev/null and b/docs/06_SAP_Fiori_Elements/images/Apply_Indicators_5276fe0.png differ diff --git a/docs/06_SAP_Fiori_Elements/images/Apply_Trend_0169576.png b/docs/06_SAP_Fiori_Elements/images/Apply_Trend_0169576.png new file mode 100644 index 00000000..56632b83 Binary files /dev/null and b/docs/06_SAP_Fiori_Elements/images/Apply_Trend_0169576.png differ diff --git a/docs/06_SAP_Fiori_Elements/images/Apply_Unit_of_Measure_484103c.png b/docs/06_SAP_Fiori_Elements/images/Apply_Unit_of_Measure_484103c.png new file mode 100644 index 00000000..6b64b242 Binary files /dev/null and b/docs/06_SAP_Fiori_Elements/images/Apply_Unit_of_Measure_484103c.png differ diff --git a/docs/06_SAP_Fiori_Elements/images/Card_Actions_0480caa.png b/docs/06_SAP_Fiori_Elements/images/Card_Actions_0480caa.png new file mode 100644 index 00000000..e7dba690 Binary files /dev/null and b/docs/06_SAP_Fiori_Elements/images/Card_Actions_0480caa.png differ diff --git a/docs/06_SAP_Fiori_Elements/images/Card_Content_6ce9f32.png b/docs/06_SAP_Fiori_Elements/images/Card_Content_6ce9f32.png new file mode 100644 index 00000000..25025f60 Binary files /dev/null and b/docs/06_SAP_Fiori_Elements/images/Card_Content_6ce9f32.png differ diff --git a/docs/06_SAP_Fiori_Elements/images/Card_Generator_Dialog_500278e.png b/docs/06_SAP_Fiori_Elements/images/Card_Generator_Dialog_500278e.png new file mode 100644 index 00000000..bee509f7 Binary files /dev/null and b/docs/06_SAP_Fiori_Elements/images/Card_Generator_Dialog_500278e.png differ diff --git a/docs/06_SAP_Fiori_Elements/images/Card_Header_2b03d19.png b/docs/06_SAP_Fiori_Elements/images/Card_Header_2b03d19.png new file mode 100644 index 00000000..2506137b Binary files /dev/null and b/docs/06_SAP_Fiori_Elements/images/Card_Header_2b03d19.png differ diff --git a/docs/06_SAP_Fiori_Elements/images/Cards_Folder_Under_Webapp_8516273.png b/docs/06_SAP_Fiori_Elements/images/Cards_Folder_Under_Webapp_8516273.png new file mode 100644 index 00000000..c77e5d61 Binary files /dev/null and b/docs/06_SAP_Fiori_Elements/images/Cards_Folder_Under_Webapp_8516273.png differ diff --git a/docs/06_SAP_Fiori_Elements/images/FCL_Master_Detail_9ff7dd4.jpg b/docs/06_SAP_Fiori_Elements/images/FCL_Master_Detail_9ff7dd4.jpg deleted file mode 100644 index 5cbfce3a..00000000 Binary files a/docs/06_SAP_Fiori_Elements/images/FCL_Master_Detail_9ff7dd4.jpg and /dev/null differ diff --git a/docs/06_SAP_Fiori_Elements/images/FCL_Master_Detail_9ff7dd4.png b/docs/06_SAP_Fiori_Elements/images/FCL_Master_Detail_9ff7dd4.png new file mode 100644 index 00000000..8e5338bb Binary files /dev/null and b/docs/06_SAP_Fiori_Elements/images/FCL_Master_Detail_9ff7dd4.png differ diff --git a/docs/06_SAP_Fiori_Elements/images/Flexible_Programming_Model_Explorer_4579202.png b/docs/06_SAP_Fiori_Elements/images/Flexible_Programming_Model_Explorer_4579202.png new file mode 100644 index 00000000..b022138f Binary files /dev/null and b/docs/06_SAP_Fiori_Elements/images/Flexible_Programming_Model_Explorer_4579202.png differ diff --git a/docs/06_SAP_Fiori_Elements/images/Generate_Card_in_User_Menu_b9f3b50.png b/docs/06_SAP_Fiori_Elements/images/Generate_Card_in_User_Menu_b9f3b50.png new file mode 100644 index 00000000..45c9517e Binary files /dev/null and b/docs/06_SAP_Fiori_Elements/images/Generate_Card_in_User_Menu_b9f3b50.png differ diff --git a/docs/06_SAP_Fiori_Elements/images/More_Options_64c45fc.png b/docs/06_SAP_Fiori_Elements/images/More_Options_64c45fc.png new file mode 100644 index 00000000..9c7841a3 Binary files /dev/null and b/docs/06_SAP_Fiori_Elements/images/More_Options_64c45fc.png differ diff --git a/docs/06_SAP_Fiori_Elements/images/Preview_of_the_Adaptive_Card_9ac91e4.png b/docs/06_SAP_Fiori_Elements/images/Preview_of_the_Adaptive_Card_9ac91e4.png new file mode 100644 index 00000000..6a3cc5f4 Binary files /dev/null and b/docs/06_SAP_Fiori_Elements/images/Preview_of_the_Adaptive_Card_9ac91e4.png differ diff --git a/docs/06_SAP_Fiori_Elements/images/Preview_of_the_Integration_Card_759c582.png b/docs/06_SAP_Fiori_Elements/images/Preview_of_the_Integration_Card_759c582.png new file mode 100644 index 00000000..6b2ddc20 Binary files /dev/null and b/docs/06_SAP_Fiori_Elements/images/Preview_of_the_Integration_Card_759c582.png differ diff --git a/docs/06_SAP_Fiori_Elements/images/Three_Columns_End_Expanded_0f5a9cc.png b/docs/06_SAP_Fiori_Elements/images/Three_Columns_End_Expanded_0f5a9cc.png index 8c33784a..a2dddab9 100644 Binary files a/docs/06_SAP_Fiori_Elements/images/Three_Columns_End_Expanded_0f5a9cc.png and b/docs/06_SAP_Fiori_Elements/images/Three_Columns_End_Expanded_0f5a9cc.png differ diff --git a/docs/06_SAP_Fiori_Elements/images/Three_Columns_Mid_Expanded_227c14d.png b/docs/06_SAP_Fiori_Elements/images/Three_Columns_Mid_Expanded_227c14d.png index da367804..38fc303d 100644 Binary files a/docs/06_SAP_Fiori_Elements/images/Three_Columns_Mid_Expanded_227c14d.png and b/docs/06_SAP_Fiori_Elements/images/Three_Columns_Mid_Expanded_227c14d.png differ diff --git a/docs/06_SAP_Fiori_Elements/images/Two_Columns_Begin_Expanded_c34a5e7.png b/docs/06_SAP_Fiori_Elements/images/Two_Columns_Begin_Expanded_c34a5e7.png index 499693f6..d73f6c65 100644 Binary files a/docs/06_SAP_Fiori_Elements/images/Two_Columns_Begin_Expanded_c34a5e7.png and b/docs/06_SAP_Fiori_Elements/images/Two_Columns_Begin_Expanded_c34a5e7.png differ diff --git a/docs/06_SAP_Fiori_Elements/images/Two_Columns_Mid_Expanded_392c14f.png b/docs/06_SAP_Fiori_Elements/images/Two_Columns_Mid_Expanded_392c14f.png index 80017507..712e8c7c 100644 Binary files a/docs/06_SAP_Fiori_Elements/images/Two_Columns_Mid_Expanded_392c14f.png and b/docs/06_SAP_Fiori_Elements/images/Two_Columns_Mid_Expanded_392c14f.png differ diff --git a/docs/06_SAP_Fiori_Elements/maintaining-standard-texts-for-charts-37cd601.md b/docs/06_SAP_Fiori_Elements/maintaining-standard-texts-for-charts-37cd601.md index 91d263f3..78695a57 100644 --- a/docs/06_SAP_Fiori_Elements/maintaining-standard-texts-for-charts-37cd601.md +++ b/docs/06_SAP_Fiori_Elements/maintaining-standard-texts-for-charts-37cd601.md @@ -7,9 +7,9 @@ For charts in analytical list pages, list reports, and object pages, if the syst The following UI texts are displayed by default: - SAP Fiori elements for OData V2 - - When no filters are applied and no data is found, a *No data found* message is displayed in the object page chart, and the message *To start, set relevant filters* is displayed in the list report chart. + - When no filters are applied and no data is found, a *No data found.* message is displayed in the object page chart, and the message *To start, set the relevant filters and choose "Go".* is displayed in the list report chart. - - When filters are applied and the search shows no results, the message *No data found. Try adjusting the search or filter parameters* is displayed in the object page chart, and the message *There is no data for the selected filter criteria and chart view* is displayed in the list report chart. + - When filters are applied and the search shows no results, the message *No data found. Try adjusting the search or filter parameters.* is displayed in the object page chart, and the message *There is no data for the selected filter criteria and chart view.* is displayed in the list report chart. - SAP Fiori elements for OData V4 diff --git a/docs/06_SAP_Fiori_Elements/maintaining-standard-texts-for-tables-aacfac5.md b/docs/06_SAP_Fiori_Elements/maintaining-standard-texts-for-tables-aacfac5.md index 5f337fbf..130a252c 100644 --- a/docs/06_SAP_Fiori_Elements/maintaining-standard-texts-for-tables-aacfac5.md +++ b/docs/06_SAP_Fiori_Elements/maintaining-standard-texts-for-tables-aacfac5.md @@ -7,11 +7,11 @@ You can use the i18n file of your app to adapt the standard UI texts that are di The following UI texts are displayed by default: - SAP Fiori elements for OData V2 - - When no filters are applied and no data is found, a *No items available* message is shown in the object page table, and the message *To start, set relevant filters* is shown in the list report table. + - When no filters are applied and no data is found, a *No items available.* message is shown in the object page table, and the message *To start, set the relevant filters and choose "Go".* is shown in the list report table. - - When filters are applied and the search shows no results, the message *No items available. Try adjusting the search or filter parameters* is shown in the object page table, and the message *No data found. Try adjusting the search or filter criteria* is shown in the list report table. + - When filters are applied and the search shows no results, the message *No items available. Try adjusting the search or filter parameters.* is shown in the object page table, and the message *No data found. Try adjusting the search or filter criteria.* is shown in the list report table. - - When the table is used in multi-view mode and there is no data found, the message *There are no items for the selected filter criteria and table view* is shown in the object page table, and the message *There is no data for the selected filter criteria and table view* is shown in the list report table. + - When the table is used in multi-view mode and there is no data found, the message *There are no items for the selected filter criteria and table view.* is shown in the object page table, and the message *There is no data for the selected filter criteria and table view.* is shown in the list report table. - SAP Fiori elements for OData V4 diff --git a/docs/06_SAP_Fiori_Elements/multi-selection-for-intent-based-navigation-640cabf.md b/docs/06_SAP_Fiori_Elements/multi-selection-for-intent-based-navigation-640cabf.md index 91d8e5f6..9c72ab39 100644 --- a/docs/06_SAP_Fiori_Elements/multi-selection-for-intent-based-navigation-640cabf.md +++ b/docs/06_SAP_Fiori_Elements/multi-selection-for-intent-based-navigation-640cabf.md @@ -5,10 +5,10 @@ By default, multi-selection for intent-based navigation is enabled. > ### Note: -> This topic is currently only applicable to SAP Fiori elements for OData V4. +> This topic is only applicable to SAP Fiori elements for OData V4. > ### Note: -> The records which do not have a unique key field cannot be identified. For example, if the following contexts are to be passed during navigation: +> The records that do not have a unique key field cannot be identified. For example, if the following contexts are to be passed during navigation: > > > @@ -82,7 +82,7 @@ By default, multi-selection for intent-based navigation is enabled. > >
> -> The navigation context that is passed has \(P1=A or B\) and \(P2=X or Y\) rather than \(P1=A and P2=X\) and \(P1=B and P2=Y\) and \(P1=A and P2=Y\). In the target app, individual properties are concatenated via AND, and multiple property values are concatenated via OR: \(P1=A OR P1=B\) AND \(P2=X OR P2=Y\). This might result in an additional record BX. +> The navigation context that is passed has \(P1=A or B\) and \(P2=X or Y\) rather than \(P1=A and P2=X\) and \(P1=B and P2=Y\) and \(P1=A and P2=Y\). In the target app, individual properties are concatenated using AND, and multiple property values are concatenated using OR: \(P1=A OR P1=B\) AND \(P2=X OR P2=Y\). This might result in an additional record BX. The selection variant that is passed has the following format: diff --git a/docs/06_SAP_Fiori_Elements/overview-page-card-74332d5.md b/docs/06_SAP_Fiori_Elements/overview-page-card-74332d5.md index 7606aa43..a61282b6 100644 --- a/docs/06_SAP_Fiori_Elements/overview-page-card-74332d5.md +++ b/docs/06_SAP_Fiori_Elements/overview-page-card-74332d5.md @@ -119,11 +119,11 @@ Card actions are available as of SAPUI5 1.110. You can access and perform the ca ## Cards in *Insights* -You can add and use the analytical, list and table cards within the *Insights* section of *My Home* in SAP S/4HANA Cloud. The objective of displaying cards on the entry page is to visualize charts, KPI´s and counters in the form of interest cards. +You can add and use the analytical, list and table cards within the *Insights* section of **My Home** in SAP S/4HANA Cloud. The objective of displaying cards on the entry page is to visualize charts, KPI´s and counters in the form of interest cards. To add a card to the *Insights* section, select the *More* option from the card and choose *Add Card to Insights*. In the subsequent dialog box, you can update the card's *Title* and the *Subtitle*. Click *Add* to display the card in the *Insights* section. -Note that only eight cards at a time can be displayed in the *Insights* section. If the maximum number of cards is already displayed on the entry page, the selected card is added to the *Edit Insights* dialog box. You can choose to select or deselect cards by editing the *Insights* section. For more information, see [*My Home* in SAP S/4HANA Cloud](https://help.sap.com/docs/SAP_S4HANA_CLOUD/4fc8d03390c342da8a60f8ee387bca1a/8a60279e8d2041b5ad8d3455fab0f3ef.html). +Note that only eight cards at a time can be displayed in the *Insights* section. If the maximum number of cards is already displayed on the entry page, the selected card is added to the *Edit Insights* dialog box. You can choose to select or deselect cards by editing the *Insights* section. For more information, see [**My Home** in SAP S/4HANA Cloud](https://help.sap.com/docs/SAP_S4HANA_CLOUD/4fc8d03390c342da8a60f8ee387bca1a/8a60279e8d2041b5ad8d3455fab0f3ef.html). @@ -151,5 +151,5 @@ An application can also restrict the generation of individual analytical, list, > ``` > ### Note: -> If custom navigation is enabled for a card, navigation from the *Insights* section of *My Home* for that card leads to the parent overview page application instead of the target maintained in the overview page card. +> If custom navigation is enabled for a card, navigation from the *Insights* section of **My Home** for that card leads to the parent overview page application instead of the target maintained in the overview page card. diff --git a/docs/06_SAP_Fiori_Elements/sap-fiori-elements-feature-map-62d3f7c.md b/docs/06_SAP_Fiori_Elements/sap-fiori-elements-feature-map-62d3f7c.md index a640749a..e65d8f70 100644 --- a/docs/06_SAP_Fiori_Elements/sap-fiori-elements-feature-map-62d3f7c.md +++ b/docs/06_SAP_Fiori_Elements/sap-fiori-elements-feature-map-62d3f7c.md @@ -200,7 +200,7 @@ Add card to insights -[Creating Cards for the Insights Cards Section of My Home in SAP S/4HANA](creating-cards-for-the-insights-cards-section-of-my-home-in-sap-s-4hana-9b13559.md) +[Creating Cards for the Insights Cards Section of My Home in SAP S/4HANA Cloud and My Home in SAP S/4HANA](creating-cards-for-the-insights-cards-section-of-my-home-in-sap-s-4hana-cloud-and-my-home-9b13559.md) @@ -511,6 +511,7 @@ Building blocks - List report \(OData V4\) - Object page \(OData V4\) +- Anaytical list page \(OData V4\) @@ -868,13 +869,16 @@ Chart building block - List report \(OData V4\) - Object page \(OData V4\) +- Anaytical list page \(OData V4\) -[Building Blocks](building-blocks-24c1304.md) +[Building Blocks](building-blocks-24c1304.md) + +[Flexible Programming Model](flexible-programming-model-549749b.md) @@ -1828,7 +1832,7 @@ Object page - +  @@ -2408,7 +2412,7 @@ Export to spreadsheet -[Using the Export Button](using-the-export-button-4bab6f2.md) +[Using the Export Button](using-the-export-button-4bab6f2.md) @@ -2439,13 +2443,14 @@ Field building block - List report \(OData V4\) - Object page \(OData V4\) +- Anaytical list page \(OData V4\) -[Building Blocks](building-blocks-24c1304.md) +[Building Blocks](building-blocks-24c1304.md) @@ -2584,13 +2589,14 @@ FilterBar building block - List report \(OData V4\) - Object page \(OData V4\) +- Anaytical list page \(OData V4\) -[Building Blocks](building-blocks-24c1304.md) +[Building Blocks](building-blocks-24c1304.md) @@ -2683,13 +2689,14 @@ FlexibleColumnLayoutActions building block - List report \(OData V4\) - Object page \(OData V4\) +- Anaytical list page \(OData V4\) -[Building Blocks](building-blocks-24c1304.md) +[Building Blocks](building-blocks-24c1304.md) @@ -2725,6 +2732,54 @@ flexible column layout building block +Flexible Programming Model + + + + +- List report \(OData V4\) +- Object page \(OData V4\) +- Analytical list page \(OData V4\) + + + + + + +[Flexible Programming Model](flexible-programming-model-549749b.md) + +[Building Blocks](building-blocks-24c1304.md) + +[Extension Points for Sections on the Object Page](extension-points-for-sections-on-the-object-page-92ad996.md) + +[Extension Points for Pages](extension-points-for-pages-ecdf1d6.md) + + + + +  + + + + + + +**Flexible Programming Model Explorer** + + + +![](images/Flexible_Programming_Model_Explorer_4579202.png) + + + + +FPM + + + + + + Footer toolbar @@ -2761,7 +2816,9 @@ Footer toolbar -  +flexible programming model + +FPM @@ -2873,6 +2930,7 @@ FormElement building block - List report \(OData V4\) - Object page \(OData V4\) +- Anaytical list page \(OData V4\) @@ -3436,9 +3494,7 @@ Keep alive -- [Refresh Data Set for Back Navigation When sap-keep-alive Is Set to True](refresh-data-set-for-back-navigation-when-sap-keep-alive-is-set-to-true-f1c2704.md) - - +[Refresh Data Set for Back Navigation When sap-keep-alive Is Set to True](refresh-data-set-for-back-navigation-when-sap-keep-alive-is-set-to-true-f1c2704.md) @@ -4251,6 +4307,7 @@ MicroChart building block - List report \(OData V4\) - Object page \(OData V4\) +- Anaytical list page \(OData V4\) @@ -4526,7 +4583,11 @@ Navigation -[Configuring Navigation](configuring-navigation-a424275.md) [Example: Enable Internal Navigation to Different Detail Page](example-enable-internal-navigation-to-different-detail-page-75002b3.md) [Handling of the preferredMode Parameter](handling-of-the-preferredmode-parameter-bfaf3cc.md) +[Configuring Navigation](configuring-navigation-a424275.md) + +[Example: Enable Internal Navigation to Different Detail Page](example-enable-internal-navigation-to-different-detail-page-75002b3.md) + +[Handling of the preferredMode Parameter](handling-of-the-preferredmode-parameter-bfaf3cc.md) @@ -4657,6 +4718,7 @@ Paginator building block - List report \(OData V4\) - Object page \(OData V4\) +- Anaytical list page \(OData V4\) @@ -5422,6 +5484,7 @@ Share building block - List report \(OData V4\) - Object page \(OData V4\) +- Anaytical list page \(OData V4\) @@ -5819,6 +5882,7 @@ Table building block - List report \(OData V4\) - Object page \(OData V4\) +- Anaytical list page \(OData V4\) @@ -6330,6 +6394,7 @@ TreeTable building block - List report \(OData V4\) - Object page \(OData V4\) +- Anaytical list page \(OData V4\) diff --git a/docs/06_SAP_Fiori_Elements/tables-c0f6592.md b/docs/06_SAP_Fiori_Elements/tables-c0f6592.md index 7ef1cb12..938ff232 100644 --- a/docs/06_SAP_Fiori_Elements/tables-c0f6592.md +++ b/docs/06_SAP_Fiori_Elements/tables-c0f6592.md @@ -12,7 +12,7 @@ The following table types are available: - Grid table - Desktop-centric table type that allows users to scroll in both directions. This table type can handle a large number of items and columns. + Desktop-centric table type that allows scrolling in both directions. This table type can handle a large number of items and columns. - Tree table @@ -20,25 +20,23 @@ The following table types are available: - Analytical table - Contains data structured in rows and columns. It provides several powerful options for working with data, including advanced grouping and aggregations. + This table type contains data structured in rows and columns. It provides several powerful options for working with data, including advanced grouping and aggregations. In contrast to other tables, the analytical data binding used by the analytical table automatically displays an aggregated number in a cell. -The table representation that suits the service is chosen by default during the app creation. The responsive table is chosen as the default table type. The analytical table is chosen as the default table type for analytical services. +The table representation that suits the service is chosen by default during the app creation. The responsive table is set as the default table type while the analytical table is selected as the default table type for analytical services. -Application developers can change the default table type to suit their needs. For more information about the table types, see [Tables: Which One Should I Choose?](../10_More_About_Controls/tables-which-one-should-i-choose-148892f.md). +You can change the default table type to suit your needs. -For more information about defining the `UI.LineItem` annotation that describes the table, see [Defining Line Items](defining-line-items-f0e1e17.md). +For more information about the table types, see [Tables: Which One Should I Choose?](../10_More_About_Controls/tables-which-one-should-i-choose-148892f.md). For more information about defining the `UI.LineItem` annotation that describes the table, see [Defining Line Items](defining-line-items-f0e1e17.md). -The table control uses page mechanisms while loading data. - -It contains the following: +The table control uses page mechanisms while loading data. It contains the following: - Layout management -- Toolbar with actions rendered as text icons, for example, *Personalize* +- Toolbar with actions rendered as text icons, for example, *Personalize*. -- Application-specific actions rendered as text buttons, for example, *Copy*, *Approve*, and *Delete* +- Application-specific actions rendered as text buttons, for example, *Copy*, *Approve*, and *Delete*. - Indication of draft status \(only for list report tables\) @@ -74,7 +72,7 @@ When implementing custom actions, you can use the `extensionAPI.getSelectedConte ## Showing or Hiding Columns Based on Importance and Available Screen Size in Responsive Tables -You can show or hide columns of the list report and object page tables depending on the screen width. For example, if the browser window is small, if the app is running on a device with a smaller screen, or if you're using the flexible column layout. The value of the `UI.Importance` annotation for the field determines which columns are hidden or moved when the screen size is reduced. +You can show or hide columns of the list report and object page tables depending on the screen width. For example, if the browser window is small, if the application is running on a device with a smaller screen, or if you're using the flexible column layout. The value of the `UI.Importance` annotation for the field determines which columns are hidden or moved when the screen size is reduced. You can use the `UI.Importance` annotation to set the importance for table columns as follows: @@ -188,7 +186,7 @@ You can hide the table columns or specific fields within the table column in an ## Searching for Rows in a Table on an Object Page -In responsive, grid, and analytical tables, if the table is searchable \(that is, if an entity set is used for which `sap:searchable` is `true`\), a search field is displayed. You can search for particular rows in the table. +In responsive, grid, and analytical tables, if the table is searchable \(that is, if an entity set is used for which `sap:searchable` is set as `true`\), a search field is displayed. You can search for particular rows in the table. @@ -206,14 +204,12 @@ You can customize the width of a column defined in a line item using the UI anno ## Copying Multiple Rows and Range Selections -Users can copy multiple rows as well as ranges of rows and columns to the clipboard. The selected content \(rows or ranges\) can then be pasted to another application such as Microsoft Excel, Microsoft Word, or to another SAP Fiori elements table. Note that the copying from a table functionality doesn’t split the content for fields that contain an amount together with a unit of measure or currency, as well as for fields that contain a value and its description. After copying, users need to adapt such content before pasting it to an SAP Fiori elements table. +End users can copy multiple rows as well as ranges of rows and columns to the clipboard. The selected content \(rows or ranges\) can then be pasted to another application such as Microsoft Excel, Microsoft Word, or to another SAP Fiori elements table. Note that the copying from a table functionality doesn’t split the content for fields that contain an amount together with a unit of measure or currency, as well as for fields that contain a value and its description. After copying, end users need to adapt such content before pasting it to an SAP Fiori elements table. > ### Note: -> - Selecting a range only works for non-responsive tables. -> -> - When using custom columns in SAP Fiori elements for OData V4, the cell content is the properties listed in the `property` array of the custom column definition. For more information, see [Extension Points for Tables](extension-points-for-tables-d525522.md). +> When using custom columns in SAP Fiori elements for OData V4, the cell content is the properties listed in the `property` array of the custom column definition. For more information, see [Extension Points for Tables](extension-points-for-tables-d525522.md). -To select a range with your mouse, click and hold while making a selection. You can also use keyboard shortcuts. +To select a range with the mouse, click and hold while dragging to make a selection. As tables can have cells with editable fields, these fields automatically gain focus upon cell selection. To prevent this, press [CTRL\] on Microsoft Windows or [CMD\] on macOS before selecting a cell with the mouse. Keyboard shortcuts are also available as an alternative for cell selection. @@ -295,6 +291,18 @@ For more information about pasting data to tables and the expected format, see [ + + +## Optimizing Data Loading Using the `scrollThreshold` Parameter + +As end users scroll within grid tables, tree tables, or analytical tables, the application dynamically loads additional records from the back-end system. By default, it loads 300 additional records when scrolling. This default value can be modified by configuring the `scrollThreshold` parameter. + +For more information about configuration in OData V2, see the [Configuring the scrollThreshold Parameter to Optimize Data Loading](tables-c0f6592.md#loioc0f6592a592e47f9bb6d09900de47412__Configuring_the_scrollThreshold_Paramter_v2) subsection in the **Additional Features in SAP Fiori elements for OData V2** section of this topic. + +For more information about configuration in OData V4, see the [Configuring the scrollThreshold Parameter to Optimize Data Loading](tables-c0f6592.md#loioc0f6592a592e47f9bb6d09900de47412__Configuring_the_scrollThreshold_Parameter_v4) subsection in the **Additional Features in SAP Fiori elements for OData V4** section of this topic. + + + ## Additional Features in SAP Fiori Elements for OData V2 @@ -319,7 +327,7 @@ You can set the vertical alignment property for a responsive table using the `ta ### Showing or Hiding the *Copy to Clipboard* Button -By default, the *Copy to Clipboard* button is displayed in the table toolbar if the selection mode, such as single selection or multi selection, is configured for the corresponding table. However, you can also configure the visibility of the *Copy to Clipboard* button by defining the `copy` settings in the `manifest.json` file. If `copy` is set to `true`, the *Copy to Clipboard* button is shown in the table toolbar. If `copy` is set to `false`, the *Copy to Clipboard* button is hidden from the table toolbar. +By default, the *Copy to Clipboard* button is displayed in the table toolbar. However, you can also configure the visibility of the *Copy to Clipboard* button by defining the `copy` settings in the `manifest.json` file. If `copy` is set to `true`, the *Copy to Clipboard* button is shown in the table toolbar. If `copy` is set to `false`, the *Copy to Clipboard* button is hidden from the table toolbar. > ### Sample Code: > Settings for the List Report Page @@ -437,13 +445,13 @@ Table columns in the object page can be hidden using the `UI.Hidden` annotation The list report and object page tables have a context menu listing the actions. > ### Note: -> The *Open in New Tab or Window* option won't be available in the context menu in the following cases: +> In the following cases, the *Open in New Tab or Window* option isn't available in the context menu: > > - The list report or object page extension controller implements the `onListNavigationExtension` method. > > - The list report table is configured in direct edit mode. For more information about direct edit mode, see [Navigation to an Object Page in Edit Mode](navigation-to-an-object-page-in-edit-mode-8665847.md). -Application developers have the option to exclude the custom actions in the context menu using `excludeFromContextMenu` as shown in the following sample code: +You can choose to exclude the custom actions in the context menu using `excludeFromContextMenu` as shown in the following sample code: > ### Sample Code: > ``` @@ -471,11 +479,17 @@ Application developers have the option to exclude the custom actions in the cont +### Configuring the `scrollThreshold` Parameter to Optimize Data Loading + +To configure the `scrollThreshold` parameter, you can use the UI adaptation option. For more information, see [Adapting the UI: List Report and Object Page](adapting-the-ui-list-report-and-object-page-0d2f1a9.md). + + + ## Additional Features in SAP Fiori Elements for OData V4 -A responsive table is used by default. You can change the table type in the `manifest.json` file. +By default, a responsive table is used. However, you can change the table type by configuring specific settings in the `manifest.json` file. Analytical tables aren't supported on draft-enabled entities. @@ -483,16 +497,14 @@ Analytical tables aren't supported on draft-enabled entities. ### Excluding Fields from Table Personalization -You can exclude specific fields from the table personalization dialog in the list report and object page. You can set the `availability` property of the column to `hidden`. - -For more information, see [Enabling Table Personalization](enabling-table-personalization-3e2b4d2.md). +You can exclude specific fields from the table personalization dialog in the list report and object page by setting the `availability` property of the column to `hidden`. For more information, see [Enabling Table Personalization](enabling-table-personalization-3e2b4d2.md). ### Handling of Search Restrictions > ### Note: -> The analytical table functions differently compared to grid tables and responsive tables. For more information about the configuration of different table types, see [Setting the Table Type](setting-the-table-type-7f844f1.md). +> The analytical table works differently compared to grid tables and responsive tables. For more information about the configuration of different table types, see [Setting the Table Type](setting-the-table-type-7f844f1.md). The search restriction for a table is first looked up in the parent entity \(using `NavigationRestrictions` at the parent entity, with the `NavigationProperty` pointing to the association of the table entity\). @@ -656,7 +668,7 @@ The search restriction for a table is first looked up in the parent entity \(usi ### Freezing Table Columns -You can freeze the first columns of a table so that they always remain visible when scrolling the table horizontally. To do this, add the `frozenColumnCount` parameter to the table's manifest. This parameter also specifies how many columns can be frozen. +You can freeze the first columns of a table to keep them visible when scrolling the table horizontally. To do this, add the `frozenColumnCount` parameter in the `manifest.json` file and specify how many columns to freeze. > ### Sample Code: > `manifest.json` @@ -681,9 +693,7 @@ You can freeze the first columns of a table so that they always remain visible w ### Calculating the Column Width -By default, the column width is calculated based on the type of the content. - -You can include the column header in the calculation using the `widthIncludingColumnHeader` setting in the `manifest.json`. This setting can be defined at table or column level. The `widthIncludingColumnHeader` setting defined at the column level has a higher priority than the `widthIncludingColumnHeader` setting defined at the table level. +By default, the column width is calculated based on the type of the content. You can include the column header while calculating the column width by configuring the `widthIncludingColumnHeader` setting in the `manifest.json` file. This setting can be defined at table or column level. The `widthIncludingColumnHeader` setting defined at the column level has a higher priority than the `widthIncludingColumnHeader` setting defined at the table level. > ### Sample Code: > `manifest.json` @@ -707,7 +717,7 @@ You can include the column header in the calculation using the `widthIncludingCo ### Showing or Hiding the *Copy to Clipboard* Button -By default, the *Copy to Clipboard* button is displayed in the table toolbar if the selection mode, such as single selection or multi selection, is configured for the corresponding table. However, you can also configure the visibility of the *Copy to Clipboard* button by defining the `copy` settings in the `manifest.json` file. +By default, the *Copy to Clipboard* button is displayed in the table toolbar if the selection mode, such as single selection or multi selection, is configured for the corresponding table. However, you can also configure the visibility of the *Copy to Clipboard* button by defining the `disableCopyToClipboard` settings in the `manifest.json` file. > ### Sample Code: > manifest.json @@ -738,6 +748,38 @@ By default, the *Copy to Clipboard* button is displayed in the table toolbar if Table building block also supports the copy to clipboard option. For information, see [API Reference](https://ui5.sap.com/#/api/sap.fe.macros.Table%23overview). + + +### Configuring the `scrollThreshold` Parameter to Optimize Data Loading + +You can configure the `scrollThreshold` parameter in the `manifest.json` file as shown in the following sample code: + +> ### Sample Code: +> manifest.json +> +> ``` +> "sap.ui5": { +> "routing": { +> "targets": { +> "SalesOrderManageList": { +> "options": { +> "settings": { +> "controlConfiguration": { +> "@com.sap.vocabularies.UI.v1.LineItem": { +> "tableSettings":{ +> "type": "GridTable", +> "scrollThreshold": 200 +> } +> } +> } +> } +> } +> } +> } +> } +> } +> ``` + **Related Information** diff --git a/docs/06_SAP_Fiori_Elements/tree-tables-7cf7a31.md b/docs/06_SAP_Fiori_Elements/tree-tables-7cf7a31.md index 923f53ac..da621626 100644 --- a/docs/06_SAP_Fiori_Elements/tree-tables-7cf7a31.md +++ b/docs/06_SAP_Fiori_Elements/tree-tables-7cf7a31.md @@ -34,7 +34,7 @@ SAP Fiori elements for OData V4 supports displaying a tree table on the list rep ## Enabling Tree Tables -To activate tree tables in the list report or object page, the following parameters are needed in the `tableSettings` part of the `manifest.json`: +To enable tree tables in the list report or object page, the following parameters are needed in the `tableSettings` part of the `manifest.json`: - Set the `type` to `TreeTable`. @@ -69,7 +69,7 @@ The following creation modes are supported with a tree table: In the list report, only the `NewPage` \(default\) creation mode and the `CreationDialog` creation mode are supported. -SAP Fiori elements for OData V4 supports the default create mode as well as a custom create mode. To use the custom create mode, the `nodeType` section needs the following annotations to be added: +SAP Fiori elements for OData V4 supports the default create mode as well as a custom create mode. To use the custom create mode, add the following annotations to the `nodeType` section: - `propertyName`: Name of the property on the page entity set used to categorize the node type to be created within the hierarchy. @@ -110,8 +110,7 @@ SAP Fiori elements for OData V4 supports the default create mode as well as a cu **Custom Create Mode Options in the Tree Table** -![](images/Create_button_in_tree_table_46b2fb1.png "Custom Create Mode Options in the Tree - Table") +![](images/Create_button_in_tree_table_46b2fb1.png "Custom Create Mode Options in the Tree Table") @@ -149,7 +148,7 @@ In this example, the create dialog is displayed with the property `Title` for th ### Enabling or Disabling the Create Button or the Create Menu Button -For both the standard create mode and the custom create mode, you can define an extension point `isCreateEnabled` to control whether the *Create* button or *Create Menu* buttons are enabled or disabled. The extension point callback needs to be added to the page controller extension. +For both the standard create mode and the custom create mode, you can define an `isCreateEnabled` extension point to control whether the *Create* button or *Create Menu* buttons are enabled or disabled. The extension point callback needs to be added to the page controller extension. The following parameters are provided to the callback: @@ -208,7 +207,7 @@ The following screenshot shows an example of the outcome. Under an "Intermediary By default, a newly created node is always displayed as the first child below its parent even if a sort or a filter is applied to the table. -You can use the `createInPlace` option to place the new node in its real position below its parent which depends on the sort applied to the table and the back-end server logic. If the new node cannot be visualized due to the filter criteria applied to the table, a message toast is displayed to the end user. +You can use the `createInPlace` option to place the new node in its real position below its parent, which depends on the sort criteria applied to the table and the back-end server logic. If the new node cannot be visualized due to the filter criteria applied to the table, a message toast is displayed to the end user. > ### Note: > In the flexible column layout, when using both the `NewPage` and `createInPlace` options of the `createMode` property, the new entry is shown \(for example, in a subobject page\), but no message toast is displayed if it cannot be shown on the object page due to the applied filter criteria. @@ -245,7 +244,7 @@ You can use the `createInPlace` option to place the new node in its real positio Drag and drop actions are supported by SAP Fiori elements for OData V4 as of SAPUI5 1.124. -Drag and drop between siblings is supported if the `ChangeNextSiblingAction` term is defined in the `RecursiveHierarchyActions` annotation. When using the ABAP RESTful Application Programming Model \(RAP\), this annotation is not set for root entities. Hence, drag and drop between siblings is not supported in the list report. +Drag and drop between siblings is supported if the `ChangeNextSiblingAction` term is defined in the `RecursiveHierarchyActions` annotation. When using the ABAP RESTful Application Programming Model \(RAP\), this annotation is not set for root entities. For this reason, drag and drop between siblings is not supported in the list report. If a node is dropped onto the empty area on the right-hand side of a table, the node is promoted to a root node. In the following example, dropping the "Canada" node onto the highlighted area turns it into a root node, that is, a sibling to the "Europe North" and "America North" nodes. @@ -255,7 +254,7 @@ If a node is dropped onto the empty area on the right-hand side of a table, the ![](images/Dropping_a_Node_onto_the_Empty_Right-Hand_Side_of_a_Table_d74fc6f.png "Dropping a Node onto the Empty Right-Hand Side of a Table") -You can use two extensions to control the behavior of drag and drop: +You can use the following extensions to control the behavior of drag and drop: - `isMoveToPositionAllowed`: Define if a source node can be dropped on a specific parent node. @@ -263,7 +262,7 @@ You can use two extensions to control the behavior of drag and drop: - When dropping as a root node, the parent node is set to `null`. -- `isNodeMovable`: Define if a node can be dragged +- `isNodeMovable`: Define if a node can be dragged. - The associated callback receives the source context as a parameter. @@ -346,10 +345,10 @@ The following screenshot shows another example of the outcome. Moving the "Dubli End users can move a node up or down between its siblings in a tree table. To place a node before its previous sibling or after its next sibling, select the node and choose *Move Up* or *Move Down* from the tree table toolbar. -Moving a node up or down is supported if the `ChangeNextSiblingAction` term is defined in the `RecursiveHierarchyActions` annotation. When using the ABAP RESTful Application Programming Model \(RAP\), this annotation is not set for root entities. Hence, moving up or down a node is not supported in the list report. +Moving a node up or down is supported if the `ChangeNextSiblingAction` term is defined in the `RecursiveHierarchyActions` annotation. When using the ABAP RESTful Application Programming Model \(RAP\), this annotation is not set for root entities. For this reason, moving up or down a node is not supported in the list report. > ### Restriction: -> A node that is created without the option `createInPlace` is displayed as the first child below its parent and is therefore considered "out of place". Move operations are disabled for such nodes. Similarly, moving a node up is disabled if its previous sibling is an "out of place" node. +> A node that is created without the `createInPlace` option is displayed as the first child below its parent and is therefore considered "out of place". Move operations are disabled for such nodes. Similarly, moving a node up is disabled if its previous sibling is an "out of place" node. > > Moving a node up and down is also disabled in the following situations: > @@ -367,20 +366,29 @@ Cut and paste actions are supported by SAP Fiori elements for OData V4 as of SAP Both actions can be enabled or disabled by using the same extension points as for drag and drop: -- `isNodeMovable`: Define if a node can be cut. +- `isNodeMovable`: Defines if a node can be cut. -- `isMoveToPositionAllowed`: Define if a node can be pasted under a specific parent node. +- `isMoveToPositionAllowed`: Defines if a node can be pasted under a specific parent node. -In the following example: the USA node can't be cut or dragged: +In the following example, the USA node can't be cut or dragged: **Example of a Node with Disabled Cut Action** -![](images/Example_of_a_node_with_disabled_cut_action_6478e27.png "Example of a Node - with - Disabled Cut Action") +![](images/Example_of_a_node_with_disabled_cut_action_6478e27.png "Example of a Node with Disabled Cut Action") + + + + + +## Context Menu + +You can open the context menu in the tree table by right-clicking on any node within the table. All the other nodes are greyed out. Only bound actions are included in this menu. + +> ### Note: +> Actions that are specific to tree tables, such as cut, paste, expand entire node, or collapse entire node, are not supported with multi-selection. @@ -430,20 +438,20 @@ You can prevent users from changing the order of root nodes by using the [`Chang If `ChangeSiblingForRootsSupported` is set to `false`, users can't do the following actions: -- move a root node up or down +- Move a root node up or down -- drop a node as a root node between two other root nodes +- Drop a node as a root node between two other root nodes If no specific restrictions have been set for an action, the following actions are supported: -- cutting a root node +- Cutting a root node -- pasting a node as a root node +- Pasting a node as a root node -- dragging a root node +- Dragging a root node -- dropping a node as a root node at the beginning or end of the table or onto the right-hand side of the table +- Dropping a node as a root node at the beginning or end of the table or onto the right-hand side of the table If `ChangeSiblingForRootsSupported` is not defined, it is considered as set to `true`. diff --git a/docs/06_SAP_Fiori_Elements/using-the-application-preview-generator-599428a.md b/docs/06_SAP_Fiori_Elements/using-the-application-preview-generator-599428a.md new file mode 100644 index 00000000..e01fe16b --- /dev/null +++ b/docs/06_SAP_Fiori_Elements/using-the-application-preview-generator-599428a.md @@ -0,0 +1,332 @@ + + + + +# Using the Application Preview Generator + +Applications based on SAP Fiori elements can generate integration cards and adaptive cards. + +You can use cards to provide a preview of the data of the object page. Cards can be shared using SAP Collaboration Manager, Microsoft Teams, or any other platform where the integration card or the adaptive card can be hosted. + +> ### Note: +> - Application preview cards can only be generated for object pages. +> +> - The integration card is displayed by default on the UI, but the adaptive card is always generated at the same time, and you can choose to display it instead. + + + + + +## Prerequisites + +To use the application preview generator, the following requrements must be met: + +- You must have cloned your project in SAP Business Application Studio. + +- After cloning the project, you must ensure that it is compatible with UI5 Tooling v3. If it is not, you must migrate it so that it can work within SAP Business Application Studio. + + - For more information about UI5 Tooling v3, see [Migrate to v3](https://sap.github.io/ui5-tooling/v3/updates/migrate-v3/). + + - For more information about migrating your project, see [Migrate SAP Fiori projects from SAP Web IDE to SAP Business Application Studio](https://community.sap.com/t5/technology-blogs-by-sap/migrate-sap-fiori-projects-from-sap-web-ide-to-sap-business-application/ba-p/13544987). + + + + + + + +## Enabling the Application Preview Generator + +Ensure that you are using the latest version of SAP UI5. To do that, open the `ui5.yaml` file and ensure that the `url` is set to `https://ui5.sap.com`. + +```js +specVersion: "3.1" +metadata: + name: sales-order.wd.sample +type: application +resources: + configuration: + paths: + webapp: webapp +server: + customMiddleware: + - name: fiori-tools-proxy + afterMiddleware: compression + configuration: + ignoreCertError: false + ui5: + path: + - /resources + - /test-resources + url: https://ui5.sap.com + - name: sap-fe-mockserver + mountPath: / + afterMiddleware: compression + configuration: + annotations: + - localPath: './mockserver/sap/opu/odata/sap/salesorder/annotations.xml' + urlPath: '/sap/opu/odata/sap/salesorder;v=2/Annotations*' + services: + - urlPath: '/sap/opu/odata/sap/salesorder' + metadataPath: './mockserver/sap/opu/odata/sap/salesorder/metadata.xml' + mockdataPath: './mockserver/sap/opu/odata/sap/salesorder/data/' +``` + +Next, open a new terminal at a desired project location and run one of the following commands: + +- `npx @sap-ux/create@latest add cards-editor` + +- `npm init @sap-ux@latest add cards-editor` + + + + + + +## Generating Cards + +After enabling the application preview generator as described previously, launch the project by using the `npm run start-cards-generator` command. + +If the landing page of the application is a list report, use the necessary filters or search to navigate to the object page for which the card will be created. After the object page is launched, open the user menu and choose *Generate Card*. + +![](images/Generate_Card_in_User_Menu_b9f3b50.png) + +The following dialog appears: + +![](images/Card_Generator_Dialog_500278e.png) + +Enter the data for the relevant fields in the dialog. For more information about the supported features, see the [Supported features](using-the-application-preview-generator-599428a.md#loio599428aa0b244626a029d5202c1bfaac__section_ysh_2dw_hdc) section in this topic. + +A live preview of the integration card and its corresponding adaptive card is displayed on the right side, as shown in the following screenshots: + + + +**Preview of the Integration Card** + +![](images/Preview_of_the_Integration_Card_759c582.png "Preview of the Integration Card") + + + +**Preview of the Adaptive Card** + +![](images/Preview_of_the_Adaptive_Card_9ac91e4.png "Preview of the Adaptive Card") + +When you have created the desired application preview, choose *Save* to make the cards available within the application repository. + +A new `cards` folder is created under `webapp`. + +![](images/Cards_Folder_Under_Webapp_8516273.png) + +The `manifest.json` file is automatically updated with a new `sap.cards.ap` section that links the cards with the `cards` folder. + +```js +"sap.cards.ap": { + "embeds": { + "ObjectPage": { + "default": "C_STTA_SalesOrder_WD_20", + "manifests": { + "C_STTA_SalesOrder_WD_20": [ + { + "localUri": "cards/op/C_STTA_SalesOrder_WD_20" + } + ] + } + } + } +} +``` + +If you repeat the card generation process, the previously generated card is overwritten with the latest version. + +After adding the cards, you must update the project repository. To do that, merge all the changed files of the project in the repository. + + + + + +## Supported features + +You can use the following features of the card generator dialog: + +**Features of the Card Generator Dialog** + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +Label + + + +Description + + + +Screenshot + +
+ +*Card Header* + + + +You can add a title, a subtitle, and a main indicator as part of the card header. + + + + + +**Card Header** + +![](images/Card_Header_2b03d19.png "Card Header") + +
+ +*Card Content* + + + +You can add properties to groups, change labels, and format the properties to be displayed in the card content. + + + + + +**Card Content** + +![](images/Card_Content_6ce9f32.png "Card Content") + +
+ +*Card Actions* + + + +You can add import-based actions as footer actions of the adaptive card. The recipient of the card can execute these actions from within the Microsoft Teams chat. + + + + + +**Card Actions** + +![](images/Card_Actions_0480caa.png "Card Actions") + +
+ +*Advanced Panel* + + + +You can apply criticality assignments, unit of measure, and text arrangement to properties. The options configured in this panel apply to the specified properties wherever they are used in the card. + + + + + +**Advanced Panel** + +![](images/Advanced_Panel_3694958.png "Advanced Panel") + +
+ + *\(More\)* + + + +You can apply additional options to any property that has this control displayed next to it. The following additional options are available: + +- *Apply Units of Measure*. This option can be applied to properties of string type or number type. + +- *Apply Formatter*: + + - *Date Type*. This option lets you choose how the date and time are formatted. You can format just the date or the date and time together. You can enable or disable UTC formatting for either of those options. If you format the date and time together, you can also apply relative formatting options as described in [Date Format](https://sapui5.hana.ondemand.com/#/topic/91f2eba36f4d1014b6dd926db0e91070). + + - *Number Type*. Numbers can be formatted as *Float*, *Currency*, *Percent*, or *Integer*. + + +- *Apply Criticality*. + +- *Apply Trend*. This option can be applied to properties of string type or number type. + +- *Apply Indicators*. This option can be applied to properties of string type or number type. + + + + + + + + +**Additional Options** + +![](images/More_Options_64c45fc.png "Additional Options") + + + +**Apply Units of Measure** + +![](images/Apply_Unit_of_Measure_484103c.png "Apply Units of Measure") + + + +**Apply Formatter: Date Type** + +![](images/Apply_Formatter_Date_Type_6789eda.png "Apply Formatter: Date Type") + + + +**Apply Formatter: Number Type** + +![](images/Apply_Formatter_Number_Type_bdecc76.png "Apply Formatter: Number Type") + + + +**Apply Criticality** + +![](images/Apply_Criticality_eb2d18e.png "Apply Criticality") + + + +**Apply Trend** + +![](images/Apply_Trend_0169576.png "Apply Trend") + + + +**Apply Indicators** + +![](images/Apply_Indicators_5276fe0.png "Apply Indicators") + +
+ diff --git a/docs/06_SAP_Fiori_Elements/using-the-condensed-table-layout-f3cc057.md b/docs/06_SAP_Fiori_Elements/using-the-condensed-table-layout-f3cc057.md index 12b7f1fb..d7af3a9e 100644 --- a/docs/06_SAP_Fiori_Elements/using-the-condensed-table-layout-f3cc057.md +++ b/docs/06_SAP_Fiori_Elements/using-the-condensed-table-layout-f3cc057.md @@ -4,9 +4,20 @@ You can set the content density to `condensed` for `ui.table` on the list report and object page applications. -To do so, in the `manifest.json` under the relevant section, set `"condensedTableLayout" : true`. Make this setting for the section in which you want the UI table to adapt the condensed style. +To apply the condensed style to a table in a specific section, in the `manifest.json` file within the relevant section, set `"condensedTableLayout" : true` in the `manifest.json`. This setting ensures that the table in the specified section adapts to the condensed layout. -SAP Fiori Elements for OData V2 +> ### Note: +> - Condensed mode is applicable only to grid tables `(sap.ui.table)` and not to responsive tables `(sap.m.table)`. +> +> - The application must run in compact mode. If it runs in cozy mode, the class is not set, even if the manifest key is set to `true`. +> +> - On the object page, the `condensedTableLayout` class can be set only if there is just one section that contains a grid table \(`sap.ui.table`\) or if the icon tab bar is used for navigation between sections, and any section has only one table in it. Otherwise, the class is not applied for the grid table \(`sap.ui.table`\), even if the manifest key is set to `true`. + + + + + +## Additional Features in SAP Fiori Elements for OData V2 > ### Sample Code: > Object Page Table @@ -27,7 +38,11 @@ SAP Fiori Elements for OData V2 > > ``` -SAP Fiori Elements for OData V4 + + + + +## Additional Features in SAP Fiori Elements for OData V4 > ### Sample Code: > Object Page Table @@ -54,13 +69,6 @@ SAP Fiori Elements for OData V4 > } > ``` -> ### Note: -> - Condensed mode applies only to the Grid table \(`sap.ui.table`\), not to the Responsive table \(`sap.m.table`\). -> -> - The app needs to run in compact mode. If it runs in cozy mode, the class is not set, even if the manifest key is set to true. -> -> - On an object page, the `condensedTableLayout` class can be set only if there is just one section that contains a Grid table \(`sap.ui.table`\) or if the icon tab bar is used for navigation between sections, and any section has only one table in it. Otherwise, the class is not applied for the Grid table \(`sap.ui.table`\), even if the manifest key is set to true. - **Related Information** diff --git a/docs/08_Extending_SAPUI5_Applications/supportability-c44813d.md b/docs/08_Extending_SAPUI5_Applications/supportability-c44813d.md index 2304551c..cb66e16e 100644 --- a/docs/08_Extending_SAPUI5_Applications/supportability-c44813d.md +++ b/docs/08_Extending_SAPUI5_Applications/supportability-c44813d.md @@ -13,7 +13,7 @@ If a customized application does not run properly, you can disable the customizi ```js window["sap-ui-config"] = window["sap-ui-config"] ||{}; - window["sap-ui-config"]["xx-disableCustomizing"] = true; + window["sap-ui-config"]["xxDisableCustomizing"] = true; ``` > ### Note: diff --git a/docs/09_Developing_Controls/aggregation-domref-property-5167730.md b/docs/09_Developing_Controls/aggregation-domref-property-5167730.md new file mode 100644 index 00000000..b5098a44 --- /dev/null +++ b/docs/09_Developing_Controls/aggregation-domref-property-5167730.md @@ -0,0 +1,68 @@ + + +# Aggregation `domRef` Property + +If you want to determine the position and size of an element within an aggregation, you can use the `domRef` property to select the respective node in the DOM. + +Here are the possible types of the `domRef` property: + + + + + + + + + + + + + + + +
+ +Type + + + +Description + +
+ +`` + + + +CSS selector to search inside the control DOM node. + +Example: + +- `domRef : "> .content"`: The aggregation's DOM node is a direct child of the control's DOM node and has the CSS class "`content`". + +- `domRef : ":sap-domref"`: The special value `:sap-domref` points to the control's DOM control. + + + + +
+ +`` + + + +Returns a reference to a DOM node. + +This function can be used to find and return an existing DOM node or to create a DOM node as a side effect and add it to the control. For example, you can define an area for an aggregation that normally doesn't have a DOM node. + +This function is called with the control and, if available, the aggregation name as a parameter. You can return an array of DOM nodes, to indicate that you need a bounding box around all the nodes. + +
+ +**Related Information** + + +[Example: Enable VerticalLayout](example-enable-verticallayout-bcd64a1.md "Here's how you enable the VerticalLayout control.") + +[Example: Enable ScrollContainers](example-enable-scrollcontainers-8f794e5.md "Here's how you enable the ScrollContainers control.") + diff --git a/docs/09_Developing_Controls/change-handlers-b103bf6.md b/docs/09_Developing_Controls/change-handlers-b103bf6.md new file mode 100644 index 00000000..84ab6035 --- /dev/null +++ b/docs/09_Developing_Controls/change-handlers-b103bf6.md @@ -0,0 +1,14 @@ + + +# Change Handlers + +Change Handlers are essential modules for change files. + +Change handlers are JavaScript modules implementing functions to apply and revert the content passed via change files. They're also responsible for providing change-handler specific content to change files when they're being written. + +Change Handlers transform the information in UI change files into changes on the UI of an app. + +The flexibility library contains several default change handlers to enable simple controls, for example for the *move*, *reveal*, and *remove* actions. If no default handler is available for your use case, you need to implement your own custom change handler. See [Writing a Custom Change Handler](writing-a-custom-change-handler-6a346a2.md). + +Both custom and default change handlers must be registered so they can be called for their respective controls. See [Registering Change Handlers for UI Changes](registering-change-handlers-for-ui-changes-d5f4de8.md). + diff --git a/docs/09_Developing_Controls/change-visualization-46e29bb.md b/docs/09_Developing_Controls/change-visualization-46e29bb.md new file mode 100644 index 00000000..2b716361 --- /dev/null +++ b/docs/09_Developing_Controls/change-visualization-46e29bb.md @@ -0,0 +1,97 @@ + + +# Change Visualization + +Change visualization is a way for key users to get an overview of the changes that have been made on the UI. + +Change visualization was introduced to provide key users with information about which parts of the application have changed and how they have changed. To provide semantic information about what has changed, change handlers should implement the `getChangeVisualizationInfo` function. + +You can use the `getChangeVisualizationInfo` function to accurately display the change when the user is in *Visualization* mode. The changes are classified and grouped by categories. Each change is represented by a change indicator \(a small bubble\) located on the corresponding control; multiple changes made on the same control will result in the change indicator's color becoming darker. Selecting such a change indicator brings up a table with details for each change. To make this description suitable for your control / action, you can return the following information: + +> ### Sample Code: +> getChangeVisualizationInfo\(\) return object +> +> ``` +> // All properties are optional +> return { +> affectedControls: ["control1"], // Array of IDs of the controls which are affected by the change; default is the change selector +> dependentControls: ["control2"], // Array of IDs of controls that are also affected by the change; for example the source container of a "move" action +> displayControls: ["control1"], // Array of IDs of the controls where the change indicator should be displayed; default is the change selector +> descriptionPayload: { +> category: ChangeCategories.RENAME, // Optional category to classify the change and optimize its visualization. All categories are enumerated in sap.ui.fl.changeHandler.common.ChangeCategories +> descriptionText: "This text will always be shown on the indicator", // Optional text that overrides any standard text that is prepared for that change (if you want to show your own text) +> descriptionTooltip: "This tooltip will always be shown on the indicator", // Optional tooltip that overrides any standard tooltip that is prepared for that change (if you want to show your own tooltip) +> ... -> other category-specific parameters (see the list after this code sample) - these will be ignored if you already provide a descriptionText/descriptionTooltip +> }, // Object containing additional information for the change visualization description, +> updateRequired: true or false // If an element changes its ID (e.g. controls inside a SimpleForm), setting this parameter rebuilds the change indicator in the Visualization mode to keep it up-to-date (in the right place with the right information) +> } +> ``` + +For the `descriptionPayload`, you can define a category to optimize the visualization of that change. The following categories exist: ADD, MOVE, RENAME, COMBINESPLIT, REMOVE, OTHER. Some categories use specific parameters: + +- MOVE: + + - `descriptionPayload.sourceParentContainer` - Parent container from which the element was moved. + + - `descriptionPayload.targetParentContainer` - Parent container to which the element was moved. + + +- RENAME: + + - `descriptionPayload.originalLabel` - Label before the change was applied \(this parameter also supports bindings - the change visualization code resolves the binding before displaying the label\). + + - `descriptionPayload.newLabel` - Label after the change was applied. + + +- COMBINE: + + - `descriptionPayload.originalSelectors` - Selectors of the elements that were combined. + + + +For *settings* changes or changes with category *other*, you can also define a `descriptionText` and `descriptionTooltip` on the `descriptionPayload`, which is directly displayed in the change indicator. These texts replace the standard texts that are generated for the different categories: + +- `descriptionPayload.descriptionText` - The text that is displayed on the change indicator. + +- `descriptionPayload.descriptionTooltip` - The tooltip that is displayed on the change indicator, for example, when the text is long. + + +Some examples: + +> ### Sample Code: +> BaseRename.js +> +> ``` +> getChangeVisualizationInfo: function(oChange) { +> const oNewLabel = oChange.getText([mRenameSettings.changePropertyName]); +> return { +> descriptionPayload: { +> originalLabel: oChange.getRevertData(), +> newLabel: oNewLabel?.value +> } +> }; +> } +> ``` + +> ### Sample Code: +> MoveControls.js +> +> ``` +> MoveControls.getChangeVisualizationInfo = function(oChange) { +> const oChangeContent = oChange.getContent(); +> const oRevertData = oChange.getRevertData()[0]; +> return { +> affectedControls: [oChangeContent.movedElements[0].selector], +> dependentControls: [oChangeContent.source.selector], +> descriptionPayload: { +> sourceParentContainer: oRevertData.sourceParent, +> targetParentContainer: oChangeContent.target.selector +> } +> }; +> }; +> ``` + +If you don't implement this function, a default change visualization is provided for the change, which contains minimal information. This information can potentially be incorrect depending on the complexity of your change. Therefore, we recommend that you check how the visualization looks for your change and make the necessary adjustments. + +To check how the visualization looks, start the application in UI adaptation mode, and select *Visualization* in the header bar. For more information, see [Visualizing UI Changes](https://help.sap.com/docs/ui5-flexibility-for-key-users/ui5-flexibility-for-key-users/visualizing-ui-changes). + diff --git a/docs/09_Developing_Controls/cleanup-after-xml-change-application-7841bf3.md b/docs/09_Developing_Controls/cleanup-after-xml-change-application-7841bf3.md new file mode 100644 index 00000000..2cdc8eb5 --- /dev/null +++ b/docs/09_Developing_Controls/cleanup-after-xml-change-application-7841bf3.md @@ -0,0 +1,14 @@ + + +# Cleanup After XML Change Application + +There's an optional cleanup hook to improve the performance. + +The change handler can implement the optional `onAfterXMLChangeProcessing` hook to clean up after the change has been applied on the XML and before data is stored in the view cache. + +The hook is called separately for all controls \(HTMLElements\) for each change handler that applied a change on that control, even if the handler threw an error during the apply process. + +It's always called after all changes for the control have been applied. It's only called once if multiple changes of the same type were applied on the same control. + +This hook can be used for performance improvements. Example: Data is retrieved and used by more than one change handler. To prevent multiple superfluous calls to the data source, the data is stored in the XML tree as custom data . The `onAfterXMLChangeProcessing` hook is then used to remove the custom data before the view-cache is created from the XML tree. + diff --git a/docs/09_Developing_Controls/condensing-f4e064b.md b/docs/09_Developing_Controls/condensing-f4e064b.md new file mode 100644 index 00000000..fc41d0bf --- /dev/null +++ b/docs/09_Developing_Controls/condensing-f4e064b.md @@ -0,0 +1,200 @@ + + +# Condensing + +Condensing keeps change files clean. + +Each UI change made by a developer, key user or end user with SAPUI5 flexibility results in a change file being stored in the back end. Multiple changes to the same control can lead to superfluous changes that are not required for the target UI, for example, if a text has been renamed multiple times. Condensing minimizes the number of changes to be stored as much as possible. Certain changes, however, can't be condensed, for example, if they have been made on different layers or in different versions. Change handlers therefore have to classify the type of changes they create. + +When the `getCondenserInfo` function is implemented, the change type is enabled to be condensed. Redundant changes are deleted while preserving the target UI. There are several classifications available, but no option to define a custom classification. Depending on the classification, different properties have to be returned by the function: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +Classification + + + +Description + + + +Example + + + +Required Properties + +
+ +All classifications + + + +  + + + +  + + + +`affectedControl, classification` + +
+ +LastOneWins + + + +All changes except for the last one are removed. + + + +*rename* + + + +`uniqueKey` + +
+ +Reverse + + + +Two change types reverse each other like a toggle. A maximum of one change is left. + + + +*hide*/*unhide* + + + +`uniqueKey` + +The unique key has to be the same for both change types that reverse each other. + +
+ +Move + + + +A control is moved inside a container.After any number of *move* changes, only one change of this type remains per control. + + + +  + + + +`sourceContainer, targetContainer, sourceIndex, sourceAggregation, targetAggregation, etTargetIndex, getTargetIndex` + +
+ +Create + + + +A new control is created \(it's not just changing the visibility\) that was previously not in the container. + + + +  + + + +`targetContainer, targetAggregation, setTargetIndex, getTargetIndex` + +
+ +Destroy + + + +A control is destroyed or removed from the container. + + + +  + + + +`targetContainer, sourceIndex, targetAggregation` + +
+ +Update + + + +A change is deleted and integrated in another change. + + + +*addIFrame* + *UpdateIFrame* + + + +`uniqueKey, updateContent` + +The `uniqueKey` and `affectedControl` have to be the same as in the change into which this change is integrated. + +The updates themselves are last one wins, so only the newest *update* change gets integrated. + +The *update* change must not have any impact on any indices. + +The change that receives the update can be of any kind, but additionally needs the *update* property. + +
+ diff --git a/docs/09_Developing_Controls/deactivating-adaptation-of-controls-6af4302.md b/docs/09_Developing_Controls/deactivating-adaptation-of-controls-6af4302.md new file mode 100644 index 00000000..1699a05c --- /dev/null +++ b/docs/09_Developing_Controls/deactivating-adaptation-of-controls-6af4302.md @@ -0,0 +1,36 @@ + + +# Deactivating Adaptation of Controls + +You can specify that some controls cannot be adapted. + +To deactivate adaptation of controls, use the following design-time metadata: + +- `{ actions: "not-adaptable" }`: Disable all actions. + +- `{ actions: "not-adaptable-tree" }`: Disable all actions on a control and all its children. + +- `{ actions: "not-adaptable-visibility" }`: Disable all actions that influence the visibility: *reveal* and *remove*. + + +You can deactivate adaptation of dependent child controls by overwriting the `actions` property. There are two options to do so: + +- Overwrite with `null` value \(soft\) + + Overwrites all actions for all other controls with `null` values. No actions are available for adaptation, but the controls are still adaptable. They can have property changes or other technical change handlers, like `addXML`. + + ``` + ... propagateMetadata: function() { return { actions: null } } ... + ``` + +- Overwrite with `not-adaptable` value \(hard\) + + Overwrites all actions for all other controls with `null` values and determines that the control is not adaptable \(not editable\). Also, no property changes and other technical change handlers are possible. + + ``` + ... propagateMetadata: function() { return { actions: "not-adaptable" } } ... + ``` + + +You can also deactivate adaptation for a particular instance with instance-specific control design-time metadata. For more information, see [Instance-Specific Design-Time Metadata](instance-specific-design-time-metadata-8fa2324.md). + diff --git a/docs/09_Developing_Controls/enable-a-control-for-design-time-usage-6888c17.md b/docs/09_Developing_Controls/enable-a-control-for-design-time-usage-6888c17.md new file mode 100644 index 00000000..8a1916cc --- /dev/null +++ b/docs/09_Developing_Controls/enable-a-control-for-design-time-usage-6888c17.md @@ -0,0 +1,106 @@ + + +# Enable a Control for Design-Time Usage + +To enable a control for design-time usage, follow the steps described here. + + + +
+ +## Prerequisites + +The library containing the control needs to be enabled for design-time usage. See [Enable a Library for Design-Time Usage](enable-a-library-for-design-time-usage-196a7cd.md). + + + + + +## Context + +All design-time metadata must be contained in one special folder within the library. The location is `/designtime`. If there are sub-namespaces in the library, the sub-namespace needs to be present within the `designtime` folder. + +For example, if you have a `sap.m.semantic.SemanticPage` control, you need a `sap/m/designtime/semantic/SemanticPage.designtime.js` file. + + + +## Procedure + +1. Move all existing `.designtime.js` files into the `designtime` folder. + + If the library contains subfolders, repeat their structure within the `designtime` folder. + +2. In the `designtime` folder, in the subfolder for your control, create the following files: + + + + + + + + + + + + + + + + + + + +
+ + File + + + + Description + +
+ + `.designtime.js` + + + + File containing the design-time metadata. For more information, see [Providing Design-Time Metadata](providing-design-time-metadata-5866a47.md). + +
+ + `.icon.(resolution).png` + + + + Icons for controls in different resolutions \(small, medium, large\) + +
+ + `.icon.svg` + + + + Icon for controls that are scalable to different resolutions + +
+ +3. In the `.js` file, in the metadata of the control, set the `designtime` property to the name of the module. + + Here's an example: + + > ### Sample Code: + > Button.js + > + > ``` + > var Button = Control.extend(".Button", + > { + > metadata: { + > ... + > aggregations: {...}, + > properties : {...}, + > designtime : "/designtime/Button.designtime" + > } + > }); + > ``` + + diff --git a/docs/09_Developing_Controls/enable-a-library-for-design-time-usage-196a7cd.md b/docs/09_Developing_Controls/enable-a-library-for-design-time-usage-196a7cd.md new file mode 100644 index 00000000..1ae30402 --- /dev/null +++ b/docs/09_Developing_Controls/enable-a-library-for-design-time-usage-196a7cd.md @@ -0,0 +1,66 @@ + + +# Enable a Library for Design-Time Usage + +To enable a library for design-time usage, follow the steps described here. + + + +
+ +## Context + +These steps need to be done only once for a library that contains multiple controls. + + + +## Procedure + +1. Create a `designtime` folder in the root of the library \(`/designtime`\). + +2. Create a `library.designtime.js` file in this folder \(`/designtime/library.designtime.js`\). + + > ### Sample Code: + > Initial Content \(replace ``\) + > + > ``` + > /** + > * Initialization of design-time code and shared classes for the library . + > */ + > sap.ui.define([], function() { + > "use strict"; + > return {}; + > }); + > ``` + +3. Open the `library.js` file of the library and add the module path to the `library.designtime.js` file. + + > ### Sample Code: + > ``` + > sap.ui.define(['sap/ui/core/Lib'], function(Library) { + > ... + > Library.init({ + > name : "", + > apiVersion: 2, + > version: "${version}", + > dependencies : ["sap.ui.core"], + > designtime: "/designtime/library.designtime" //HERE + > }); + > }); + > ``` + +4. If you're using translated texts in your `designtime` file, add a `messagebundle.properties` file and include the texts. + + Provide a new GUID for the message bundle, like in line 2 in the following example: + + > ### Sample Code: + > ``` + > #This is the resource bundle for design time of the library + > #__ldi.translation.uuid=35653b13-1ec8-4fb2-83d9-ac4d31591f1d + > + > #XMIT: Radio button control name caption + > RADIOBUTTON_NAME=Radio Button + > + > ``` + + diff --git a/docs/09_Developing_Controls/enabling-controls-for-sapui5-flexibility-46b2d74.md b/docs/09_Developing_Controls/enabling-controls-for-sapui5-flexibility-46b2d74.md new file mode 100644 index 00000000..34820465 --- /dev/null +++ b/docs/09_Developing_Controls/enabling-controls-for-sapui5-flexibility-46b2d74.md @@ -0,0 +1,74 @@ + + +# Enabling Controls for SAPUI5 Flexibility + +If you develop your own SAPUI5 controls and want to provide personalization and key user adaptation to your users, you should enable your controls for SAPUI5 flexibility. + +SAPUI5 flexibility offers a set of actions that users can perform on UI elements, like moving, removing, or renaming them. SAPUI5 flexibility defines how these actions can be performed in a way that business users can understand easily \(WYSIWYG behavior\). SAPUI5 flexibility creates overlays, registers event handlers, and displays context menus and dialogs consistently across controls. + +This guide is aimed at control developers looking to enable their controls for SAPUI5 flexibility and application developers who want to influence control behavior in their applications \(usually to exclude certain controls from adaptation, or to restrict certain actions\). + +Among others, SAPUI5 Flexibility includes the following:: + +- Key user adaptation +- Personalization + +For key user adaptation and personalization to work, they need different control-specific information. + + + + + +## Enabling Controls for Key User Adaptation + +Here's what you have to provide to enable your SAPUI5 controls for key user adaptation actions: + +- **Design-time metadata** + + Design-time metadata is a description of the actions that are possible for a control. Usually this is a file of the format `.designtime.js`. See [Providing Design-Time Metadata](providing-design-time-metadata-5866a47.md). + + Design-time metadata can also be set for instances of controls to override the predefined behavior. See [Instance-Specific Design-Time Metadata](instance-specific-design-time-metadata-8fa2324.md). + + The information contained in design-time metadata is relevant for key user adaptation as well as in SAP Business Application Studio. + +- **Change handlers** + + Change handlers are classes containing the logic to apply the information contained in a `.change` file to the control. The change handler interface is defined in [Implementing a Change Handler](implementing-a-change-handler-139a71f.md). + + Change handlers are used for all personas of SAPUI5 flexibility - developers, key users, and end users - and can be reused, if an action is available for multiple personas. + + For many actions, SAPUI5 flexibility provides default change handlers that you can register. See [Registering Change Handlers for UI Changes](registering-change-handlers-for-ui-changes-d5f4de8.md). + + If the default handler for an action does not satisfy your requirements, you can develop your own change handlers. See [Writing a Custom Change Handler](writing-a-custom-change-handler-6a346a2.md). + + + + + + +## Enabling Controls for Personalization + +Here's what you have to provide to enable your SAPUI5 controls for personalization actions: + +- **Provide the UI** + + The controls need to provide the UI to trigger the application and creation of personalization changes. The save can be handled in two ways: either by the control itself or or by the responsible variant management. + +- **Call the specific personalization APIs to handle the changes** + + The `ControlPersonalizationWriteAPI` provides all the required methods to handle the personalization changes. For more information see [How to Enable Personalization for SAPUI5 Controls](how-to-enable-personalization-for-sapui5-controls-5f215c1.md). + +- **Change handlers** + + See above. + + +**Related Information** + + +[Which Action Has to Be Enabled for Which Control?](which-action-has-to-be-enabled-for-which-control-f269c0b.md "There are various actions and recommendations for implementing them in different types of controls.") + +[Enable a Library for Design-Time Usage](enable-a-library-for-design-time-usage-196a7cd.md "To enable a library for design-time usage, follow the steps described here.") + +[Enable a Control for Design-Time Usage](enable-a-control-for-design-time-usage-6888c17.md "To enable a control for design-time usage, follow the steps described here.") + diff --git a/docs/09_Developing_Controls/enabling-the-addiframe-action-80c503a.md b/docs/09_Developing_Controls/enabling-the-addiframe-action-80c503a.md new file mode 100644 index 00000000..a8d8275a --- /dev/null +++ b/docs/09_Developing_Controls/enabling-the-addiframe-action-80c503a.md @@ -0,0 +1,6 @@ + + +# Enabling the *AddIFrame* Action + +This section shows an example how to enable enable a control for the *AddIFrame* action. + diff --git a/docs/09_Developing_Controls/enabling-the-addviadelegate-action-7d41cd2.md b/docs/09_Developing_Controls/enabling-the-addviadelegate-action-7d41cd2.md new file mode 100644 index 00000000..6a1d91ee --- /dev/null +++ b/docs/09_Developing_Controls/enabling-the-addviadelegate-action-7d41cd2.md @@ -0,0 +1,6 @@ + + +# Enabling the *AddViaDelegate* Action + +This section shows an example how to enable enable a control for the *AddViaDelegate* action. + diff --git a/docs/09_Developing_Controls/enabling-the-combine-action-12a2d5d.md b/docs/09_Developing_Controls/enabling-the-combine-action-12a2d5d.md new file mode 100644 index 00000000..b2c14e1d --- /dev/null +++ b/docs/09_Developing_Controls/enabling-the-combine-action-12a2d5d.md @@ -0,0 +1,6 @@ + + +# Enabling the *Combine* Action + +This section shows an example how to enable enable a control for the *combine* action. + diff --git a/docs/09_Developing_Controls/enabling-the-createcontainer-action-52d9d89.md b/docs/09_Developing_Controls/enabling-the-createcontainer-action-52d9d89.md new file mode 100644 index 00000000..50db28de --- /dev/null +++ b/docs/09_Developing_Controls/enabling-the-createcontainer-action-52d9d89.md @@ -0,0 +1,6 @@ + + +# Enabling the *CreateContainer* Action + +This section shows an example how to enable enable a control for the *CreateContainer* action. + diff --git a/docs/09_Developing_Controls/enabling-the-move-action-d27f3ec.md b/docs/09_Developing_Controls/enabling-the-move-action-d27f3ec.md new file mode 100644 index 00000000..174ebae4 --- /dev/null +++ b/docs/09_Developing_Controls/enabling-the-move-action-d27f3ec.md @@ -0,0 +1,10 @@ + + +# Enabling the *Move* Action + +This section shows an example how to enable enable a control for the *move* action. + +The *move* action and change type is registered for a layout or container or composite control for all controls inside an aggregation. + +You can define a composite control element as a "relevant container" using "relevant container propagation" for dependent successor elements. For more information, see [Propagating Design-Time Metadata for Composite Controls](propagating-design-time-metadata-for-composite-controls-c4159f5.md). + diff --git a/docs/09_Developing_Controls/enabling-the-remove-action-dd58b6a.md b/docs/09_Developing_Controls/enabling-the-remove-action-dd58b6a.md new file mode 100644 index 00000000..1c34d8c1 --- /dev/null +++ b/docs/09_Developing_Controls/enabling-the-remove-action-dd58b6a.md @@ -0,0 +1,6 @@ + + +# Enabling the *Remove* Action + +This section shows an example how to enable a control for the *remove* action. + diff --git a/docs/09_Developing_Controls/enabling-the-rename-action-da26d04.md b/docs/09_Developing_Controls/enabling-the-rename-action-da26d04.md new file mode 100644 index 00000000..fd515be9 --- /dev/null +++ b/docs/09_Developing_Controls/enabling-the-rename-action-da26d04.md @@ -0,0 +1,6 @@ + + +# Enabling the *Rename* Action + +This section shows an example how to enable enable a control for the *rename* action. + diff --git a/docs/09_Developing_Controls/enabling-the-resize-action-2b6417c.md b/docs/09_Developing_Controls/enabling-the-resize-action-2b6417c.md new file mode 100644 index 00000000..319c4428 --- /dev/null +++ b/docs/09_Developing_Controls/enabling-the-resize-action-2b6417c.md @@ -0,0 +1,6 @@ + + +# Enabling the *Resize* Action + +This section shows an example how to enable enable a control for the *resize* action. + diff --git a/docs/09_Developing_Controls/enabling-the-reveal-action-fc78d51.md b/docs/09_Developing_Controls/enabling-the-reveal-action-fc78d51.md new file mode 100644 index 00000000..9b1af8e9 --- /dev/null +++ b/docs/09_Developing_Controls/enabling-the-reveal-action-fc78d51.md @@ -0,0 +1,6 @@ + + +# Enabling the *Reveal* Action + +This section shows an example how to enable a control for the *reveal* action. + diff --git a/docs/09_Developing_Controls/enabling-the-settings-action-5483068.md b/docs/09_Developing_Controls/enabling-the-settings-action-5483068.md new file mode 100644 index 00000000..eda1fa0a --- /dev/null +++ b/docs/09_Developing_Controls/enabling-the-settings-action-5483068.md @@ -0,0 +1,10 @@ + + +# Enabling the *Settings* Action + +This section shows an example how to enable enable a control for the *settings* action. + +Using SAPUI5 flexibility, you can change the settings of a control. You can register a *settings* action, which adds the *Settings* option to the context menu and allows for calling a handler that defines the control-specific UI and handles its changes. + +The *settings* action can be defined as a single action \(= one handler + one context menu item called *Settings*\) or as a list of actions \(= multiple handlers + multiple context menu items with custom names\). + diff --git a/docs/09_Developing_Controls/enabling-the-split-action-5454715.md b/docs/09_Developing_Controls/enabling-the-split-action-5454715.md new file mode 100644 index 00000000..6d2c6b93 --- /dev/null +++ b/docs/09_Developing_Controls/enabling-the-split-action-5454715.md @@ -0,0 +1,6 @@ + + +# Enabling the *Split* Action + +This section shows an example how to enable enable a control for the *split* action. + diff --git a/docs/09_Developing_Controls/example-composite-controls-with-propagation-of-design-time-metadata-4d4eba4.md b/docs/09_Developing_Controls/example-composite-controls-with-propagation-of-design-time-metadata-4d4eba4.md new file mode 100644 index 00000000..65bac4c2 --- /dev/null +++ b/docs/09_Developing_Controls/example-composite-controls-with-propagation-of-design-time-metadata-4d4eba4.md @@ -0,0 +1,111 @@ + + +# Example: Composite Controls with Propagation of Design-Time Metadata + +Composite controls can delegate the content of the public aggregations to internal controls. By doing this, the delegated controls are removed from the public aggregation of the composite and moved to the internal control. The composite control needs to make sure that the public aggregations still return all added controls. This means that the getter of the aggregation must be overridden and return the correct controls. + +Here's an example of a composite control that delegates its content to the private aggregation `_verticalLayout`. All accessors and mutators are overridden, and they call the representing methods of the `_verticalLayout` control. + +> ### Sample Code: +> ``` +> var MyCompositeControl = Control.extend("MyCompositeControl", { +> metadata: { +> aggregations: { +> content: { +> type: "sap.ui.core.Control", +> multiple: true +> }, +> _verticalLayout: { +> type: "sap.ui.layout.VerticalLayout", +> multiple: false, +> hidden: true +> } +> }, +> designtime: "/MyCompositeControl.designtime" +> }, +> +> init: function() { +> this.setAggregation("_verticalLayout", new VerticalLayout(this.getId() + "--verticalLayout")); +> }, +> +> // All accessors and mutators have to be overridden! +> addContent: function(oControl) { +> return this.getAggregation("_verticalLayout").addContent(oControl); +> }, +> +> getContent: function() { +> return this.getAggregation("_verticalLayout").getContent(); +> }, +> +> removeContent: function(oControl) { +> return this.getAggregation("_verticalLayout").removeContent(oControl); +> }, +> +> removeAllContent: function() { +> return this.getAggregation("_verticalLayout").removeAllContent(); +> }, +> +> insertContent: function(oControl, iIndex) { +> return this.getAggregation("_verticalLayout").insertContent(oControl, iIndex); +> }, +> +> renderer: function(oRm, oControl) { +> oRm.write("
oRm.writeControlData(oControl); +> oRm.writeClasses(); +> oRm.write(">"); +> oRm.renderControl(oControl.getAggregation("_verticalLayout")); +> oRm.write("
"); +> } +> }); +> +> var myCompositeControl = new MyCompositeControl({ +> content: [ +> new sap.m.Label({text: "Label1"}), +> new sap.m.Button({text: "Button1"}), +> new sap.m.Label({text: "Label2"}), +> new sap.m.Text({text: "Text1"}), +> new sap.m.Label({text: "Label3"}), +> new sap.m.Text({text: "Text3"}) +> ] +> }); +> ``` + +To enable the control for design time, you need to propagate design-time metadata and the relevant container control to the internal controls. The internal controls don't need to know any behavior related to the composite control because it gets propagated by the composite control. The design-time metadata gets extended or overwritten during the creation of control overlays. So, the internal control knows who is the relevant \(parent\) control from which the design-time metadata is propagated. See the following example: + +> ### Sample Code: +> myCompositeControl.designtime.js +> +> ``` +> { +> ... +> aggregations: { +> content: { +> ignore: true +> }, +> form: { +> ignore: false, +> propagateMetadata: function(oInnerControl) { +> var sType = oInnerControl.getMetadata().getName(); +> if (sType === "sap.ui.layout.VerticalLayout") { +> return oVerticalLayoutPropagatedMetadata; +> } else { +> // Override all actions from other inner controls +> return { +> actions: null +> }; +> } +> }, +> propagateRelevantContainer: true +> } +> } +> } +> ``` + +**Related Information** + + +[Propagating Design-Time Metadata for Composite Controls](propagating-design-time-metadata-for-composite-controls-c4159f5.md "If you want the controls used inside a composite control to behave differently as compared to being used stand-alone, the composite control needs to propagate different design-time metadata to the inner controls.") + +[Propagating the Relevant Container](propagating-the-relevant-container-888661c.md "The relevant container is the parent control that defines the context in which a control operates. By default, this is the direct parent. If you have a control that defines the context for controls several levels deep in the control tree, you need to propagate the relevant container information.") + diff --git a/docs/09_Developing_Controls/example-enable-scrollcontainers-8f794e5.md b/docs/09_Developing_Controls/example-enable-scrollcontainers-8f794e5.md new file mode 100644 index 00000000..2d533f24 --- /dev/null +++ b/docs/09_Developing_Controls/example-enable-scrollcontainers-8f794e5.md @@ -0,0 +1,42 @@ + + +# Example: Enable `ScrollContainers` + +Here's how you enable the `ScrollContainers` control. + +The `ObjectPageLayout` has several aggregations that are scrolled in one scroll wrapper. In this case, the definition which aggregations are in the `scrollContainer` is dynamic, so there needs to be an update whenever the definition changes. In this case, the second argument in the function needs to be called with an object with `index` as property. The index refers to the index of the current `ScrollContainer` inside the array so that only this one is updated. After the `fnUpdateFunction` is called, the function to get the aggregations is called again to get the new state of the definition. This then updates the `ScrollContainer`. + +The second `ScrollContainer` is for the extra `Scrollbar` of the `ObjectPageLayout`. + +> ### Sample Code: +> ObjectPageLayout.designtime.js +> +> ``` +> sap.ui.define([], function() { +> "use strict"; +> return { +> name: { ... }, +> aggregations: { ... }, +> scrollContainers: [ +> { +> domRef: "> .sapUxAPObjectPageWrapper", +> aggregations: function(oElement, fnUpdateFunction) { +> if (isHeaderInTitleArea(oElement)) { +> return ["sections"]; +> } else if (oElement._bStickyAnchorBar){ +> return ["sections", "headerContent"]; +> } else { +> return ["sections", "_anchorBar", "headerContent"]; +> } +> } +> }, +> { +> domRef: function(oControl) { +> return oControl.$("vertSB-sb").get(0); +> } +> } +> ] +> }; +> }); +> ``` + diff --git a/docs/09_Developing_Controls/example-enable-verticallayout-bcd64a1.md b/docs/09_Developing_Controls/example-enable-verticallayout-bcd64a1.md new file mode 100644 index 00000000..2b8724c8 --- /dev/null +++ b/docs/09_Developing_Controls/example-enable-verticallayout-bcd64a1.md @@ -0,0 +1,50 @@ + + +# Example: Enable `VerticalLayout` + +Here's how you enable the `VerticalLayout` control. + +To enable the control `sap.ui.layout.VerticalLayout` for design time, create the design-time metadata file `VerticalLayout.designtime.js` and define the `domRef` property of the `content` aggregation. + +You also have to add the `designtime` property to the metadata of the `sap.ui.layout.VerticalLayout` control. + +You can then create the `VerticalLayout.designtime.js` file next to the location of the `VerticalLayout.js` control. + +`VerticalLayout.designtime.js` is an SAPUI5 module that returns the design-time metadata. + +> ### Sample Code: +> ``` +> var VerticalLayout = Control.extend("sap.ui.layout.VerticalLayout", /** @lends sap.ui.layout.VerticalLayout.prototype */ { +> metadata: { +> library: "sap.ui.layout", +> properties: { +> ... +> }, +> defaultAggregation: "content", +> aggregations: { +> ... +> }, +> designtime: sap/ui/layout/designtime/VerticalLayout.designtime.js +> } +> }); +> ``` + +The `":sap-domref"` value of the content aggregation's `domRef` property points to the DOM reference of the `VerticalLayout` control. This DOM reference is used to calculate the dimensions of the `AggregationOverlay` that represents the content aggregation at design time. + +> ### Sample Code: +> ``` +> // Provides the design-time metadata for the sap.ui.layout.VerticalLayout control +> sap.ui.define([], function() { +> "use strict"; +> +> return { +> aggregations: { +> content: { +> domRef: ":sap-domref" +> } +> } +> }; +> +> }); +> ``` + diff --git a/docs/09_Developing_Controls/example-revertible-change-handlers-772a1b1.md b/docs/09_Developing_Controls/example-revertible-change-handlers-772a1b1.md new file mode 100644 index 00000000..56d404d6 --- /dev/null +++ b/docs/09_Developing_Controls/example-revertible-change-handlers-772a1b1.md @@ -0,0 +1,61 @@ + + +# Example: Revertible Change Handlers + +Here's how you can make change handlers revertible. + +When navigating between control variants \(views\), it's necessary to revert the changes that have been applied to a certain variant when displaying another variant where that change isn't present. Therefore you need to make your change handler revertible. This is easy to achieve: Together with the `applyChange` method, your change handler must contain a `revertChange` method, which is responsible for reverting the change. + +In the usual case, before applying the change in `applyChange`, store the information that's required to restore the state of the control in the change. The `revertChange` method then reads this data and is able to bring the control to its previous state. + +> ### Remember: +> After the change is reverted, remember to reset \(clear\) the revert data on the change. + +> ### Note: +> ***Move* Change Handler** +> +> When you implement a custom change handler for the *move* action, remember that the change may already have been performed before `applyChange` is called, for example when you move something using drag and drop. Generally, we recommend saving the index that the control currently has, but in this case this doesn't work. If the change was already performed, the current index and the target index are the same. In this case, you need to save the source index from the change data in order to guarantee that the *revert* action works. + +> ### Note: +> **Revert Data Rules** +> +> Although the `revertData` object accepts any content, do not save any object instances or IDs. If you need to keep a reference to a control, save its selector \(`oModifier.getSelector(oControl, oAppComponent)`\) or its position in the aggregation \(in cases like *move* or *combine*\). This ensures that the control is always found, even when you're processing XML. You also get a warning if you're saving a reference to an invalid control, such as a control with an unstable ID. + +It's a best practice to make every change handler revertible. + +Here's an example for the `BaseRename` change handler: + +> ### Sample Code: +> BaseRename.js +> +> ``` +> ... +> applyChange: function(oChange, oControl, mPropertyBag) { +> const oModifier = mPropertyBag.modifier; +> const sPropertyName = mRenameSettings.propertyName; +> const sValue = oChange.getText(mRenameSettings.changePropertyName); +> +> ... +> +> if (sValue) { +> oChange.setRevertData(oModifier.getProperty(oControl, sPropertyName)); // Here the information is stored on the change +> ... +> ... +> +> revertChange: function(oChange, oControl, mPropertyBag) { +> const sOldText = oChange.getRevertData(); // Retrieve the stored information +> if (sOldText || sOldText === "") { +> const oModifier = mPropertyBag.modifier; +> const sPropertyName = mRenameSettings.propertyName; +> oModifier.setProperty(oControl, sPropertyName, sOldText); +> +> oChange.resetRevertData(); // Clear the revert data on the change +> } else { +> // It is also good to have error handling to ensure that the revert is working as intended +> Utils.log.error("Change doesn't contain sufficient information to be reverted. Most likely the change didn't go through applyChange."); +> } +> } +> +> ... +> ``` + diff --git a/docs/09_Developing_Controls/how-to-enable-different-actions-41c6962.md b/docs/09_Developing_Controls/how-to-enable-different-actions-41c6962.md new file mode 100644 index 00000000..9c81f217 --- /dev/null +++ b/docs/09_Developing_Controls/how-to-enable-different-actions-41c6962.md @@ -0,0 +1,6 @@ + + +# How to Enable Different Actions + +This section provides examples how to enable different actions. + diff --git a/docs/09_Developing_Controls/how-to-enable-personalization-for-sapui5-controls-5f215c1.md b/docs/09_Developing_Controls/how-to-enable-personalization-for-sapui5-controls-5f215c1.md new file mode 100644 index 00000000..ac9e7399 --- /dev/null +++ b/docs/09_Developing_Controls/how-to-enable-personalization-for-sapui5-controls-5f215c1.md @@ -0,0 +1,88 @@ + + +# How to Enable Personalization for SAPUI5 Controls + +Here's how control developers can enable their controls for personalization by end users. + +Personalization allows users without any special roles or permissions to make changes to controls. This personalization is applied on top of existing changes made with SAPUI5 flexibility by a developer or a key user. + +In general, to enable personalization you need to ensure that the control provides the user interface and calls the APIs offered by SAPUI5 flexibility. + +An example for a personalization UI is the *View Settings* dialog for a SmartTable. The user can change the visibility and the order of the columns and can personalize the sorting and filtering of the table's content. + +The lifecycle of UI changes created with personalization depends on whether the corresponding control operates in the context of a `VariantManagement` control. For more information, see [Calling the Personalization API to Apply and Persist the Changes](how-to-enable-personalization-for-sapui5-controls-5f215c1.md#loio5f215c172f9644758cbb2b21c6c87926__section_fwf_mzt_qbc). + + + +
+ +## Providing the Change Handler + +To correctly set up change handlers for personalization, you need to register them in the `library.js` file. You need to define a new change handler for each change type. Set the `"layers"` property explicitly to `"USER": true`. If you want to use a default change handler, set the `"changeHandler"` property to `"default"`. Otherwise, provide the path to the custom change handler as shown below: + +> ### Sample Code: +> ``` +> extensions: { +> flChangeHandlers: { +> "sap.ui.comp.smartform.Group": { +> // with default change handler +> "hideControl": { +> "changeHandler": "default", +> "layers": { +> "USER": true +> } +> }, +> // with custom change handler +> "newChangeType": { +> "changeHandler": "sap/ui/comp/smartform/flexibility/changeHandler/NewChangeHandler", +> "layers": { +> "USER": true +> } +> }, +> }, +> // ... other components ... +> }, +> // ... other extensions ... +> } +> ``` +> ``` + + + + + +## Calling the Personalization API to Apply and Persist the Changes + +The `ControlPersonalizationWriteAPI` provides all the relevant actions that you need to handle personalization changes. + +To ensure proper processing by the `ControlPersonalizationWriteAPI`, the `PersonalizationChange` must be structured as follows: + +- `selectorElement`: Control to be used as the selector for the change +- `changeSpecificData`: Map of change-specific data to create a flex change +- `changeType`: Type of change for which a change handler is registered +- `content`: Content for the change +- `transient` \(optional, default = false\): Transient changes are not persisted + +For more information about the change content, see [How to Enable Different Actions](how-to-enable-different-actions-41c6962.md). + +For more detailed information, see the [API Reference: `ControlPersonalizationWriteApi`](https://ui5.sap.com/#/api/sap.ui.fl.write.api.ControlPersonalizationWriteAPI). + + + +### Personalization Without Variant Management + +For personalization without variant management, the control must provide a user interface for saving and independently invoke the `ControlPersonalizationWriteApi.save` method. + + + +### Personalization With Variant Management + +If you have a variant management control in your application and you want personalization changes to be saved with it, you need to link the variant management control to the control on which personalization is enabled. + +Example: + +> ### Sample Code: +> ``` +> +> ``` + diff --git a/docs/09_Developing_Controls/if-you-only-use-default-change-handlers-a0143ee.md b/docs/09_Developing_Controls/if-you-only-use-default-change-handlers-a0143ee.md new file mode 100644 index 00000000..319a42de --- /dev/null +++ b/docs/09_Developing_Controls/if-you-only-use-default-change-handlers-a0143ee.md @@ -0,0 +1,29 @@ + + +# If You Only Use Default Change Handlers + +Here's how to proceed if you didn't write any custom change handlers, but only use the default change handlers provided by SAP. + +If you only use default change handlers, register your change handlers directly in the `library.js` file under `extensions > flChangeHandlers`. + +> ### Sample Code: +> library.js +> +> ``` +> ... +> extensions: { +> flChangeHandlers: { +> "sap.uxap.ObjectPageLayout": { +> "moveElements": "default" +> }, +> "sap.uxap.ObjectPageSection": { +> "hideControl": "default", +> "unhideControl": "default", +> "stashControl": "default", +> "unstashControl": "default" +> } +> } +> } +> ... +> ``` + diff --git a/docs/09_Developing_Controls/if-you-use-at-least-one-custom-change-handler-904e84a.md b/docs/09_Developing_Controls/if-you-use-at-least-one-custom-change-handler-904e84a.md new file mode 100644 index 00000000..04bfc7d7 --- /dev/null +++ b/docs/09_Developing_Controls/if-you-use-at-least-one-custom-change-handler-904e84a.md @@ -0,0 +1,71 @@ + + +# If You Use at Least One Custom Change Handler + +Here's how to proceed if you want to use one or more custom custom change handlers that you've written. + +If you use at least one custom change handler, create the `.flexibility.js` file to register and implement the change handlers for a control. + +We recommend that you create the following structure: + +- `/flexibility` - Folder for the flexibility files where to include the implementations of custom change handlers and their registration. + + - `.flexibility.js` + + + +In the `.flexibility.js` file, for each change type, you can enter `"default"` to use the default change handler provided by `sap.ui.fl`, or you can add your own change handler if needed. For example, there is no default change handler for the *rename* action. If a change handler implementation is used for several controls, you can also require it and use it, like in the following example: + +> ### Sample Code: +> Panel.flexibility.js +> +> ``` +> sap.ui.define([ +> "sap/ui/fl/changeHandler/BaseRename", +> "sap/ui/<..>/" +> ], function (BaseRename, ReusedChangeHandler) { +> "use strict"; +> +> // Reuse functionality for several change handlers can be placed here +> function commonStuffNeededInAFewChangeHandlers(){ +> //... +> } +> return { +> "renamePanel": BaseRename.createRenameChangeHandler({ +> propertyName: "headerText", +> changePropertyName: "panelHeaderText", +> translationTextType: "XHED" +> }), +> "hideControl": "default", +> "unhideControl": "default", +> ": ReusedChangeHandler, +> "": { +> "applyChange": function(oChange, oPanel, mPropertyBag) { +> //... +> }, +> "revertChange": function(oChange, oPanel, mPropertyBag) { +> //... +> }, +> "completeChangeContent": function(oChange, oSpecificChangeInfo, mPropertyBag) { +> //... +> } +> } +> // + other change types relevant to the control (addFields, combineFields, etc...) +> }; +> }); +> ``` + +Additionally, you must register the flexibility file in the `library.js` file under `extensions > flChangeHandlers`. + +> ### Sample Code: +> library.js +> +> ``` +> ... +> extensions: { +> > flChangeHandlers: { +> > "sap.m.Panel": "sap/m/flexibility/Panel" +> > } +> ... +> ``` + diff --git a/docs/09_Developing_Controls/images/Creating_App_Descriptor_Changes_Using_Settings_b1c32cb.png b/docs/09_Developing_Controls/images/Creating_App_Descriptor_Changes_Using_Settings_b1c32cb.png new file mode 100644 index 00000000..fd7ce85b Binary files /dev/null and b/docs/09_Developing_Controls/images/Creating_App_Descriptor_Changes_Using_Settings_b1c32cb.png differ diff --git a/docs/09_Developing_Controls/implement-and-register-a-combine-change-handler-aa5ffcf.md b/docs/09_Developing_Controls/implement-and-register-a-combine-change-handler-aa5ffcf.md new file mode 100644 index 00000000..a0ba110c --- /dev/null +++ b/docs/09_Developing_Controls/implement-and-register-a-combine-change-handler-aa5ffcf.md @@ -0,0 +1,91 @@ + + +# Implement and Register a *Combine* Change Handler + +Implement and register a *combine* change type with its change handler to a control. + +For the *combine* action, no default change handler exists, therefore, it's necessary to implement a change handler for combining controls \(see [Writing a Custom Change Handler](writing-a-custom-change-handler-6a346a2.md)\). + +The change handler gets the following information from the SAPUI5 flexibility tool as change-specific information: + + + + + + + + + + + + + + + + + + + + + + + +
+ +Property + + + +Type + + + +Description + +
+ +`oSpecificChangeInfo` + + + +Object + + + +  + +
+ +`oSpecificChangeInfo.source` + + + +`sap.ui.core.Element`|Node + + + +ID of the control where the action is triggered. + +
+ +`oSpecificChangeInfo.combineElements` + + + +`Array` + + + +Array of control IDs to be combined. + +
+ +Find an example on GitHub at [https://github.com/SAP/openui5/blob/master/src/sap.m/src/sap/m/changeHandler/CombineButtons.js](https://github.com/SAP/openui5/blob/master/src/sap.m/src/sap/m/changeHandler/CombineButtons.js). + +> ### Note: +> When creating new controls inside `applyChange()`, make sure to move the original controls into the dependents aggregation of a **container**. In our example, the original buttons are to be moved to the `dependents` aggregation of `sap.m.Bar`, not to the `dependents` aggregation of `sap.m.MenuItem`. +> +> Make sure that every new controls gets a stable ID, which is a prerequisite for UI adaptation. + +You can then register it in the `library.js` file of the control's library, where you map the change type to the corresponding change handler and the control type. The change type for this action can be named `combineButtons`, for example. Register the change type for this action in the `.flexibility.js` file. For more information, see [Registering Change Handlers for UI Changes](registering-change-handlers-for-ui-changes-d5f4de8.md). + diff --git a/docs/09_Developing_Controls/implement-and-register-a-createcontainer-change-handler-8b8f6f7.md b/docs/09_Developing_Controls/implement-and-register-a-createcontainer-change-handler-8b8f6f7.md new file mode 100644 index 00000000..a0331b1f --- /dev/null +++ b/docs/09_Developing_Controls/implement-and-register-a-createcontainer-change-handler-8b8f6f7.md @@ -0,0 +1,24 @@ + + +# Implement and Register a *CreateContainer* Change Handler + +Implement and register a *createContainer* change type with its change handler to a control. + +As for the *createContainer* action no default change handler exists, a custom change handler has to be created, see [Writing a Custom Change Handler](writing-a-custom-change-handler-6a346a2.md). + +The change handler gets the following information from SAPUI5 flexibility as change-specific information: + +> ### Sample Code: +> Change-specific info for the createContainer action +> +> ``` +> { +> label : +> newControlId : +> index : +> parentId : +> } +> ``` + +You can then register it in the `library.js` file of the control's library, where you map the change type to the corresponding change handler and the control type. The change type for this action can be named "`createContainer`", for example. Register the change type for this action in the `.flexibility.js` file. For more information, see [Registering Change Handlers for UI Changes](registering-change-handlers-for-ui-changes-d5f4de8.md). + diff --git a/docs/09_Developing_Controls/implement-and-register-a-rename-change-handler-a96deb7.md b/docs/09_Developing_Controls/implement-and-register-a-rename-change-handler-a96deb7.md new file mode 100644 index 00000000..e5314772 --- /dev/null +++ b/docs/09_Developing_Controls/implement-and-register-a-rename-change-handler-a96deb7.md @@ -0,0 +1,65 @@ + + +# Implement and Register a *Rename* Change Handler + +Implement and register a *rename* change type with its change handler to a control. + +The *rename* action doesn't have a default change handler because the property being renamed can differ between controls. However, we offer the base class `sap.ui.fl.changeHandler.BaseRename`, which includes an implementation of the change handler. You simply need to provide the necessary parameters to the `createRenameChangeHandler` method. + +If the implementation of the base class doesn't meet your needs, you can implement a new change handler for renaming a control \(see [Writing a Custom Change Handler](writing-a-custom-change-handler-6a346a2.md)\). The change handler gets the following information from SAPUI5 flexibility as change-specific information: + +> ### Sample Code: +> Change-specific info for the *rename* action +> +> ``` +> { +> renamedElement : { +> id : +> }, +> value : +> } +> ``` + +Here's an example of how you can rename a control using the `BaseRename` class. If you want to implement your own change handler instead of using the `BaseRename` class, you can refer to its implementation to find the relevant methods. + +> ### Sample Code: +> Button.flexibility.js +> +> ``` +> sap.ui.define([ +> "sap/ui/fl/changeHandler/Base" +> ], function (BaseRename) { +> "use strict"; +> return { +> "rename": BaseRename.createRenameChangeHandler({ // It should be always the rename change type +> propertyName : "text", // Property of the control that should be renamed +> translationTextType : "XBUT" // See https://github.com/SAP/openui5/blob/master/docs/guidelines/translationfiles.md +> }) +> }; +> }) +> ``` + +You can then register your change handler in the `library.js` file of the control's library, where you map the change type to the corresponding change handler and the control type. + +Here's an example: + +> ### Sample Code: +> Library.js +> +> ``` +> sap.ui.define(['sap/ui/core/Lib'], function(Library) { +> Library.init({ +> name: "sap.m", +> apiVersion: 2, +> version: "${version}", +> //... +> extensions: { +> flChangeHandlers: { +> "sap.m.Button": "sap/m/flexibility/Button", +> //... +> } +> } +> }); +> }); +> ``` + diff --git a/docs/09_Developing_Controls/implement-and-register-a-resize-change-handler-b17d217.md b/docs/09_Developing_Controls/implement-and-register-a-resize-change-handler-b17d217.md new file mode 100644 index 00000000..dc20de71 --- /dev/null +++ b/docs/09_Developing_Controls/implement-and-register-a-resize-change-handler-b17d217.md @@ -0,0 +1,27 @@ + + +# Implement and Register a *Resize* Change Handler + +Implement and register a *resize* change type with its change handler to a control. + +For the *resize* action no default change handler exists and a custom change handler has to be created, see [Writing a Custom Change Handler](writing-a-custom-change-handler-6a346a2.md). + +The change handler gets the following information from the SAPUI5 flexibility tool as change-specific information: + +> ### Sample Code: +> Change-specific info for the rename action +> +> ``` +> { +> changeType: , +> content: { +> resizedElementId: , +> newWidth: +> } +> } +> ``` + +You can then register it in the `library.js` file of the control's library, where you map the change type to the corresponding change handler and the control type. Register the change type for this action in the `.flexibility.js` file. For more information, see [Registering Change Handlers for UI Changes](registering-change-handlers-for-ui-changes-d5f4de8.md). + +The resize action also supports handler functions to create changes - similar to *settings* - which returns a promise with an array of objects including change-specific data. See more details in the next section. + diff --git a/docs/09_Developing_Controls/implement-and-register-a-split-change-handler-875da96.md b/docs/09_Developing_Controls/implement-and-register-a-split-change-handler-875da96.md new file mode 100644 index 00000000..276fdc68 --- /dev/null +++ b/docs/09_Developing_Controls/implement-and-register-a-split-change-handler-875da96.md @@ -0,0 +1,44 @@ + + +# Implement and Register a *Split* Change Handler + +Implement and register a *split* change type with its change handler to the control. + +To ensure that you can enable different controls with different behaviors for the *split* action, there's no default change handler for this action. You have to implement your own change handler for splitting controls \(see [Writing a Custom Change Handler](writing-a-custom-change-handler-6a346a2.md)\). + +The change handler gets the following change-specific information from SAPUI5 flexibility: + +> ### Sample Code: +> Change-specific info for the *split* action +> +> ``` +> { +> newElementIds : +> sourceControlId : +> parentId : +> } +> ``` + +Find a full example on GitHub at [https://github.com/SAP/openui5/blob/master/src/sap.m/src/sap/m/changeHandler/SplitMenuButton.js](https://github.com/SAP/openui5/blob/master/src/sap.m/src/sap/m/changeHandler/SplitMenuButton.js). + +You can then register it in the `library.js` file of the control's library, where you map the change type to the corresponding change handler and the control type. For more information, see [Registering Change Handlers for UI Changes](registering-change-handlers-for-ui-changes-d5f4de8.md). + +Here's an example: + +> ### Sample Code: +> Snippet of `library.js` +> +> ``` +> sap.ui.define(['sap/ui/core/Lib'], function(Library) { +> Library.init({ +> extensions: { +> flChangeHandlers: { +> "sap.ui.comp.smartform.SmartForm": { +> "splitField": "sap/ui/comp/smartform/flexibility/changes/SplitField", +> } +> } +> } +> }); +> }); +> ``` + diff --git a/docs/09_Developing_Controls/implement-and-register-an-addiframe-change-handler-78e7e87.md b/docs/09_Developing_Controls/implement-and-register-an-addiframe-change-handler-78e7e87.md new file mode 100644 index 00000000..27470e5d --- /dev/null +++ b/docs/09_Developing_Controls/implement-and-register-an-addiframe-change-handler-78e7e87.md @@ -0,0 +1,26 @@ + + +# Implement and Register an *AddIFrame* Change Handler + +Implement and register an *addIFrame* change type with its change handler to a control. + +As for the *addIFrame* action no default change handler exists, a custom change handler has to be created, see [Writing a Custom Change Handler](writing-a-custom-change-handler-6a346a2.md). + +The change handler gets the following information from SAPUI5 flexibility as change-specific information: + +> ### Sample Code: +> Change specific info for the createContainer action +> +> ``` +> { +> baseId: "
", +> targetAggregation: "", +> index: 0, // Index position to insert the IFrame in the aggregation +> url: "", +> width: "