
034: Recycling-Heroes - Object and RAP Generator (Document)
In dieser Episode erstellen wir unsere neue Dokumenten-App mit Hilfe von Generatoren zur Erstellung des Datenmodells und anschließend zur Erstellung des RAP Objekts.
Inhaltsverzeichnis
Einleitung
In der letzten Folge hatten wir die Grundlagen unserer heutigen App gelegt und Business Configurations für Dokumenten Typen und Tags angelegt. Dazu wollen wir nun unsere neue Anwendung zum Upload und zur Anlage von Dokumenten erstellen und dabei greifen wir im ersten Schritt nur auf verschiedene Generatoren zurück, um das Datenmodell anzulegen.
Object Generator
Bereits in einem Blogartikel hatten wir den Object Generator vorgestellt. Er generiert verschiedene DDIC Artefakte für uns, sodass wir außer der Konfiguration keine weiteren Einstellungen mitgeben müssen. Damit sparen wir uns die Anlage von Tabellen, Datenelementen und Domänen und haben doch immer ein vollständiges Datenmodell zur Verfügung. Legen wir uns daher im ersten Schritt eine neue Klasse an, die uns die Konfiguration einlesen soll und daraus dann die Objekte generiert. In diesem Fall verwenden wir die ausführbare XCO Klasse, da sie besser mit XCO Objekte umgehen kann und ein eingebautes Fehlerhandling mitbringt. Anders als beim Interface erben wir von der Klasse und müssen die abstrakte MAIN Methode erst lokal redefinieren.
Als erstes legen wir eine GitHub Konfiguration an, da wir die Konfiguration als JSON in unserem GitHub Repository abgelegt haben. Die Konfiguration übergeben wir an den Test Container und holen uns im nächsten Schritt die Daten als JSON. Da wir hier eine Struktur für die Daten benötigen, definieren wir uns die Generator Konfiguration als lokale Variable. Als nächstes können wir dann eine Instanz des Object Generators erzeugen, die Übergabe der Variable SY-REPID ist wichtig, da wir aus der aktuellen Klasse den Transport ableiten wollen, ohne ihn manuell mitgeben zu müssen. Nun übergeben wir die Konfiguration an den Generator und lassen uns die DDIC Artefakte generieren. Das Ergebnis der Generierung übergeben wir dann an die Ausgabe der MAIN Methode. Das Ergebnisobjekt besitzt in den Findings das Interface NEWS, was eine einfache Ausgabe mit dieser ausführbaren Klasse erlaubt.
Wenn wir nun auf das GitHub Repository gehen, findest du im Ordner Data die passende Datei für den Generator. Hierbei handelt es sich um die Konfiguration und es sind Informationen enthalten, wie die Domänen mit ihren Datentypen, die entsprechenden Datenelemente, die die Domänen auch verwenden und die Definition der Tabellen. Bei den Tabellen ist wichtig, dass der Mandant vorhanden ist, ebenso wie die Verwaltungsfelder von RAP im unteren Bereich der Tabelle. Wir wollen uns gleich zwei Tabellen generieren lassen. Über den RAW Button bekommst du den Link zur JSON Datei, den wir auch gleich im Quellcode an die Container Konfiguration übergeben.
Damit wäre der Code so weit vollständig. Wir aktivieren die Klasse und starten die Generierung mit F9. Nach einem kurzen Moment sollten wir die Generierung ohne Fehlermeldung abgeschlossen haben und können das Paket einmal aktualisieren. Wir sollten nun 12 neue Objekte finden die vom Generator angelegt und direkt auch aktiviert wurden. Schauen wir uns einmal eine Domäne an. Der Typ von den Stream wurde korrekt übernommen. Unsere Tabelle für die Dokumente ist nun soweit vorhanden und aktiv und wir können uns den nächsten Generator anschauen.
RAP Generator
Beim letzten Mal hatten wir die Objekte der App von Hand angelegt. Dies ist ein sehr umständlicher Schritt, lohnt sich aber für Einsteiger, die sich das erste Mal mit RAP beschäftigen und die Konzepte lernen wollen. In diesem Schritt verwenden wir einen RAP Generator zur Generierung der Objekte und des Stacks. Das spart uns viel Zeit, ebenso wie der Object Generator. Direkt auf der Tabelle können wir den Generator starten und erhalten hier drei verschiedene Generatoren. Die Business Configuration haben wir bereits verwendet, um Objekte zu generieren, in diesem Fall wollen wir einen "OData UI Service" erzeugen. Für den Generator müssen wir noch ein Paket angeben, wo die Objekte generiert werden. Grundsätzlich würden wir eigentlich erwarten, dass das Paket der Tabelle übernommen wird.
Im nächsten Schritt geht es um die Konfiguration der verschiedenen Objekte, die erzeugt werden. Grundsätzlich könntest du die meisten Vorschläge des Generators übernehmen, wir möchten aber unsere Konventionen übernehmen. Auf der ersten Ebene machen wir allgemeine Angaben für den Generator, der Name des Projekts und wir möchten gern ein Präfix verwenden. Dabei musst du das Z für den Kundennamensraum nicht angeben, da es automatisch ergänzt wird. Auf der nächsten Ebene passen wir den Namen der ROOT Entität an und lassen den ALIAS leer, da wir keinen benötigen. Auf der Ebene definieren wir das Verhalten, hier müssen wir den Namen der Klasse anpassen, die normalerweise mit BP beginnen, wie "Behavior Pool". Ebenso passen wir noch den Namen der Draft Tabelle an. Als nächstes ist die Projektionsebene unseres RAP Objekts dran. Hier passen wir den Core Data Service passend zur Root Entität an, ebenso die Klasse für Verhaltensimplementierung. Die Service Definition wollen wir ohne den Zusatz anlegen und lassen das Service Binding wie es ist. Über Next lassen wir uns einen Preview der erzeugten Objekte anlegen und bestätigen die Generierung, die dann einige Minuten in Anspruch nimmt.
Ist die Generierung abgeschlossen erhalten wir eine Benachrichtigung und können zum Service Binding wechseln. Dort drücken wir den Button "Publish" und starten die Veröffentlichung des Service. Dieser Schritt kann auch wieder ein wenig dauern.
Zusammenfassung
Schauen wir uns einen ersten Preview der Anwendung an. Die Strukturen sind definiert, die Services aktiviert, aber leider noch viel zu viele Informationen im UI zu sehen. Mit Hilfe der Generatoren haben wir uns viel Zeit bei der Generierung des Datenmodells und er verschiedenen Artefakte gespart. DIe manuelle Arbeit wäre Zeitintensiv und könnte ebenfalls zu Fehlern führen, die wir später korrigieren müssten.
Um die weitere Entität, die Annotationen kümmern wir uns dann beim nächsten Mal. Bis dahin, danke für zuschauen und bis zum nächsten Mal.
YouTube
Video