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

RAP - Festwert-Filter

17

Wie verwendest du Festwerte aus einer Domäne für einen Filter und passt diesen nach deinen Bedüfnissen in RAP an? Mehr dazu hier.

Werbung


In diese Artikel implementieren wir die Werthilfe für das Staging. Dabei wollen wir die Daten direkt beim Laden einschränken und die Möglichkeiten bei der Auswahl reduzieren.

 

Einleitung

Im letzten Artikel über das Custom Pattern hatten wir das "Staging" Feld eingeführt, ohne es im Detail weiter zu beachten. Hierbei soll es später möglich sein, über das Staging den Stand der Software Komponenten aus verschiedenen Systemen zu ermitteln. Dabei verwenden wir bereits die Domäne ZBS_DEMO_DCP_STAGING für die Typisierung.

 

In den nächsten Kapiteln legen wir die Wertehilfe an und schränken dann die Möglichkeiten weiter ein.

 

Wertehilfe

Für die Wertehilfe legen wir einen Core Data Service an, der auf den Standard Views DDCDS_CUSTOMER_DOMAIN_VALUE und DDCDS_CUSTOMER_DOMAIN_VALUE_T basiert. Der erste View ist für die Festwerte, der zweite View für die sprachabhängigen Texte. Dazu bauen wir einen Core Data Service mit Join. Brauchst du eine Vorlage, kannst du bei unseren Code Snippets mal vorbeischauen. Dazu definieren wir zuerst einen neuen Core Data Service, dabei kannst du das Referenzobjekt leer lassen, wichtig wäre die VIEW ENTITY als Template.

 

Im nächsten Schritt nehmen wir das Template und befüllen die Domäne mit unserem Wert. Auf Ebene der Felder passen wir noch den ALIAS an und sollten damit den aktuellen View erhalten.

@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'VH for Staging'
define view entity ZBS_I_CPStagingVH
  as select from    DDCDS_CUSTOMER_DOMAIN_VALUE(
                      p_domain_name : 'ZBS_DEMO_DCP_STAGING') as Values
    left outer join DDCDS_CUSTOMER_DOMAIN_VALUE_T(
                      p_domain_name : 'ZBS_DEMO_DCP_STAGING') as Texts
      on  Texts.domain_name    = Values.domain_name
      and Texts.value_position = Values.value_position
      and Texts.language       = $session.system_language
{
  key Values.value_low as Staging,
      Texts.text       as Description
}

 

Der View erzeugt einen Join über beide Standard Views und übergibt die Domäne als Parameter. In der Join-Bedingung schränken wir auf die aktuelle Sprache ein, um keine Duplikate im Ergebnis zu erhalten. Schauen wir uns den Preview mit F8 an, solltest du nun die beiden Werte sehen.

 

Einbindung

In diesem Kapitel binden wir die Suchhilfe ein und passen sie entsprechend unseren Bedürfnissen an.

 

Anzeige

Damit die Suchhilfe nun am Feld bzw. Filter angezeigt wird, ergänzen wir die Annotation "@Consumption.valueHelpDefinition". Damit definieren wir die Wertehilfe und stellen ein Mapping zwischen den Schlüsselfeldern her, wichtig wenn sich diese unterscheiden.

@Consumption.valueHelpDefinition: [ { entity: { name: 'ZBS_I_CPStagingVH', element: 'Staging' } } ]

 

Schauen wir uns das Feld in der App an, dann kannst du nun die Suchhilfe ausführen und zwischen den Ergebnissen wählen. Somit ist der erste Teil der Anbindung abgeschlossen.

 

Dropdown

Allerdings wollen wir die Suchhilfe noch weiter auf unsere Anforderungen optimieren. Da wir nur eine kleine Anzahl an Ergebnissen haben, wollen wir die Suche als Dropdown in der Anwendung zur Verfügung stellen. Dazu ergänzen wir den Core Data Service der Wertehilfe um eine Header Annotation.

@ObjectModel.resultSet.sizeCategory: #XS

 

Prüfen wir nun die Anwendung, dann hat sich die Art der Suchhilfe bereits geändert und wir können per Dropdown die Werte wählen.

 

Filter

Im nächsten Schritt möchten wir das Verhalten des Filters weiter verändern. Dazu können wir Annotationen der Kategorie "@Consumption.filter" verwenden. Zuerst einmal wollen wir den Filter als Pflichtfeld definieren, dies erreichen wir mit der folgenden Annotation.

@Consumption.filter.mandatory: true

 

