This is a test message to test the length of the message box.
Login
ABAP RAP Suche
Erstellt von Software-Heroes

RAP - Suche

89

In diesem Artikel beschäftigen wir uns mit der generischen Suche auf RAP Objekten und wie wir damit auch Fehleingaben interpretieren können.

Werbung


Bisher haben wir in der RAP-Serie vor allem Suchhilfen behandelt, die direkt an Felder geknüpft sind und es erlauben Werthilfen dafür zu erzeugen. Doch hier muss der User wissen, in welchem Feld er eigentlich nach Informationen suchen muss, und sollte die Abgrenzung einigermaßen kennen.

 

Einleitung

In RAP Objekten können wir aber auch die generische Suche aktivieren. Hierbei handelt es sich um ein Suchfeld, welches 1-n Spalten nach der eingegebenen Information durchsuchen kann. Mit diesem Suchfeld stehen verschiedene Möglichkeiten zur Verfügung, wie wir effizient Suchen gestalten können:

 

Aktivieren

Aktiviert kann die generische Suche mit Hilfe einer Kopf-Annotation im entsprechenden Consumption View des RAP Objekts, damit steht die Funktion in der UI zur Verfügung. Dafür muss irgendwo über der Definition die folgende Annotation eingefügt werden:

@Search.searchable: true

 

Die Annotation kann aber nicht allein im CDS View stehen, der Compiler wird eine entsprechende Fehlermeldung ausgeben, dass mindestens ein Element als durchsuchbar gekennzeichnet werden muss. In diesem Fall kennzeichnen wir die Rechnungsnummer und den Partner als durchsuchbar. Dazu ergänzen wir an den Feldern die entsprechenden Annotationen:

          @Search.defaultSearchElement: true
  key     Document,
...
          @Search.defaultSearchElement: true
          Partner,

 

Die entsprechende Suche ist nun definiert und wir können sie einmal in der Anwendung probieren. Im ersten Fall geben wir einmal eine Belegnummer ein und erhalten das folgende Ergebnis:

 

Im zweiten Testfall geben wir einmal eine Partnernummer ein und erhalten alle Belege mit der entsprechenden Partnernummer, in diesem Fall 35 Stück:

 

Fuzziness

Was in der aktuellen Version der Suche nicht funktioniert, ist die Suche nach Pattern oder Fehleingaben. Nicht immer sind die Informationen, genau wie gesucht, in der Spalte vorhanden. Manchmal weichen sie um kleine Nuancen ab und werden damit nicht im Suchergebnis angezeigt. Dafür gibt es die Fuzziness in der Suche, diese bestimmt, wieviel Fehlertoleranz bei der Suche angewandt wird. Definieren wir einmal die Rate an den beiden Feldern:

          @Search.defaultSearchElement: true
          @Search.fuzzinessThreshold: 1.0
  key     Document,
...
          @Search.defaultSearchElement: true
          @Search.fuzzinessThreshold: 0.9
          Partner,

 

Der "Threshold" bestimmt, wie ungenau die Werte in der Spalte sein können. Bei 1.0 muss der Wert zu 100% übereinstimmen, umso niedriger die Rate, desto breiter wird gesucht und desto mehr Treffer kommen auf die Suche zurück. Das zweite Feld stellen wir auf 0.9, damit können wir eine grobe Suche über den Partner starten. Geben wir nun den Wert "1234" ein, dann erhalten wir einen Treffer:

 

Wenn wir allerdings den Wert "12347" suchen, erhalten wir keinen Treffer. Hier wurde absichtlich in die Zeichenfolge ein Fehler eingebaut. Stellen wir nun einmal den Threshold auf 0.8 und versuchen die Suche erneut:

 

Die Fuzziness ist nun ungenauer und wir erhalten auch Treffer, die eigentlich nur so ähnlich sind, wie was wir gesucht haben. So können auch Rechnungen gefunden werden, die vielleicht einen Fehler bei der Erfassung erhalten haben und nicht mehr über die gesuchten Informationen verfügen.

 

Consumption View

Allein mit der Anpassung der Annotationen im Consumption View konnten wir eine generische Suche implementieren, die auch noch Abweichungen finden kann. Den gesamten Core Data Service findest du hier mit den entsprechenden neuen Annotationen:

@EndUserText.label: 'Consumption for ZBS_R_RAPCINVOICE'
@AccessControl.authorizationCheck: #NOT_REQUIRED
@Metadata.allowExtensions: true
@Search.searchable: true
define root view entity ZBS_C_RAPCInvoice
  provider contract transactional_query
  as projection on ZBS_R_RAPCInvoice as Invoice
{
          @Search.defaultSearchElement: true
          @Search.fuzzinessThreshold: 1.0
  key     Document,
          DocDate,
          DocTime,
          @Search.defaultSearchElement: true
          @Search.fuzzinessThreshold: 0.8
          Partner,
          @ObjectModel.virtualElementCalculatedBy: 'ABAP:ZCL_BS_DEMO_CRAP_VE_EXIT'
  virtual NumberOfPositions : abap.int4,
          _Position : redirected to composition child ZBS_C_RAPCPosition
}

 

Fazit

Die Implementierung einer generischen Suche in Fiori Elements ist sehr leicht und benötigt nur wenige Annotationen und keine großartige Entwicklung. Die Umsetzung sollte damit für dich kein Problem sein und so benötigst du nicht für jedes Feld eine eigene Suche.


Enthaltene Themen:
RAPBTPSuche
Kommentare (0)



Und weiter ...

Bist du zufrieden mit dem Inhalt des Artikels? Wir posten jeden Freitag neuen Content im Bereich ABAP und unregelmäßig in allen anderen Bereichen. Schaue bei unseren Tools und Apps vorbei, diese stellen wir kostenlos zur Verfügung.


RAP - Übersetzungs-App (Beispiel)

Kategorie - ABAP

Schauen wir uns einmal ein praktisches Beispiel für die Entwicklung einer RAP Anwendung im ABAP Environment an und wie du mit wenig Aufwand eine App erstellst.

02.08.2024

RAP - Custom Entity Wertehilfe (Deep Dive)

Kategorie - ABAP

Mit der Custom Entity hast du in RAP die meisten Freiheiten in der Entwicklung von ABAP Cloud Anwendungen, doch wie sieht es mit potentiellen Fehlern aus?

12.07.2024

RAP - Deep Action in OData v4

Kategorie - ABAP

In diesem Artikel schauen wir uns einmal Aktionen mit tiefen Strukturen an, wie wir sie erzeugen und Daten an einen API Endpunkt übergeben können.

24.05.2024

BTP - Anbindung On-Premise (Consumption Model v2)

Kategorie - ABAP

In diesem Artikel wollen wir noch einmal einen Update zur Anbindung von On-Premise Systemen geben und wie dies mit einem Communication Arrangement durchgeführt wird.

15.12.2023

RAP - App Count anzeigen (Kachel)

Kategorie - ABAP

In diesem Beispiel geht es um die Anzeige eines Zählers auf der Kachel einer Fiori Elements Anwendung und wie sich so etwas umsetzen lässt.

06.10.2023