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

CDS - Parameter

929

In diesem Artikel schauen wir uns Parameter in Core Data Services an und wie sie dein Leben erleichtern können oder auch erschweren.

Werbung


Artikel-Update: Seit Release 7.57 (S/4 HANA 2022) ist DEFINE VIEW als obsolet gekennzeichnet, stattdessen solltest du DEFINE VIEW ENTITY verwenden. Diese können an einigen Stellen zu den Beispielen abweichen. Mehr Informationen zu den neuen Views findest du in diesem Artikel.



Bisher hatten wir CDS View meist wie Tabellen behandelt, wenn es um Selects, Joins oder Einbindungen ging. In diesem Artikel wollen wir dir einen weiteren Aspekt zur Nutzung aufzeigen.

 

Allgemein

Eine weitere Möglichkeit der Steuerung von Eingaben und Einschränkungen in einem Core Data Service sind die Parameter. Die Parameter werden direkt nach der Definition des CDS Views angegeben und definiert. Wie ein Feld erhalten sie auch einen Datentypen der entweder ein interner Datentyp sein kann oder ein Datenelement aus dem Dictionary. Sobald ein Parameter definiert wurde, wird dieser auch zur Pflichteingabe beim Aufruf des Core Data Service.

Möchtest du einen Parameter verwenden, dann kannst du dazu einen Doppelpunkt verwenden mit dem nachfolgenden Parameternamen oder du arbeitest mit $parameters, um auf alle Parameter des Views zuzugreifen. Wir empfehlen dir die zweite Variante, da du hier eine gute Code Completion bekommst.

 

Verwendung

Die Parameter werden nach der Definition des Views angelegt, doch wo können sie überall im View verwendet werden? Dazu das folgende Beispiel, dass die verschiedenen Verwendungen aufzeigen soll:

@AbapCatalog.sqlViewName: 'ZBSCDMOPARAM'
@EndUserText.label: 'CDS with parameter'
define view ZBS_C_DmoParameter
  with parameters
    P_Date  : abap.dats,
    P_Type  : abap.char( 1 ),
    P_Field : abap.char( 10 )
  as select from ZBS_I_DmoInvoice
{
  key DocumentNumber,
      DocumentDate,
      _Partner.PartnerName,
      _Partner.Country,
      case $parameters.P_Type
        when 'A' then 'New'
        when 'B' then 'Old'
        else 'Unknown'
      end      as Status,
      $parameters.P_Field as ImportedField
}
where
  DocumentDate = $parameters.P_Date

 

In dem oben gezeigten Szenario gehen wir auf die folgenden Verwendungsszenarien ein:

  • Einschränkung der Datenmenge über die Where-Bedingung
  • Nutzung in einer Funktion
  • Direkte Verwendung als neues Feld

 

Data-Preview

Entsprechend ändert sich nun der Data-Preview in Eclipse, es werden nicht sofort die Daten des Views angezeigt, sondern wir erhalten im ersten Schritt eine Eingabemaske um die Parameter des Views zu befüllen, bevor die Daten angzeigt werden:

 

Nach Befüllung der Parameter werden die Daten angezeigt und enthalten die entsprechend übergebenen Werte:

 

Über die Outlines kannst du die eingegebenen Parameter prüfen und den Datentyp, sowie die Werte, prüfen:

 

Willst du die Parameter noch einmal ändern, dann findest du im Data-Preview einen entsprechenden Button "Parameter". Mit einem Klick öffnet sich das Eingabefenster und du hast die Möglichkeit die Parameter zu ändern. Das Popup gibt dir auch Hinweise auf die Eingabe des korrekten Formats.

 

Wiederverwendung

Im nächsten Schritt wollen wir auf dem erzeugten View einen weiteren View setzen, da wir den View als Grundlage für unsere Daten verwenden wollen. Aus diesem Grund müssen wir aber auch die Parameter beim Aufruf versorgen. Der neue View könnte nun wie folgt aussehen:

@AbapCatalog.sqlViewName: 'ZBSCDMOPARAMRE'
@EndUserText.label: 'Reuse with parameters'
define view ZBS_C_DmoParameterReuse
  with parameters
    P_Date : abap.dats
  as select from ZBS_C_DmoParameter(
                 P_Date : $parameters.P_Date,
                 P_Type : 'A',
                 P_Field : 'From Outer'
                 )
{
  key DocumentNumber,
      DocumentDate,
      Status,
      ImportedField
}

 

