Warum ein Versionsupdate? SAPUI5 befindet sich wie jedes moderne Framework in einem stetigen Wandel. Das betrifft sowohl Fehlerbehebungen als auch die Entwicklung neuer Funktionen und Inhalte. Neben den offensichtlichen Vorteilen einer neuen Version ist es gelegentlich nötig, ein Upgrade durchzuführen, da einzelne Versionen nach einem bestimmten Zeitraum aus dem offiziellen Support der SAP verschwinden. Alte Versionen werden ein Jahr nach dem Supportende aus dem CDN (Content Delivery Network) entfernt. Dieser Umstand gilt auch für Patchlevel oder Unterversionen. Wobei Patchlevel eine deutlich geringere Zeitspanne im Support als Unterversionen haben.
Versionierung
Die SAPUI5-Version wird wie folgt dargestellt:
<Hauptversion>.<Unterversion>.<Patch-Level>
Überblick über aktuelle SAPUI5-Versionen und ihren Support-Status
Auf der offiziellen Seite SAPUI5 Versions Maintenance Status informiert SAP darüber, welche Versionen aktuell unterstützt werden. Des Weiteren kann hier die Upgrade-Strategie in Form eines PDF-Dokuments detailliert eingesehen werden.
Upgrade-Strategie
- Die Update Strategie der SAP sieht wie folgt aus:
- Jeden Monat gibt es eine neue Unterversion (z. B. 1.113).
- Ungefähr jede zweite Woche erscheint eine SAPUI5-Version in Form eines Patches.
- Einmal pro Jahr (jede zwölfte Version) wird als neue „Long Term Support“-Version zur Verfügung gestellt.
- Nur „Long Term Support“-Versionen erhalten Fehlerbebungen in Form von Patches.
- Für den FES (Front End Server) ABAP wird jede sechste Version durch die Softwarekomponente SAP_UI bereitgestellt (halbjährlicher Release).
„Remove SAPUI5 / OpenUI5 versions from the CDN one year after their end of maintenance. In addition, also patches of versions in maintenance which are older than one year will be removed.“
- Oliver Graeff: Removing outdated UI5 versions from UI5 CDN -
Wie findet man heraus, welche SAPUI5-Version im aktuellen Kontext eingesetzt wird oder überhaupt auf dem Server zur Verfügung steht?
On-Premise
Eine Applikation konsumiert ihre Ressourcen aus einem ABAP-System. Eine Möglichkeit ist die Versionsermittlung durch Aufruf des SICF Knotens:
/sap/public/bc/ui5_ui5
Die im Browser aufgerufene Seite informiert den Nutzer, dass die Version 1.84 mit Patchlevel 18 verwendet wird.
Versionsermittlung durch Hotkey
Innerhalb einer ausgeführten SAP-Anwendung steht die Tastenkombination STRG + ALT + SHIFT + P zur Verfügung. Sie funktioniert in jeder SAPUI5-Anwendung - sei es im Launchpad, auf einer Seite aus einem Portalservice oder in einer direkt gestarteten Applikation über Ihre index.html.
Aktuelle Version im Portalservice
Die Version einer Seite im Portalservice ist flexibel anpassbar und gilt entsprechend für alle Apps.
Besonderheiten beim Upgrade
Weitere Informationen beim Upgrade von älteren Versionen sind in der offiziellen Dokumentation zu finden.
Eine Besonderheit stellt ein Upgrade von SAPUI5 unterhalb 1.30 dar:
Vor der SAPUI5-Version 1.30 war die zentrale Applikationskonfiguration nicht innerhalb von manifest gekapselt. Daher ist es nötig, diese im Upgrade-Prozess anzulegen. Die Minimalausprägung kann wie folgt aussehen:
Weitere Hinweise:
https://help.sap.com/saphelp_snc700_ehp04/helpdata/de/74/038a52dcd7404e82b38be6d5fb1458/frameset.htm
Verfügbarkeit von SAPUI5-Versionen im Content Delivery Network
Das CDN der SAP stellt die aktuell verfügbaren Versionen zum Download oder zur direkten Benutzung bereit.
Das SAP CDN ist zur Nutzung für cloudbasierte Anwendungen freigegeben (SAP-Hinweis: 2943781).
Im Bootstrap einer Anwendung kann nicht nur hinterlegt werden, woher die SAPUI5-Ressourcen zu beziehen sind, es ist auch möglich, explizite Versionen anzugeben. Das hat den Vorteil, dass ganz spezielle Patchlevel getestet werden können, um beispielsweise Fehler einer Version zu beheben.
Gleichzeitig ist die Abgabe absoluter Versionsangaben risikobehaftet: Sollte der angegebene Patchlevel aus dem Support fallen, wird er aus dem SAP CDN gelöscht. Damit wäre die Anwendung bis auf Weiteres nicht nutzbar.
Außerdem ist zu beachten, dass Patches einer Unterversion deutlich geringe Supportzeiten haben als ihre Unterversion selbst. Am Beispiel der „Long Term Support“-Version 1.71 sieht es wie folgt aus:
Die Unterversion 1.71 hat Support bis Q4/2028, die Patches werden allerdings schon ein Jahr nach ihrem Release entfernt.
Automatisches Patchlevel im Bootstrap
Ältere Anwendungen laden die Ressourcen synchron, weshalb direkt auf Objekte der Ressourcen zugegriffen werden kann.
Beispiel einer alten Index.html:
An diesem Beispiel ist zu erkennen, dass am Anfang des zweiten Scripts auf die Methode sap.ui.getCore().attachInit() zugegriffen wird. Sollten die Ressourcen aus dem Bootstrap zu diesem Zeitpunkt nicht zur Verfügung stehen, endet der Anwendungsstart mit folgendem Fehler in der Konsole:
Dabei verweist die 21. Zeile auf den eben angesprochenen Methodenaufruf.
Dieser Fehler tritt auf, wenn eine explizite Versionsangabe (wie zum Beispiel: 1.71.2) nicht verfügbar ist, oder die sogenannte „Evergreen Version“ verwendet wird. Dabei wird, wie in unserem Beispiel, auf die Angabe eines bestimmten Patchlevels verzichtet - das CDN stellt immer die neuesten bereit. Technisch wird das Ganze realisiert, indem eine „sap-ui-core.js“ unter dem relativen Pfad abgelegt ist. Diese fügt dem Bootstrap eine weitere Resource Root hinzu, die den Pfad zum aktuellen Patchlevel der Version beinhaltet.
Auszug aus sap-ui-core.js des relativen Pfads 1.71:
Durch einen weiteren Aufruf fordert das Framework daraufhin die richtige sap-ui-core.js an.
Dazu muss die Konfiguration des Bootstraps zwingend asynchron aufgebaut sein. Unser Beispiel schlägt hier fehl, da der Zugriff auf die Methode sap.ui.getCore().attachInit() erfolgt, wenn die richtigen Ressourcen noch nicht geladen sind.
Beispiel einer neuen Index.html:
Eine weitere Voraussetzung ist das Setzen von „async=true“. Andernfalls endet der Start mit der Meldung „Patch-level independent bootstrap is only supported, if UI5 bootstrap script defines the attribute data-sap-ui-async=”true”!”
Durch die Verwendung dieser Konfiguration werden beide „sap-ui-core.js“ nacheinander angefordert: