This is a test message to test the length of the message box.
Login
|
ABAP RAP Multi-Input Field
Erstellt von Software-Heroes

RAP - Multi-Input Field

181

Eine ganze Entität in einem Feld darstellen? Mit dem Multi-Input Field möglich. Heute schauen wir uns den Punkt in ABAP für die RAP Entwicklung an und schauen uns die Szenarien an.

Werbung


In diesem Artikel schauen wir uns einmal das Multi-Input Field an und wie du es in Zukunft in deiner App verwenden kannst.

 

Einleitung

In diesem Artikel erweitern wir unsere Sales App um ein Multi-Input Field. Was bedeutet das genau? In manchen Situationen möchten wir in einer Anwendung mehrere Werte in einem Feld hinterlegen. Grundsätzlich benötigen wir eine zusätzliche Entität in unserer Anwendung, da wir in einem Feld nicht unterschiedliche Einträge speichern können, sondern dies nur über eine zusätzliche Entität hinbekommen.

 

Standard 

Bereits mit dem RAP Generator haben wir unsere Entität für die verkauften Materialien definiert. Diese wird aktuell als Tabelle auf der Object Page angezeigt. Allerdings enthält die Tabelle nicht wirklich viele Informationen und die Befüllung über den Button und die Eingabe ist nicht wirklich optimal. Außerdem erwarten wir meistens nur 1-3 Einträge in der Tabelle.

 

Multi-Input Field

Ändern wir nun diese Eigenschaft und machen aus einer ganzen Entität ein Feld in der Anwendung. Alle Anpassungen werden in der Metadata Extension ZBS_C_SASale gemacht.

 

Object Page

Um das Multi-Input aus der Object Page zu aktivieren, müssen wir die Assoziation hinzufügen. Im nächsten Schritt fügen wir die Entität der Identifikation für die allgemeinen Felder hinzu und referenzieren über die Annotation das entsprechende Feld aus der Entität.

@UI.identification: [{ position: 160 , qualifier: 'GENERAL', value: '_SASold.MaterialId' }]
_SASold;

 

Laden wir nun die Object Page erneut, dann werden die beiden Einträge in der Facet für die allgemeinen Daten geladen und durch einen Punkt getrennt dargestellt. Damit können wir mehrere Werte in einem Feld anzeigen.

 

Gehen wir dann in den Änderungsmodus des Datensatzes, werden die verschiedenen Datensätze für die Bearbeitung nebeneinander geladen.

 

List Page

Wiederholen wir nun den Vorgang für das LineItem und fügen an der gleichen Stelle die Annotation ein. Wieder verweisen wir auf den Wert der Material ID.

@UI.lineItem: [ { position: 160, value: '_SASold.MaterialId'  } ]
_SASold;

 

Laden wir den List Report neu, dann werden auch die Werte im List Report angezeigt. Sind zu viele Items in einer Spalte, dann wir nur die Anzahl der vorhandenen Einträge angezeigt. Mit einem Klick auf den Link, bekommen wir eine Information zu den Einträgen. Damit sehen wir auf den ersten Blick auch Informationen von den Entitäten unterhalb von Root, direkt auf der Einstiegsseite.

 

Optimierung

Im Moment verwenden wir nur die technischen Schlüssel für die Anzeige und die Übernahme. es fehlen noch Dinge, wie die Wertehilfe oder ein beschreibender Text.

 

Wertehilfe

Die Wertehilfe können wir in diesem Fall wie immer implementieren. Da das Feld aus der Entität ZBS_C_SASold kommt, müssen wir dort auch die Suchhilfe am Feld einbinden. Dazu legen wir im ersten Schritt eine Suchhilfe für die Tabelle an. Dabei definieren wir eine allgemeine Suche über Material ID und den Text, sowie das Textattribut auf TEXT_ONLY.

@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Material Value Help'
@Search.searchable: true
define view entity ZBS_I_SAMaterialVH
  as select from zbs_dmo_material
{
      @Search.defaultSearchElement: true
      @Search.fuzzinessThreshold: 1.0
      @ObjectModel.text.element: [ 'MaterialName' ]
      @UI.textArrangement: #TEXT_FIRST
  key material as MaterialId,
      @Search.defaultSearchElement: true
      @Search.fuzzinessThreshold: 0.8
      name     as MaterialName
}

 

Öffnen wir also direkt die Entität und nicht die Metadata Extension und ergänzen die Annotation am Feld. Hier geben wir die Suchhilfe an, damit sie im UI verwendet wird.