Dieses mal implementieren wir nur einen Parameter, den wir von außern in den View geben. Die anderen beiden Parameter versorgen wir mit Festwerten. Beim Select musst du hinter dem Viewnamen die Parameter in einer Klammer versorgen. Beim Aufruf des Data-Preview mit dem gleichen Datum erhalten wir die folgende Sicht:

 

Select

Im nächsten Schritt binden wir so einen View in ein Programm ein, wie muss so ein View eingebunden werden und wie können die Parameter versorgt werden. Dazu das folgende Beispiel:

SELECT FROM ZBS_C_DmoParameter(
    p_date = '20210422',
    p_type = 'C',
    p_field = 'Program'
  )
  FIELDS *
  INTO table@DATA(lt_parameter).

 

Die Parameter müssen in Klammern hinter dem Viewnamen angegeben werden, gleichzeitig werden die einzelnen Parameter mit Kommas voneinander abgetrennt. Der Rest des Zugriffs ist Standard ABAP SQL, die Parameter müssen angegeben werden, darauf wird dich auch der Compiler hinweisen.

 

Vorbelegung

Bestimmte Parameter wollen wir vielleicht mit Systemfeldern vorbelegen, wie zum Beispiel ein Datum, um tagesaktuelle Daten zu bekommen. Dazu können wir eine Annotation verwenden, um die Daten aus der aktuellen Umgebung abzuleiten. In diesem Fall greifen wir auf @Environment.systemfield zu, dazu passen wir unseren Parameter-View einmal an:

@AbapCatalog.sqlViewName: 'ZBSCDMOPARAM'
@EndUserText.label: 'CDS with parameter'
define view ZBS_C_DmoParameter
  with parameters
    @Environment.systemField: #SYSTEM_DATE
    P_Date  : abap.dats,
    P_Type  : abap.char( 1 ),
    P_Field : abap.char( 10 )
  as select from ZBS_I_DmoInvoice
{
  key DocumentNumber,
      DocumentDate,
      _Partner.PartnerName,
      _Partner.Country,
      case $parameters.P_Type
        when 'A' then 'New'
        when 'B' then 'Old'
        else 'Unknown'
      end                 as Status,
      $parameters.P_Field as ImportedField
}
where
  DocumentDate = $parameters.P_Date

 

Die folgenden Systemvariablen kannst du dabei verwenden und damit Felder vorbelegen:

 

Hinweis: Wenn Felder mit Standardwerten vorbelegt werden, sind sie keine Pflichtfelder mehr und können bei der Eingabe weggelassen werden.

 

Fazit

Parameter kommen vor allem im Analytics und Fiori Umfeld zum Einsatz, können aber auch geschickt für Selects eingesetzt werden. Wie sich Parameter verhalten und wo du sie einsetzen kannst, sollte dir nun bekannt sein.


Enthaltene Themen:
CDSCore Data ServiceParameter
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.


CDS - Writable View Entity

Kategorie - ABAP

Kannst du einen UPDATE auf einen Core Data Service in ABAP machen? Lass uns dazu die neuen CDS View Entitäten anschauen.

01.04.2025

CDS - Berechtigungsprüfung (Teil 2)

Kategorie - ABAP

Wie gehst du mit dem Thema Zugriffskontrolle bei Core Data Services in ABAP um und wie kannst du Fehler analysieren? Mehr dazu im Artikel.

14.03.2025

CDS - Hierarchie

Kategorie - ABAP

Was machen eigentlich Hierarchien und wie kannst du sie mit Core Data Services in ABAP aufbauen? In diesem Artikel schauen wir uns die Definition an.

07.02.2025

CDS - Migration der Views

Kategorie - ABAP

Du hast noch viele alte Core Data Services in deinem ABAP System? Zeit für die Migration zur neuen Entität.

15.11.2024

CDS - Typen und Enums

Kategorie - ABAP

Was wird im ABAP Dictionary die Datenelemente ablösen und wie kannst du schon heute die Typen für die Core Data Services verwenden? Mehr hier.

05.11.2024