Core Data Services (CDS) ABAP

Syntax Grundlagen & erstes Beispiel

(C) Brandeis Consulting

Ein CDS-View - 3 Objekte

  • DDL-Datei - Quelltextdatei, die im ADT in Eclipse angelegt und bearbeitet wird
  • CDS-View - Das CDS-Objekt aus ABAP Perspektive
  • CDS-DDIC-View - Das CDS-Objekt aus DB-Perspektive

Ansicht in die Tabelle TADIR für eine CDS-View

Blick auf die Artefakte der CDS-View im Eclipse

(C) Brandeis Consulting

(1/3) DDL-Datei

  • Quelltextdatei, die im ADT in Eclipse angelegt und bearbeitet wird
  • Transportierbares Objekt
(C) Brandeis Consulting

(2/3) CDS-View

  • Das CDS-Objekt aus ABAP Perspektive
  • Generiert aus der DDL Datei
  • Als Zeilentyp im ABAP nutzbar
  • Datenquelle in einer SELECT-Abfrage
  • Unterliegt der CDS Zugriffskontrolle
  • In SE11 als Quelltext
  • In AMDP nicht nutzbar
(C) Brandeis Consulting

(3/3) CDS DDIC View

  • CDS-Datenbankview
  • Datenbankview in der HANA
  • In SE11 als Struktur sichtbar
  • Theoretisch im ABAP nutzbar, aber nicht empfohlen
  • In AMDP nutzbar
(C) Brandeis Consulting

Die Namen der 3

Name der DDL-Datei normalerweise gleich dem CDS-View. Der CDS-View ist vor dem ersten Aktivieren noch umbenennbar . Bitte nicht machen…

Namen von CDS View (max. 30 Zeichen) und CDS DDIC/SQL View (max. 16 Zeichen) sind im gleichen Namensraum. Sie müssen also unterschiedlich sein.

Empfehlung: Namenskonvention festlege

zum Beispiel:

  • ZCDS_<Name> & ZV_<Name>
(C) Brandeis Consulting

CDS View Entities (1/2)

Das CDS-Konzept wurde mit ABAP 7.55 um sogenannte View Entities erweitert.
SCN Blog 1
SCN Blog 2

Unterschiede

  • es wird kein DDIC-View mehr generiert
  • Der generierte SQL-View heisst genauso wie der CDS-View
  • Es gibt nur einen Namen für DDL-Datei und CDS View
  • Die Aktivierung geht schneller
  • Nur für SAP HANA
  • Mehr Features bei den Ausdrücken
(C) Brandeis Consulting

CDS View Entities (2/2)

Die Annotation @Metadata.ignorePropagatedAnnotations: true sollte immer gelöscht werden, sonst werden die Annotationen aus Quell-Views bzw. Tabellen nicht geerbt.

Veranschaulichung, dass der

Verwendung in Frameworks

Wo bei CDS Views der Name des DDIC-Views verwendet wurde, kann bei der CDS View Entity direkt dieser Name verwendet werden:

  • Extraktor Views, bei der Anlagen einer DataSource im BW
  • Name des CDS InfoProviders bzw. der CDS Query mit dem Präfix 2C
  • Bei der Verwendung des Views im AMDP
(C) Brandeis Consulting

Datenmodell für die Beispiele

Übersicht des Datenmodels für die Beispiele

(C) Brandeis Consulting

Demo

@AbapCatalog.sqlViewName: 'ZJB_DEMO'
@AbapCatalog.compiler.compareFilter: true
@AbapCatalog.preserveKey: true
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Demo CDS View'
define view zjb_cds_demo
  as select from    zbc_tasks as t

    left outer join zbc_users as u 
      on t.assignee = u.user_id
{
  key t.task_key    as TaskKey,
      t.summary     as Summary,
      t.status      as Status,
      t.project     as Project,
      t.description as Description,
      t.assignee    as Assignee,
      u.firstname   as AssigneeFirstname,
      u.lastname    as AssigneeLastname,
      t.type        as Type,
      t.author      as Author,
      t.due_date    as DueDate,
      t.priority    as Priority
}
(C) Brandeis Consulting

Übung - Anlegen eines einfachen Views

  • Bitte Eure Initialen in den Namen
  • Der Name des Views und SQL-Views muss mit Z beginnen
  • Objekte in $TMP anlegen
  • 10 Minuten Zeit
  • Bei Fragen bitte gleich melden
  • Wer fertig ist, bitte in Zoom grünen Haken setzen
@AbapCatalog.sqlViewName: 'ZJB_DEMO'
@AbapCatalog.compiler.compareFilter: true
@AbapCatalog.preserveKey: true
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Demo CDS View'
define view zjb_cds_demo
  as select from    zbc_tasks as t

    left outer join zbc_users as u 
      on t.assignee = u.user_id
{
  key t.task_key    as TaskKey,
      t.summary     as Summary,
      t.status      as Status,
      t.project     as Project,
      t.description as Description,
      t.assignee    as Assignee,
      u.firstname   as AssigneeFirstname,
      u.lastname    as AssigneeLastname,
      t.type        as Type,
      t.author      as Author,
      t.due_date    as DueDate,
      t.priority    as Priority
}
(C) Brandeis Consulting

Syntax in CDS Views

  • Schlüsselwörter entweder in
    • GROSSBUCHSTABEN oder
    • kleinbuchstaben oder
    • Ersterbuchstabegroßundderrestklein
  • Bezeichner nicht case-sensitiv max. 30 Zeichen lang aus Buchstaben, Zahlen, Unterstrich und Schrägstrich
  • Literale
    • Zahlen ohne Punkt als Ganzzahle
    • Mit Punkt als Dezimaltrennzeichen wird ein Float daraus!
    • Zeichenketten mit Hochkomma
  • Kommentare
    • Zeilenendkommentare mit //
    • Blockkommentare mit /*…*/
(C) Brandeis Consulting

Syntax CDS View - Minimal

@AbapCatalog.sqlViewName: 'ZSQL_MINIMAL'
define view zcds_minimal as select from snwd_so {
    so_id      as salesorder_id,
    created_at as so_date   
}

@AbapCatalog.sqlViewName: <Viewname>

(C) Brandeis Consulting

Variante der CDS View Syntax

@AbapCatalog.sqlViewName: 'ZSQL_WHERE'
@AbapCatalog.compiler.compareFilter: true
@AbapCatalog.preserveKey: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'Examples for date and time'
define view ZCDS_where
  as select
    so_id,
    pd.product_id
  from              snwd_so as so
    left outer join snwd_pd as pd 
    on so.buy_contact_guid = pd.node_key

  where
    pd.category is null

Feldliste vor FROM-Klausel - genau wie im klassischen SQL

(C) Brandeis Consulting

Syntax CDS View - Standard Annotationen

Was wir ggf. eingeben bzw. ändern:

@AbapCatalog.sqlViewName: <Viewname>
@EndUserText.label: 'Minimal CDS definition

Alle anderen Annotationen sind für Fortgeschrittene

(C) Brandeis Consulting

SQL Preview

Im CDS Editor gibt es über das Kontextmenü die Möglichkeit, sich die Definition der CDS-Objektes in SQL anzuschauen.

CDS View in der per Rechtsklick die "Show SQL CREATE Statement" Funktion aufgerufen wird

Ein CREATE-Statement zum Erzeugen der View

(C) Brandeis Consulting

Annotationen

Annotationen enthalten zusätzliche Meta-Information. Zum Beispiel für die Verwendung der CDS-Views in unterschiedlichen Frameworks, z.B.

  • @Analytics
  • @Consumption
  • @EnterpriseSearch
  • @ObjectModel
  • @OData
  • @Search
  • @UI-Annotations

Zur Generierung des SQL-Views bzw. der DB-Ausführung werden sie überwiegend nicht benötigt.

(C) Brandeis Consulting

Annotationen auf unterschiedlichen Ebenen

CDS Views

@EndUserText.label: 'Extractor for SO Data'
@Analytics.dataExtraction.enabled : true

Beispiel für Parameter

@EndUserText.label: 'Beschreibung des Parameters'
@Environment.systemField: #CLIENT`

Beispiel für Felder

@Semantics.amount.currencyCode: 'CURR'
@Semantics.currencyCode: true

Übersicht, was wo verwendet werden kann

(C) Brandeis Consulting

Annoationen Syntax (1/2) - Pfad

Als direkter Pfad

@Annotation.SubAnnotation.SubSubAnnotation: <Wert>

Mit geschweiften Klammern

@Annotation: { SubAnnotation1: <Wert>,
               SubAnnotation2: { SubSubAnnotation1: <Wert>,
                                 SubSubAnnotation2: <Wert>  } }   
(C) Brandeis Consulting

Annotationen Syntax (2/2) - Wert

Der <Wert> steht hier für:

  • Ein in der Annotation definiertes Symbol, das mit # beginnt, z.B. #CLIENT_HANDLING
  • Ein Zeichenkettenliteral in Hochkomma oder ein numerisches Literal
  • Die logischen Werte true oder false
  • Listen (Arrays) von Dingen werden in Eckigen Klammern dargestellt: ['doc_number', 's_ord_item']

Mit Strg. + <Leertaste> bekommen wir passende Vorschläge

(C) Brandeis Consulting

Annotationen Syntax - Beispiel

define view zcds_Parameter
    with parameters 
    @EndUserText.label: 'Sprache'
    @EndUserText.quickInfo: 'Quick Info zur Sprache'
    @Environment.systemField: #SYSTEM_LANGUAGE  
    p_langu : abap.lang,
    
    @EndUserText: { label: 'Mandant',
                    quickInfo: 'Quick Info zum Mandant' }
    @Environment: {systemField: #CLIENT} 
    p_mandt : abap.clnt(3)
(C) Brandeis Consulting

Vererbung von Annotationen

Die Feld-Annotationen werden von einem Quell-View normalerweise 1:1 übernommen. Das gilt nicht für Annotationen auf View- bzw. auf Parameterebene!

Die folgende Annotation unterdrückt diese Vererbung.

@Metadata.ignorePropagatedAnnotations: true

Bei den CDS View-Entities ist diese Annotation standardmäßig eingeschaltet! Für ein "normales" Verhalten muss man sie ausschalten.

Atypische Feld-Annotationen

Manche Annotationen beziehen sich auf den ganzen View, sollen aber vererbbar sein. Diese sind dann im Bereich der Felder definiert, auch wenn sie sich nicht darauf beziehen. Vor welchem Feld sie stehen ist also eigentlich egal.

Ein bekanntes Beispiele hierfür ist

@UI.facet
(C) Brandeis Consulting