Damit der User nicht immer vor einem leeren Feld steht und dieses erst befüllen muss, wollen wir einen Standardwert für die Anzeige setzen. Dies erreichen wir mit der Annotation, um den Standard TEST vorzubelegen.

@Consumption.filter.defaultValue: 'TEST'

 

Zum Abschluss wollen wir, dass der User nur einen Wert eingeben kann, damit wir jeweils nur ein System laden und zur Verfügung stellen.

@Consumption.filter.selectionType: #SINGLE

 

Der Filter ist nun Pflichtfeld, mit einem Wert vorbelegt und es kann jeweils nur ein Wert ausgewählt werden.

 

Text

Damit der User nun die Festwerte besser zuordnen kann, möchten wir nun noch den Text dazu anzeigen. Dazu erweitern wir den Suchhilfe-View um Annotationen am Schlüsselfeld. Über "@ObjectModel.text.element" geben wir bekannt, welches Feld den Text beinhaltet, über "@UI.textArrangement" definieren wir den Text am Ende, damit der Schlüsselwert vorn steht.

@ObjectModel.text.element: [ 'Description' ]
@UI.textArrangement: #TEXT_LAST
key Values.value_low as Staging,

 

Prüfen wir nun die Anpassungen in der Anwendung, erhalten wir das finale Ergebnis. Der Filter ist entsprechend definiert und enthält für den User beschreibende Texte.

 

Logik

Da wir nun entsprechend die UI angepasst haben, müssen wir entsprechend noch die Ermittlung in der Query Klasse anpassen. Da das Feld Staging nun die Ermittlung des Repository verändern soll, aber keinen Einfluss auf die Datenermittlung hat, müssen wir es vor der Datenabgrenzung extrahieren. Dazu lesen wir alle Filter ein und nehmen den ersten Eintrag aus der Range. Im Fehlerfall befüllen wir die Stage mit dem TEST-Kennzeichen.

TRY.
    DATA(filters) = request->get_filter( )->get_as_ranges( ).
    test_stage = filters[ name = `STAGING` ]-range[ 1 ]-low.
  CATCH cx_rap_query_filter_no_range.
    test_stage = 'TEST'.
ENDTRY.

 

Hinweis: Die Erweiterung der Logik ist nur im Zusammenhang mit dem Custom Pattern Beispiel sinnvoll und hat erst einmal nichts mit der Wertehilfe zu tun. Die Logik wird allerdings benötigt, um den Filter von den anderen Werten zu entkoppeln.

 

Komplettes Beispiel

Das gesamte Beispiel findest du im GitHub Repository und alle in diesem Artikel gemachten Änderungen in diesem Commit. Damit kannst du den aktuellen Stand, sowie alle Änderungen, nachvollziehen.

 

Generische Version

Möchtest du nicht jede Wertehilfe individuell erstellen, dann hat Andre Fischer von SAP auch eine Lösung für dich. In diesem Beispiel beschreibt er, wie du mit einer Custom Entity und dem Additional Binding eine generische Version davon erstellen kannst, um in Zukunft nicht immer wieder neue Views anlegen zu müssen.

 

Fazit

Die Wertehilfe für das Staging wurde definiert und es kann jeweils nur ein System zur Anzeige der Software Komponenten gewählt werden. Damit können wir über diesen Filter das Verhalten der App steuern und der User weiß, welches System er auswählen kann.


Enthaltene Themen:
RAPBTPFestwerteFilter
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 - Custom Pattern (Verhalten)

Kategorie - ABAP

In diesem Artikel erweitern wir das Custom Pattern in RAP um zusätzliche Daten und Verhalten. Damit können wir Mehrwerte in der Implementierung schaffen.

29.04.2025

RAP - Custom Pattern

Kategorie - ABAP

Wie funktioniert das Custom Pattern in der ABAP Entwicklung und für welche Szenarien kannst du es in der Entwicklung verwenden? Lass uns dazu ein Beispiel anschauen.

25.04.2025

RAP - Tree View (Löschverhalten)

Kategorie - ABAP

In diesem Artikel schauen wir uns das Verhalten beim Löschen von Knoten im Tree View mit RAP an. Dabei gibt es einige interessante Punkte zu beachten.

15.04.2025

RAP - Tree View

Kategorie - ABAP

Du möchtest eine Hierarchie in RAP ganz einfach darstellen? Wie das in ABAP Cloud funktioniert, erfährst du in diesem Artikel.

08.04.2025

RAP - Classic Pattern

Kategorie - ABAP

In diesem Artikel schauen wir uns das Classic Pattern an und gehen auf die Anwendungsfälle der Implementierung in ABAP Cloud ein.

25.03.2025