@Consumption.valueHelpDefinition: [{ entity: { name: 'ZBS_I_SAMaterialVH', element : 'MaterialId' } }]
MaterialId,

 

Hier einmal ein Beispiel für die Verwendung der neuen Suchhilfe. Wir wählen aus der Suchhilfe zwei Werte aus. Die Werte werden im unteren Teil übernommen und wenn wir die Suche bestätigen, dann werden die zwei Werte auch in das Feld übernommen.

 

Wir können aber auch direkt im Feld nach einem Wert suchen und bekommen die Vorschläge aus der Suchhilfe. Wenn wir den Wert übernehmen, dann wird die ID wie bisher ins Feld übernommen.

 

Texte

Nun fehlt eigentlich nur noch ein ordentlicher Text, da unsere Anwender die technischen IDs nicht kennen, sondern meist nach den Namen suchen und diese auch verwenden. Dazu müssen wir im ersten Schritt die Entität ZBS_R_SASold um eine zusätzliche Assoziation erweitern, um an die Daten zu kommen. Hierfür verwenden wir die neue Wertehilfe, da dort auch der Name enthalten ist.

define view entity ZBS_R_SASOLD
  as select from zbs_sasold as SASold
  association              to parent ZBS_R_SASALE    as _SASale   on $projection.ParentUUID = _SASale.UUID
  association of exact one to one ZBS_I_SAMaterialVH as _Material on _Material.MaterialId = $projection.MaterialId
{
  key uuid        as UUID,
      parent_uuid as ParentUUID,
      materialid  as MaterialId,
      _SASale,
      _Material
}

 

Auf Ebene des Consumption Views ZBS_C_SASold erweitern wir den View um das Feld für den Namen und ergänzen die Material ID um die entsprechenden Annotationen. Damit wird die technische ID durch den Namen ausgetauscht.

@ObjectModel.text.element: [ 'MaterialName' ]
@UI.textArrangement: #TEXT_ONLY
MaterialId,
_Material.MaterialName,

 

Starten wir unsere Anwendung erneut bzw. aktualisieren die App, dann sollten nun die Werte sauber im UI erscheinen. Hier einmal als Beispiel der List Report. Das Vergleichsbild mit den technischen IDs findest du weiter oben im Artikel.

 

Vollständiges Beispiel

Alle Ressourcen findest du bei uns im GitHub Repository und die Änderungen aus diesem Artikel im folgenden Commit. Damit solltest du alle Anpassungen nachvollziehen können.

 

Fazit

Für einzelne Schlüssel und kleineren Entitäten ist es manchmal hilfreich, die Werte in einem Feld darzustellen. Die Eingabe ist für den Anwender einfach und weniger sperrig und die wenigen Informationen werden komprimierter dargestellt.

 

Quelle:
SAP Help - Multi-Input Field


Enthaltene Themen:
RAPBTPMulti-InputREX7
Kommentare (0)



Und weiter ...

Bist du zufrieden mit dem Inhalt des Artikels? Wir posten jeden Dienstag und 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.


ADT - RAP Analyzer [MIA]

Kategorie - ABAP

Die Einarbeitung und Übersicht in bestehende RAP Objekte kann nicht immer einfach sein, vor allem wenn es sich um komplexe Objekte handelt. Fragen wie das verwendete Pattern und wichtige Objekte müssen sich meist erarbeitet werden.

24.02.2026

RAP - Position der Buttons

Kategorie - ABAP

In diesem Artikel schauen wir uns die verschiedenen Positionen der Buttons an. Wo können wir in RAP die verschiedenen Actions platzieren und wie nutzen wir diese.

17.02.2026

RAP - Analytical Table

Kategorie - ABAP

Schauen wir uns einmal in RAP das letzten fehlende Puzzlestück zur Ablösung des ALVs an und wie wir die Analytical Table mit wenig Aufwand einrichten können.

13.02.2026

RAP - Mixed Content

Kategorie - ABAP

Wie bekommen wir eigentlich unterschiedlichen Content in die gleiche Spalte im List Report? Schauen wir uns dazu einmal ein praktisches Beispiel für unsere Sales App an.

10.02.2026

RAP - Augmentation

Kategorie - ABAP

In diesem Artikel stellen wir unser Datenmodell der RAP Anwendung um und ändern die Form wie wir mit den Texten umgehen. Dabei verwenden wir Augmentation, um unser Datenmodell trotzdem vollständig zu halten.

03.02.2026