Integration von SE11 Suchhilfen in SAP Fiori Elements Anwendungen

Integration von SE11 Suchhilfen in SAP Fiori® Elements Anwendungen

In diesem Blogbeitrag beschreibe ich, wie man eine SE11 Standard Suchhilfe in eine SAP Fiori Elements Anwendung auf Basis von Custom Entitys einbinden kann. SE11 Suchhilfen gibt es schon ewig und sind aus einem SAP-System nicht wegzudenken. In einem aktuellen S/4 System sind nach wie vor über 30.000 SE11 Suchhilfen vorhanden. Zudem wurden im Laufe der Jahre durch die SAP-Kunden viele Suchhilfen dazu entwickelt. Und daher macht es durchaus Sinn, diese auch in SAP Fiori Elements oder UI5 Anwendungen zu verwenden.

Zum Zeitpunkt dieses Blogs ist mir keine Möglichkeit im SAP Standard bekannt (abgesehen vom Ansatz mit dem SAP Gateway), die SE11 Original-Suchhilfen einfach und schnell in vorhandene SAP Fiori Elements Anwendungen zu integrieren. Aber ehrlich gesagt rechne ich damit, dass dies irgendwann in Zukunft durch spezielle Annotations möglich sein wird. Sollte sich daran was ändern, werde ich diesen Blog natürlich erweitern. Aber bis es so weit ist, müssen wir uns mit ein paar Workarounds helfen.

Wie gesagt, ich beschreibe eine Lösungsmöglichkeit via Custom Entitys. Diese sind erst ab einem S/4 1909 System verfügbar. Es gibt, wie oben erwähnt, auch den Ansatz die Suchhilfe mit Hilfe von SAP Gateway zu implementieren. Lutz Rosenplfanzer beschreibt dies in seinem Blog Custom data selection for a Fiori list report application using DDIC Search help sehr gut.

Allgemeines

Prinzipiell müssen wir einmal Sammelsuchhilfen und elementare Suchhilfen unterschieden. Sammelsuchhilfen bestehen aus einer oder mehreren elementaren Suchhilfen. Der hier gezeigte Ansatz verfolgt nur die Integration von elementaren Suchhilfen. Aber natürlich können einzelne Suchhilfen wieder über Annotations zu Sammelsuchhilfen zusammengefügt werden. An dieser Stelle verweise ich auf den Blog Fiori Element: Collective / Multiple value help on selection field von Mohit Bansal. Er zeigt in seinem Blog, wie man mehrere CDS Views als Suchhilfen einbinden kann.

Elementare Suchhilfen welche als Selektionsmethode eine Datenbanktabelle oder einen DB-View verwenden und keinen speziellen Suchhilfe-Exit implementiert haben, können auch mit Hilfe eines klassischen CDS View nachgebildet werden. Dann erspart man sich die zusätzliche ABAP Implementierung. Eine gute Beschreibung dazu findet man in in diesem Blog Fiori Elements-Value help on a selection field within a value help dialog ebenfalls von Mohit Bansal.

Elementare Suchhilfen verwenden jedoch sehr oft Suchhilfe-Exits, dann reicht der Ansatz über klassische CDS Views nicht aus. Mit Hilfe der Custom Entitys können wir unser Vorhaben umsetzen. In dem nachfolgenden Beispiel wird die Suchilfe BUPAP des SAP Business Partners verwendet. Die Suchhilfe besteht lediglich aus einem Suchhilfe Exit.

Step 1 – ABAP Klasse

Zuerst brauchen wir eine ABAP Klasse, welche dann später in der Custom Entity verwendet wird. Die ABAP Klasse muss das Interface if_rap_query_provider implementieren.

Step 2 – Custom Entity

Nun legen wir noch die Custom Entity ZCE_VALUE_HELP_BUPAP an.

Mit der Annotation ObjectModel.Query.implementedBy wird die zuvor angelegte ABAP Klasse hinterlegt. Nun müssen wir noch auf Basis der Parameter der Suchhilfe, die Custom Entity aufbauen. Die SE11 Suchhilfe sieht wie folgt aus:

Exakt diesen Aufbau bilden wir nun auch in der Custom Entity ab.

Eine Custom Entity benötigt zwingend ein KEY-Feld. In dem Fall verwenden wir natürlich PARTNER welches auch der Value ist, welcher durch die Suchhilfe zurückgeliefert wird.

Step 3 – Implementierung der Query-Methode

Jetzt wird es spannend, wir implementieren die Suche in der ABAP Query Methode. Glücklicherweise gibt es die Klasse cl_dsh_type_ahead_processor, die uns hier enorm weiterhilft und vieles abnimmt. Mit Hilfe der Klasse prozessieren wir die Suchhilfe.

Alle restlichen Entwicklungen (Sort, Skip, Top, … ) haben nichts mehr speziell mit der Suchhilfe zu tun, sind aber notwendig damit die Custom Entity korrekt funktioniert und SADL keine Fehler liefert. Andre Fischer beschreibt in seinem Blog How to implement a custom entity in the ABAP RESTful Programming Model using remote function modules, wie die Search Methode einer Custom Entity zu implementieren ist.

Am Ende sollte die Query Implementierung in etwa wie folgt aussehen:

Step 4 – Service Definition & Service Bindung

Dieser Schritt ist jetzt nicht zwingend notwendig. Hier geht es nur darum, dass wir die neue Custom Entity testen wollen.

Service Definition

Service Bindung

