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

RAP - Suche

110

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 - Popup Defaultwerte

Kategorie - ABAP

Wie kannst du im Popup einer Aktion in RAP dem User Defaultwerte zur Verfügung stellen? In diesem Artikel erweitern wir unsere Anwendung.

21.01.2025

RAP - Popup Pflichtfelder

Kategorie - ABAP

Wie kannst du eigentlich Pflichtfelder für ein Popup in RAP definieren? In diesem Artikel werden wir etwas genauer auf die Details eingehen.

14.01.2025

RAP - Deep Table Action

Kategorie - ABAP

Ist die Übergabe von Tabellen an Aktionen in RAP aktuell möglich? Dieser Artikel soll einen besseren Einblick in das Thema gewähren.

07.01.2025

ABAP Cloud - Programmiermodell

Kategorie - ABAP

Welches Programmiermodell kommt mit ABAP Cloud zum Einsatz und was können wir aus dem Vorgänger lernen? Mehr Details im Artikel.

03.01.2025

RAP - Side Effects

Kategorie - ABAP

Wie kannst du Teile der Fiori UI aktualisieren, ohne einen kompletten Refresh zu machen? Mit Side Effects ist das in ABAP und RAP ganz leicht möglich.

27.12.2024