
052: 10 Minutes from Start to Launchpad
In dieser Folge schauen wir uns an, wie wir innerhalb von 10 Minuten eine RAP Anwendung erstellen können, diese generieren und bereitstellen und am Ende fertig im Launchpad aufrufen.
Inhaltsverzeichnis
In 10 Minuten von der Modellierung bis zum Launchpad: Das ist eigentlich der Grundwunsch, wenn wir eine Fiori-Elements-Anwendung zur Verfügung stellen wollen. Viele sind der Meinung, dass die Fiori-Entwicklung sehr lange braucht und sehr viele Schritte notwendig sind, bevor du erste Ergebnisse überhaupt sehen kannst. Deshalb möchten wir in dieser Folge einmal ausprobieren, wie es aussieht, wenn wir von einer Idee aus starten und wie lange es dauert, bis wir unsere Anwendung eigentlich im System haben und einem Fachanwender zur Verfügung stellen können.
Modellierung
Starten wir also erst einmal mit der Grundidee: Wir möchten eine Anwendung zur Verfügung stellen, womit jeder Entwickler auswerten kann, welche Objekte er im System hat. Dafür gibt es einen Core Data Service, der als Public API zur Verfügung gestellt wird, um alle Custom Objects im System zu ermitteln. Diesen verwenden wir als Grundlage, um einen neuen Core Data Service anzulegen. Dabei ist wichtig, dass wir eine Root Entity verwenden, da wir eine RAP-Anwendung erstellen wollen. Nach der Anlage des Core Data Service bereinigen wir ihn erst einmal um Annotationen und Kommentare, die wir nicht benötigen, ebenso um verschiedene Assoziationen. Zusätzlich legen wir uns noch eine neue Assoziation an, um die Texte für die Softwarekomponenten zu lesen. Dabei gehen wir über die eigentliche Softwarekomponente und die aktuelle Systemsprache, um die Assoziation aufzubauen. Diese fügen wir dann am Ende hinzu, damit wir sie später verwenden können. Da wir nur die Objekte des aktuellen Users anzeigen wollen, erweitern wir über die WHERE-Condition um den aktuell angemeldeten User für die Filterung.
Sind wir damit fertig, können wir den Core Data Service testen, dazu führen wir mit F8 den Data Preview aus und lassen uns die ersten Daten anzeigen. Wir wählen uns einen Datensatz aus und navigieren über die festgelegte Assoziation auf die Texte der Softwarekomponente und sehen, dass auch diese sauber geladen werden. Damit ist die eigentliche Modellierung des Datenmodells schon einmal fertig und wir können direkt in den Consumption Layer gehen. Dazu können wir den Shortcut über den Core Data Service nehmen und per Rechtsklick einen neuen Core Data Service auf Grundlage dieses anlegen. Dieser bekommt einen neuen Namen, das „C“ steht hierbei für Consumption View. Am Ende ist es wichtig, dass du das richtige Template auswählst. Wir wollen keinen neuen View haben, sondern wir wollen eine Projection anlegen, die für die Consumption wichtig ist. Nach der Generierung des Views setzen wir erst einmal die Metadata.allowExtensions Annotation, um später ein Metadata Extension File zu definieren. Ebenso haben wir einige Pflichtangaben wie den Provider Contract, den wir auf dieser Ebene angeben müssen. Da wir auch von einem Root View erben, müssen wir auch das Keyword ROOT verwenden. Zusätzlich definieren wir nun auch den Softwarekomponenten-Namen, den wir später in der Modellierung haben wollen. Dies ist auf Consumption-Ebene möglich, um die finalen Felder zu definieren, ebenso vergeben wir einen neuen Alias. Sind wir damit fertig, können wir den Core Data Service aktivieren.
Im nächsten Schritt wollen wir in unserer UI auch Felder und Informationen sehen, genauso wie wir einige Filter haben wollen. Dazu legen wir uns eine neue Metadata Extension an, direkt auf unserem Consumption View. Dabei definieren wir den Layer als Customer und verwenden hier eine IDE Action, um die UI-Annotationen für die Oberfläche zu definieren. Dabei wollen wir zwei Facets anlegen: Wir wollen eine Facet für die allgemeinen Informationen haben und zusätzlich noch eine Facet, wo wir die Informationen zur Softwarekomponente anzeigen können. Deshalb legen wir uns eine neue Facet an, geben dieser eine Position und einen Qualifier, um die Felder dann später zuordnen zu können. Auf Ebene der Felder wollen wir zum Beispiel das erste Feld nicht anzeigen. Deshalb können wir über "UI.hidden" das Feld ausblenden, ebenso wollen wir die Softwarekomponenten-Informationen der Softwarekomponente zuordnen. Gleichzeitig definieren wir uns noch ein neues Selection Field auf dem ABAP Package, welches später als Selektion angeboten wird. Zudem blenden wir die Responsible Person aus, da in diesem Fall wir immer der aktuelle User sind, ebenso wie ein weiteres Feld, welches wir nicht benötigen. Sind wir damit fertig, können wir die Annotationen generieren lassen. Der Metadata Wizard nimmt uns hier viel Arbeit ab, um das UI schnell und einfach zu erstellen.
Service
Nun müssen wir den eigentlichen Service im System anlegen, damit wir darauf eine Fiori-Elements-Anwendung generieren können. Dazu kannst du per Rechtsklick auf dem Consumption View das Kontextmenü aufrufen und legst dafür eine neue Service Definition an. Der Service Definition geben wir einen Namen und lassen sie erzeugen. Die Entity, die wir nach außen freigeben, geben wir noch einen neuen Alias, damit dieser in der Fiori Anwendung verwendet wird. Ebenfalls definieren wir die Leading Entity. Haben wir weitere Entitäten in unserem Service, dann wird diese Entität separat markiert, was zum Beispiel den Einstieg in den Preview erleichtert. Im nächsten Schritt brauchen wir dann noch ein Service Binding. Das Service Binding definiert das Protokoll. Hier verwenden wir ein OData V4 UI Protokoll und lassen uns dazu das passende Service Binding anlegen. Nun folgt der eigentlich längste Schritt, nämlich die Aktivierung des Services. Wir speichern und aktivieren den Service, und über den Button „Publish“ sorgen wir dafür, dass der Service-Endpunkt im System zur Verfügung gestellt wird. Dies kann einige Minuten dauern.
Generierung
Um nun unsere Anwendung zu generieren, wechseln wir ins Business Application Studio. Hier kannst du natürlich auch VS Code verwenden, wenn du dies lokal bevorzugst. Im Business Application Studio gehen wir über das Menü "File" und generieren ein neues Projekt aus einem Template. Hier wählen wir den Standard-Fiori-Generator. Als Template verwenden wir den "List Report", dieses Template wird sehr häufig verwendet, wenn Fiori-Elements-Anwendungen definiert werden. Nun müssen wir den eigentlichen Service im System auswählen. Das heißt, wir verbinden uns mit unserem ABAP Environment und geben eine Destination an, die zu diesem System führt. Daraufhin werden erst einmal die Services aus dem System geladen. Dort können wir nach unserem Service filtern. Als Nächstes wählen wir die Entity; da wir nur eine Entity im Service haben, ist diese bereits vorausgewählt. Im nächsten Schritt geben wir weitere Projektattribute ein: den Namen der Anwendung, den Namespace, und wir wollen ebenfalls eine Deployment-Konfiguration sowie eine Fiori-Launchpad-Konfiguration definieren. In der Deployment-Konfiguration geben wir das Artefakt an, welches später ins System deployed werden soll. Ebenso geben wir unser Paket an, in welchem wir die Anwendung definiert haben. Da dieses Paket keinen Transport erfordert, wird auch keine Transportabfrage erfolgen. Für die Launchpad-Konfiguration geben wir das semantische Objekt und die Aktion ein. Diese werden später für die Navigation innerhalb des Launchpads benötigt. Ebenso geben wir einen Titel und einen Untertitel an, die später auf der Kachel im Launchpad zu sehen sein werden.
Das Projekt wird nun generiert. Dies kann einen kurzen Augenblick dauern und wir erhalten die Application Info als finalen Stand. In der Application Info können wir weitere Anpassungen an der App vornehmen. Da wir dies nicht benötigen, würden wir hier direkt mit dem Deployment starten. Da bereits eine Deployment Configuration angelegt wurde, müssen wir nur noch bestätigen, dass wir das Projekt deployen wollen, und der eigentliche Deployment-Prozess startet. Dieser kann ebenso einige Sekunden dauern, bis wir eine Erfolgsmeldung erhalten, dass das Artefakt auf dem System deployed wurde.
Launchpad
Um nun unsere Anwendung im Fiori Launchpad bereitstellen zu können, müssen wir noch einige Konfigurationen innerhalb unseres Projekts vornehmen. Wenn wir einmal das Paket refreshen, sehen wir, dass verschiedene neue Artefakte angelegt wurden. Ein wichtiges Artefakt ist das App Descriptor Item, welches für die Launchpad-Konfiguration zuständig ist. Legen wir nun eine neue IAM App an. Diese repräsentiert eine Anwendung für die Launchpad-Konfiguration. Wir definieren sie als External App, da es sich hier um ein deploytes Artefakt handelt. In der IAM App geben wir das Fiori Launchpad App Descriptor Item an. Dieses wurde durch das Deployment erzeugt und wir können es über Strg + 1 auswählen. Im Bereich Services sehen wir, dass nun auch der passende Service der Anwendung übernommen wurde. Über „Publish Locally“ führen wir dann eine Bekanntmachung der App im Launchpad durch. Sind wir damit fertig, wollen wir einen neuen Business-Katalog anlegen. Diesen Business-Katalog können wir später einer Business Role zuordnen und verschiedene Apps darunter bündeln. Über den Shortcut in der IAM App legen wir einen neuen Business-Katalog an, wodurch automatisch unsere Anwendung auch dem Business-Katalog zugeordnet wird. Sind wir damit fertig, können wir das Assignment schließen und würden dann im Business-Katalog über den Button „Publish Locally“ die Bekanntmachung im Launchpad anstoßen. Diese Schritte können ebenfalls einige Sekunden bis wenige Minuten dauern.
Nun würden wir ins eigentliche Launchpad wechseln und dort in die App „Maintain Business Roles“. Hier legen wir eine neue Business Role an und geben der Business Role eine Beschreibung, um diese im System zu erzeugen. Der Business Role können wir nun den generierten Business-Katalog zuordnen. Über die Add-Funktion kannst du den Business-Katalog im System suchen und übernehmen. Damit die neue Rolle auch unserem User direkt zugeordnet wird, können wir über den Tab „Business Users“ auch direkt unseren User aus dem System suchen und der Rolle zuordnen. Als letzten Schritt gehen wir auf die General Details und setzen diese Rolle auf „Unrestricted“, sodass wir volle Berechtigungen haben, und speichern. Damit wird die Rolle im System angelegt und auch direkt unserem User zugeordnet.
Wir können jetzt nach der Anwendung suchen. Hier finden wir aktuell die Anwendung noch nicht. Das liegt daran, dass die Berechtigungen noch nicht sauber gezogen haben und unserem User im aktuellen Context nicht zur Verfügung stehen. Mit Strg + F5 führen wir einen Refresh im Browser durch und nach einem kurzen Laden sehen wir nun unsere Anwendung und können diese ausführen.
Test
Wir laden die Anwendung und sehen bereits, dass bestimmte Selektionen vorhanden sind, und können über „Go“ alle unsere Entwicklungsobjekte anzeigen. Über den Filter zum Beispiel für die Pakete können wir nach Objekten innerhalb von Paketen filtern. Wenn wir auf die Object Page navigieren, sehen wir, dass unsere Informationen vorhanden sind, die wir auch auf die verschiedenen Facets verteilt haben. Ebenso haben wir die Möglichkeit, nach Objekttypen zu suchen, wenn wir zum Beispiel alle Klassen in diesem Paket sehen wollen.
Abschluss
Damit ist nun der komplette Prozess abgeschlossen. Wir haben eine neue Anwendung modelliert, wir haben sie im System bereitgestellt und konfiguriert, damit wir sie auch direkt verwenden können. Ab diesem Zeitpunkt könnte nun ein anderer Anwender, dem wir die Rolle zuordnen, mit der Anwendung arbeiten. Der eigentliche Prozess war sehr schnell durchgeführt und die Anwendung steht zur Verfügung. Damit kannst du dir merken: Der gesamte Entwicklungsprozess zur Bereitstellung einer neuen Anwendung dauert nicht wirklich sehr lang, zumindest, wenn man weiß, an welchen Stellen man arbeiten muss und die Anforderungen klar sind. Da wir eine Fiori-Elements-Anwendung zur Verfügung gestellt haben, können wir diese Anwendung später nun auch mit Verhalten ausstatten, die Facets ändern oder weitere Informationen dazubringen, ohne das eigentliche Fiori Artefakt noch einmal neu deployen zu müssen.
Wir hoffen, du konntest ein paar Neuigkeiten mitnehmen und kannst deinen Kollegen davon erzählen, dass die eigentliche Fiori-Entwicklung gar nicht so lang dauert und Prototyping sehr gut möglich ist. Vielen Dank fürs Zuschauen und bis zum nächsten Mal!
YouTube
Video