Sobald die Service Bindung angelegt ist, können wir die Custom Entity und die Implementierung der Suche mit der Preview-Funktion testen.

Die Filter- und Result-Felder müssen vorerst noch manuell ausgewählt werden, aber dann sollte bereits ein Ergebnis sichtbar sein.

Wenn alles korrekt implementiert wurde, sollten auch die Filter und die Sortierung funktionieren.

Step 5 – Verwendung der Custom Entity in einem CDS View

Jetzt verknüpfen wir die neue Custom Entity Value Help mit einer bestehenden SAP Fiori Elements Anwendung. Angenommen wir haben eine auf RAP basierende Anwendung zur Darstellung von Business Partner.

Folgende Annotation ist nun beim Feld mit der Partnernummer anzugeben.

Danach sollte bei der Anwendung für das Feld PartnerID folgende Suchhilfe zur Verfügung stehen.

Fazit

Es ist vielleicht keine perfekte Lösung, wie gesagt, ich warte auf eine Lösung im SAP Standard. Aber mit Hilfe der Custom Entitys kann man SE11 Suchhilfen einfach und rasch in Fiori Elements oder UI5 Smart Controls verwenden.

Fiori Launchpad - App to App Navigation in UI5 und CDS

Fiori® Launchpad – App to App Navigation in UI5 und CDS

Um einem Anwender eine nahtlose Integration zwischen verschiedenen Fiori Anwendungen im Launchpad zu bieten, ist eine App to App Navigation zwischen den Fiori Anwendungen sehr wichtig. Wie ihr gleich sehen werdet, ist das bei neu erstellten UI5 Fiori Anwendungen oder mit Hilfe von CDS  gar nicht so schwierig.

Semantisches Objekt, Aktion und Parameter

Ein semantisches Objekt ist in der Regel ein Business Objekt wie z.B. BusinessPartner oder PurchaseOrder. Die Action ist das, was man mit dem Objekt machen kann. Z.B. Approve, Change oder Change. Optional könne Parameter angegeben werden welche eine Objektinstanz (Partner ID oder Product-ID) spezifizieren. Je nach Anwendung wird dann direkt die gewünschte Objektinstanz aufgemacht. Soweit die notwendige Theorie.

UI5 – Service CrossApplicationNavigation

Grundsätzlich wird dafür das Service CrossApplicationNavigation verwendet. Einen Zugriff auf das Service bekommt man wie folgt:

UI5 – Direkte Navigation mit semantischem Objekt, Aktion und Parameter

Mit der Methode toExternal wird die Navigation direkt ausgelöst. In target sind das semantische Objekt und optional die Aktion anzugeben. Und in params kann man ebenfalls optional eine Objektinstanz angeben.

Im Nachfolgenden Beispiel wird das semantische Objekt EPMPurchaseOrder mit der Aktion approve und dem optionalen Parameter PurchaseOrder = 300001993 verwendet.

Wenn zu einem semantischen Objekt mehrere Anwendungen definiert sind und keine Aktion mitgegeben wurde, bekommt der Anwender ein Popup mit einer Auswahlmöglichkeit der Target-Anwendungen.

Nachfolgendes Beispiel zeigt, wie man zur Launchpad Startpage navigiert.

UI5 – Erzeugung Link ohne direkte Navigation

Es kann auch die Methode hrefForExternal verwendet werden. Prinzipiell hat die Methode die gleichen Eigenschaften wie toExternal – jedoch wird nicht direkt in die Anwendung navigiert. Stattdessen erhält man einen generierten Link.

UI5 – Erzeugung Link mit einem shell hash

Möglicherweise bekommt man die Link-Informationen von einem Backend-System. In dem Fall kann man die Navigations-Informationen auch wie folgt angeben.

CDS Annotations

Eine App to App Navigation kann auch durch CDS Annotation @Consumption.semanticObject definiert werden. Dadurch wird dann in Fiori Elements Anwendungen oder in UI5 Anwendungen welche Smart Controls einsetzen automatisch die App to App Navigation angeboten.

Mussfeldprüfung im ABAP Programmiermodell für SAP Fiori

Mussfeldprüfung im ABAP® Programmiermodell für SAP Fiori® ( CDS, BOPF, Fiori Elements)

Das ABAP Programmiermodell für SAP Fiori, also ABAP CDS Views, Business Object Processing Framework und als UI Fiori/Fiori Elements/SAPUI5, bietet die Möglichkeit, einzelne Felder als Mussfelder zu definieren.
Und das ganz einfach über eine Annotation im ABAP CDS View bzw. der Metadata Extension:

@ObjectModel.mandatory: true

Fiori Elements ist dann auch so nett und zeigt im Änderungsmodus die Mussfeld-Sternchen:

Das ist aber – außer für Key-Felder – leider nur eine Information.
Weder im UI (Browser) noch im SAP Backend erfolgt irgendeine weitere Prüfung auf mandatory Fields!

Ohne Büro sichern?

Klar, kein Problem…

Um die Mussfelder zu prüfen, braucht man eine Validate-Methode im BOPF Objekt und verwenden die Standardklasse /BOBF/CL_LIB_V_MANDATORY_ATTR als Implementation Class.

Damit werden alle Felder gegen die Metadaten geprüft und eine passenden Fehlermeldungen erstellt.

Und das geht natürlich auch für mehrere Felder

Blogs/Links
Cadaxo Webinar zum Thema BOPF

ABAP CDS Views – 6 Schritte zum Verständnis