30
Leseprobe Entwickeln Sie eigene ABAP-Anwendungen, ohne sich um die zeitraubende Implementierung der Hintergrundlogik kümmern zu müssen. Überzeugen Sie sich selbst, und lernen Sie in dieser Leseprobe, wie Sie mit der Consumer-API auf bestehende Ge- schäftsobjekte zugreifen. Felix Roth, Stefan Stöhr BOPF – Business-Objekte mit ABAP entwickeln 364 Seiten, gebunden, Dezember 2017 79,90 Euro, ISBN 978-3-8362-5972-9 www.sap-press.de/4520 »Anwendung der Consumer-API« »Einleitung« Inhaltsverzeichnis Index Die Autoren Leseprobe weiterempfehlen SAP-Wissen aus erster Hand.

SAP-issen aus erster an - Amazon S3 · 2018-03-26 · 115 5 Kapitel 5 Anwendung der Consumer-API Willkommen im BOPF-Programmierparadies! Hier finden Sie Dutzende von Programmierbeispielen,

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: SAP-issen aus erster an - Amazon S3 · 2018-03-26 · 115 5 Kapitel 5 Anwendung der Consumer-API Willkommen im BOPF-Programmierparadies! Hier finden Sie Dutzende von Programmierbeispielen,

LeseprobeEntwickeln Sie eigene ABAP-Anwendungen, ohne sich um die zeitraubende Implementierung der Hintergrundlogik kümmern zu müssen. Überzeugen Sie sich selbst, und lernen Sie in dieser Leseprobe, wie Sie mit der Consumer-API auf bestehende Ge-schäftsobjekte zugreifen.

Felix Roth, Stefan Stöhr

BOPF – Business-Objekte mit ABAP entwickeln

364 Seiten, gebunden, Dezember 2017 79,90 Euro, ISBN 978-3-8362-5972-9

www.sap-press.de/4520

»Anwendung der Consumer-API« »Einleitung«

Inhaltsverzeichnis

Index

Die Autoren

Leseprobe weiterempfehlen

SAP-Wissen aus erster Hand.

Page 2: SAP-issen aus erster an - Amazon S3 · 2018-03-26 · 115 5 Kapitel 5 Anwendung der Consumer-API Willkommen im BOPF-Programmierparadies! Hier finden Sie Dutzende von Programmierbeispielen,

115

5

Kapitel 5

Anwendung der Consumer-API

Willkommen im BOPF-Programmierparadies! Hier finden Sie

Dutzende von Programmierbeispielen, die Ihnen zeigen, wie Sie mit

der Consumer-API auf bestehende Geschäftsobjekte zugreifen.

In diesem Kapitel zeigen wir Ihnen, wie Sie die Methoden der in Kapitel 4, »Architektur

der Consumer-API«, vorgestellten Consumer-API auf bereits bestehende Geschäfts-

objekte anwenden können. Dazu zählen in erster Linie die CRUDQ-Grundoperationen

zum Bearbeiten von Knoteninstanzen eines Geschäftsobjekts:

� Anlegen (Create)

� Lesen (Read)

� Aktualisieren (Update)

� Löschen (Delete)

� Abfragen (Query)

Darüber hinaus zeigen wir Ihnen aber auch alle weiteren wichtigen Funktionen, die

Sie bei Ihrer alltäglichen Arbeit mit dem BOPF und seinen Geschäftsobjekten benöti-

gen werden. Zu diesen Funktionen zählen:

� das Auflösen von Assoziationen zwischen zwei Knoten

� das Sperren und Entsperren von Geschäftsobjektinstanzen ohne Modifikation

(Änderung)

� das Ermitteln eines Schlüssels zu einem alternativen Schlüssel

� das Auslesen von Standardwerten für die Anlage von Knoten und für das Ausfüh-

ren von Aktionen und Abfragen

� das Ermitteln des Oberknotens zu einem gegebenen Knoten

� das Wissen über das Ausführen von Aktionen, Validierungen und Ermittlungen

eines Geschäftsobjekts

Wichtig ist es, zu wissen, dass in den Listings dieses Kapitels immer wieder die Varia-

ble LO_SERV_MGR vorkommt, die eine Referenz auf den Service-Manager hält. Die-

ser wird aus Platzgründen nicht immer wieder erneut beschafft. Die Listings bauen

daher immer auf dem folgenden Listing 5.1 auf:

5972.book Seite 115 Donnerstag, 30. November 2017 3:26 15

Page 3: SAP-issen aus erster an - Amazon S3 · 2018-03-26 · 115 5 Kapitel 5 Anwendung der Consumer-API Willkommen im BOPF-Programmierparadies! Hier finden Sie Dutzende von Programmierbeispielen,

5 Anwendung der Consumer-API

116

DATA: lo_serv_mgr TYPE REF TO /bobf/if_tra_service_manager.lo_serv_mgr = /bobf/cl_tra_serv_mgr_factory=>get_service_manager(iv_bo_key = /bobf/if_demo_customer_c=>sc_bo_key

).

Listing 5.1 Beschaffung des Service-Managers

Das vorliegende Kapitel können Sie auch durcharbeiten, wenn Sie noch kein eigenes

Geschäftsobjekt angelegt haben, da Sie in jedem Abschnitt ein auf den Demo-Ge-

schäftsobjekten des SAP-Systems beschriebenes Beispiel vorfinden werden.

Wir empfehlen Ihnen, die hier vorgestellten Programmierbeispiele direkt im ABAP-

Editor auszuprobieren. Den Erfolg können Sie anhand der in Kapitel 3, »Testen von

Geschäftsobjekten«, beschriebenen Test-UI, der Transaktion BOBT, durch Vergleich

der Ergebnisse überprüfen.

Consumer-API nur für externe Aufrufe

Alle in diesem Kapitel beschriebenen Methoden sollten Sie nicht innerhalb eines

Geschäftsobjekts, d. h. in den Implementierungen von Aktionen, Validierungen,

Ermittlungen usw., verwenden. Die interne Verwendung wird in Kapitel 6, »Die

Geschäftsobjekt-API«, beschrieben. Dort geschieht die Implementierung durch die in

den Methoden bereitgestellten Importparameter.

5.1 Lesen von Knoteninstanzen

Das Lesen von Instanzen eines Geschäftsobjekts gehört zu den absoluten Grundauf-

gaben des Frameworks. In diesem Zusammenhang möchten wir noch einmal darauf

hinweisen, dass immer nur Instanzen eines einzelnen Knotens ausgelesen werden

können und nicht die Instanzen aller Knoten eines Geschäftsobjekts. In der Regel wer-

den Sie daher erst den Hauptknoten (ROOT ) auslesen und anschließend, falls weitere

Knoten benötigt werden, von diesem aus über Assoziationen zu Ihrem gewünschten

Zielknoten navigieren. Beim Lesen von Knoteninstanzen eines Geschäftsobjekts müs-

sen zwei Szenarien unterschieden werden:

1. Abfrage von Instanzen anhand von Kriterien

Sie haben keinen Schlüssel, aber eventuell einen oder mehrere alternative Schlüs-

sel (beispielsweise die ursprünglichen Primärschlüssel) oder Filterkriterien, zu

denen Sie die dazugehörigen Instanzen bzw. die Schlüssel auslesen möchten.

Dann können Sie die Methode QUERY des Service-Managers verwenden.

5972.book Seite 116 Donnerstag, 30. November 2017 3:26 15

5.1 Lesen von Knoteninstanzen

117

5

2. Abfrage von Instanzen über einen Schlüssel

Sie haben bereits einen oder mehrere Schlüssel und wollen dazu die dazugehöri-

gen Knoteninstanzen eines Geschäftsobjekts auslesen. Dann können Sie die

Methode RETRIEVE oder QUERY des Service-Managers verwenden.

5.1.1 Die Methode QUERY

Zur Abfrage von Knoteninstanzen eines Geschäftsobjekts anhand von bestimmten

Kriterien können Sie die Methode QUERY des Service-Managers verwenden.

Nur Rückgabe von persistenten Daten

Abfragen geben nur die Schlüssel von Instanzen zurück, die bereits auf der Daten-

bank persistiert wurden (und nicht solche, die gerade im Speicher in Bearbeitung lie-

gen). Abfragen sollten daher nicht innerhalb der transaktionalen Verarbeitung (z. B.

in einer Aktion, Ermittlung oder Validierung) verwendet werden. Als Alternative ste-

hen Ihnen hier Assoziationen zur Verfügung.

Konkret können Sie mit dieser Methode dieselben Funktionen wie mit einer SELECT-

Anweisung (von Joins und Aggregationen abgesehen) abbilden. Zu diesen Funktio-

nen zählen:

� vordefinierte Abfragen aus dem Geschäftsobjektausführen

� nach Schlüsseln und Werten filtern

� bestimmen, ob nur die ermittelten Schlüssel oder auch die Daten

der Knoteninstanzen zurückgegeben werden sollen

� sich die Anzahl der gefunden Einträge zurückgeben lassen

� die maximale Ergebnismenge einschränken

� die Ergebnismenge sortieren

� Paging verwenden, d. h. sich nur eine Teilmenge zurückgeben lassen

Nachfolgend erläutern wir alle diese Funktionen getrennt. Das bedeutet aber nicht,

dass Sie diese nicht auch kombiniert verwenden können.

Grundaufbau

Zur Demonstration der Funktionsweise der Methode QUERY wird in diesem Ab-

schnitt die grundlegende Abfrage SELECT_ALL auf den Hauptknoten (hier ROOT ) ver-

wendet, die in jedem Geschäftsobjekt als Standard definiert werden kann. Diese gibt,

wie der Name es aussagt, alle Instanzen eines Knotens zu dem jeweiligen Geschäfts-

objekt zurück.

5972.book Seite 117 Donnerstag, 30. November 2017 3:26 15

Page 4: SAP-issen aus erster an - Amazon S3 · 2018-03-26 · 115 5 Kapitel 5 Anwendung der Consumer-API Willkommen im BOPF-Programmierparadies! Hier finden Sie Dutzende von Programmierbeispielen,

5 Anwendung der Consumer-API

118

Beim Aufruf der Methode QUERY müssen Sie unter dem Parameter IV_QUERY_KEY

über das Konstanten-Interface des Geschäftsobjekts unter Konstante SC_QUERY_

ROOT den Schlüssel dieser Abfrage entsprechend auswählen. Für das Geschäftsobjekt

/BOBF/DEMO_CUSTOMER wäre der Pfad zu dem Schlüssel der Abfrage der folgende:

/bobf/if_demo_customer_c=>sc_query-root-select_all

Listing 5.2 zeigt einen beispielhaften Aufruf der Methode QUERY für den Knoten

ROOT des Geschäftsobjekts /BOBF/DEMO_CUSTOMER.

DATA: lt_data TYPE /bobf/t_demo_customer_hdr_k,lt_keys TYPE /bobf/t_frw_key.

"Beschaffen des Service-Managers wie im Listing 5.1lo_serv_mgr->query(EXPORTINGiv_query_key = /bobf/if_demo_customer_c=>

sc_query-root-select_alliv_fill_data = abap_true

IMPORTINGet_data = lt_dataet_key = lt_keys

).

Listing 5.2 Grundaufbau einer Abfrage

Sind Sie nicht nur an den Schlüsseln (Rückgabetabelle ET_KEY), sondern auch an den

Daten der Knoteninstanzen interessiert, können Sie diese über den Parameter IV_

FILL_DATA = 'X' abfragen. Dadurch wird auch die Rückgabetabelle ET_DATA mit den

Daten der Knoteninstanzen gefüllt. Wichtig dabei ist, dass Sie für diesen Parameter

eine Tabelle mit der richtigen, zu dem Knoten passenden Struktur bereitstellen.

Eine solche Abfrage über die Methode QUERY können Sie für alle vordefinierten

Abfragen des Geschäftsobjekts durchführen. Wählen Sie dazu über das Konstanten-

Interface die entsprechende Abfrage aus. Nachfolgend ist dies über die zweite Stan-

dardabfrage SELECT_BY_ATTRIBUTES (bzw. SELECT_BY_ELEMENTS), die ebenfalls für

jeden Knoten zusätzlich angelegt werden kann, dargestellt.

Einschränken über Attribute

Zum Einschränken der Abfrageergebnisse nach Attributwerten bietet der Parameter

IT_SELECTION_PARAMETERS den Grundaufbau einer Range-Tabelle mit den klassi-

schen Feldern SIGN, OPTION, LOW und HIGH an.

Zusätzlich zu diesen Grundfeldern müssen Sie in der Struktur noch den Namen des

einzuschränkenden Attributs im Feld ATTRIBUTE_NAME angeben. Durch dieses zu-

5972.book Seite 118 Donnerstag, 30. November 2017 3:26 15

5.1 Lesen von Knoteninstanzen

119

5

sätzliche Feld ist es möglich, dass Sie auf mehrere Attribute gleichzeitig filtern kön-

nen oder für ein Attribut mehrere Einschränkungen treffen können, z. B. pro Zeile

der Selektions-Parametertabelle eine Einschränkung. Listing 5.3 zeigt Ihnen eine bei-

spielhafte Implementierung einer Abfrage mit SELECT_BY_ATTRIBUTES für den Kno-

ten ROOT des Geschäftsobjekts /BOBF/DEMO_CUSTOMER. Im Beispiel werden alle

Kunden gesucht, die »EUR« als Kundenwährung haben.

DATA: lt_sel_param TYPE /bobf/t_frw_query_selparam,ls_sel_param TYPE /bobf/s_frw_query_selparam.

ls_sel_param-attribute_name = /bobf/if_demo_customer_c=>sc_query_attribute-root-select_by_attributes-cust_curr.

"Oder auch direkte Angabe des Attributs CUST_CURR möglichls_sel_param-low = 'EUR'.ls_sel_param-option = 'EQ'.ls_sel_param-sign = 'I'.APPEND ls_sel_param TO lt_sel_param.lo_serv_mgr->query(EXPORTINGiv_query_key = /bobf/if_demo_customer_c=>sc_query-root-

select_by_attributesiv_fill_data = abap_trueit_selection_parameters = lt_sel_param

IMPORTINGet_data = lt_dataet_key = lt_keys

).

Listing 5.3 Abfrage nach Attributen

Einschränken über Schlüssel

Wenn Sie bereits die Schlüssel einer Knoteninstanz eines Geschäftsobjekts haben

und sich dazu die Daten der Knoteninstanz auslesen lassen wollen, müssen Sie die-

sen Schlüssel nur im Feld KEY der Tabelle des Parameters IT_FILTER_KEY angeben

und zusätzlich den Parameter IV_FILL_DATA auf abap_true setzen. Listing 5.4 zeigt

eine solche Abfrage auf Knoteninstanzen über einen Schlüssel beispielhaft.

DATA: lt_filter_key TYPE /bobf/t_frw_key,ls_filter_key TYPE /bobf/s_frw_key.

ls_filter_key-key = '000C294A1BC91ED78FA9BE1AD6C520E0'.APPEND ls_filter_key TO lt_filter_key.

5972.book Seite 119 Donnerstag, 30. November 2017 3:26 15

Page 5: SAP-issen aus erster an - Amazon S3 · 2018-03-26 · 115 5 Kapitel 5 Anwendung der Consumer-API Willkommen im BOPF-Programmierparadies! Hier finden Sie Dutzende von Programmierbeispielen,

5 Anwendung der Consumer-API

120

lo_serv_mgr->query(EXPORTINGiv_query_key = /bobf/if_demo_customer_c=>sc_query-root-

select_alliv_fill_data = abap_trueit_filter_key = lt_filter_key

IMPORTINGet_data = lt_dataet_key = lt_keys

).

Listing 5.4 Abfrage nach Schlüsseln

5.1.2 Die Methode RETRIEVE

Anstelle bei der Methode QUERY im Parameter IT_FILTER_KEY die Schlüssel mitzuge-

ben und über den Parameter IV_FILL_DATA die Daten anzufragen, können Sie dies

auch über die Methode RETRIEVE des Service-Managers erreichen.

Vorteil dieser Methode ist, dass Sie über den Parameter IV_INVALIDATE_CACHE die

Möglichkeit haben, den Puffer zurückzusetzen und, falls Sie dies benötigen, Sperren

auf die Knoteninstanzen zu setzen. Letzteres finden Sie in Abschnitt 5.4, »Sperren/

Entsperren«, beschrieben.

Listing 5.5 zeigt Ihnen einen solchen Aufruf der Methode RETRIEVE. Achten Sie da-

rauf, wirklich nur Schlüssel und keine alternativen Schlüssel mitzugeben. Im Beispiel

ist zu demonstrativen Zwecken ein richtiger und ein falscher Schlüssel mitgegeben

worden.

DATA: lt_keys TYPE /bobf/t_frw_key,ls_key TYPE /bobf/s_frw_key,lt_failed_keys TYPE /bobf/t_frw_key.

"beispielhafter Schlüssells_key-key = '0050568F72901ED79EA326CDC37C60FF'.APPEND ls_key TO lt_keys.

ls_key-key = '123456'. "falschAPPEND ls_key TO lt_keys.

lo_serv_mgr->retrieve(EXPORTINGiv_node_key = /bobf/if_demo_customer_c=>sc_node-

rootit_key = lt_keys

5972.book Seite 120 Donnerstag, 30. November 2017 3:26 15

5.1 Lesen von Knoteninstanzen

121

5

iv_fill_data = abap_trueiv_invalidate_cache = abap_true

IMPORTINGet_data = lt_dataet_failed_key = lt_failed_keys

).

Listing 5.5 Auslesen von Daten mit RETRIEVE

Für die Schlüssel, für die die Abfrage erfolgreich war, können Sie im Rückgabepara-

meter ET_DATA die Daten der Knoteninstanzen finden. Alle fehlerhaften Schlüssel

würden dagegen im Rückgabeparameter ET_FAILED_KEY zurückgegeben werden.

5.1.3 Auslesen einer Verknüpfung mit RETRIEVE_BY_ASSOCIATION

In Abschnitt 2.5, »Assoziationen«, haben wir Ihnen die Möglichkeiten der Verknüp-

fung von Knoten über Assoziationen vorgestellt. Die Methode RETRIEVE_BY_ASSO-

CIATION ist letztlich die Stelle, an der Sie mit diesen definierten Verknüpfungen

arbeiten können und von einer Instanz eines Knotens A zu einem oder mehreren

Instanzen eines Knotens B navigieren können.

Zum Aufruf der Methode müssen Sie im Parameter IV_ASSOCIATION den Namen der

Assoziation angeben. Diesen können Sie im Konstanten-Interface des Geschäftsob-

jekts unter der Konstante SC_ASSOCIATION, gefolgt von dem gewünschten Knoten,

finden. Im Parameter IV_NODE_KEY müssen Sie zusätzlich die ID des gewünschten

Knotens angeben, von der aus Sie navigieren wollen, während Sie im Parameter IT_

KEY die Schlüssel der zu diesem Knoten gehörenden Knoteninstanzen hinterlegen.

Über den Parameter IV_FILL_DATA können Sie direkt die Daten der ermittelten Kno-

teninstanzen anfragen, die im Rückgabeparameter ET_DATA bereitgestellt werden.

Listing 5.6 zeigt beispielhaft die Navigation vom Knoten ROOT zu dem Unterknoten

ROOT_TEXT des Geschäftsobjekts /BOBF/DEMO_CUSTOMER über die gleichnamige

Assoziation ROOT_TEXT.

DATA: lt_data TYPE /bobf/t_demo_short_text_k,lt_key TYPE /bobf/t_frw_key,ls_key TYPE /bobf/s_frw_key.

"beispielhafter Schlüssells_key-key = '0050568F72901ED79EA63B400C91A0FF'.APPEND ls_key TO lt_key.

lo_serv_mgr->retrieve_by_association(EXPORTING

5972.book Seite 121 Donnerstag, 30. November 2017 3:26 15

Page 6: SAP-issen aus erster an - Amazon S3 · 2018-03-26 · 115 5 Kapitel 5 Anwendung der Consumer-API Willkommen im BOPF-Programmierparadies! Hier finden Sie Dutzende von Programmierbeispielen,

5 Anwendung der Consumer-API

122

iv_node_key = /bobf/if_demo_customer_c=>sc_node-rootit_key = lt_keyiv_association = /bobf/if_demo_customer_c=>sc_

association-root-root_textiv_fill_data = abap_true

IMPORTINGet_data = lt_data ).

Listing 5.6 Auslesen von Daten über eine Assoziation

Bei Erfolg werden Ihnen in der Rückgabetabelle ET_DATA die ausgelesenen Kno-

teninstanzen zurückgegeben.

5.2 Konvertieren von alternativen Schlüsseln

Häufig werden Sie bereits einen alternativen Schlüssel eines Geschäftsobjektskno-

tens zur Hand haben (beispielsweise die Kundennummer 123456) und möchten dann

zu diesem alternativem Schlüsselden technischen Schlüssel des dazugehörigen Kno-

tens bestimmen, damit Sie mit diesem technischen Schlüssel eine Sperrung, eine

Modifikation oder eine Assoziation über die Methoden des Frameworks durchführen

können. In einem solchen Fall haben Sie zwei Möglichkeiten:

� Sie führen mit dem alternativen Schlüssel eine Abfrage über SELECT_BY_ATTRIBU-

TES aus (siehe Abschnitt 5.1.1).

� Sie verwenden die Methode CONVERT_ALTERN_KEY des Service-Managers und

übergeben dort den alternativen Schlüssel.

Die Verwendung der Methode CONVERT_ALTERN_KEY ist denkbar einfach: Sie müs-

sen in der internen Tabelle des Parameters IT_KEY die alternativen Schlüssel, im

Parameter IV_NODE_KEY den entsprechenden Knoten und im Parameter IV_ALT-

KEY_KEY den Namen des alternativen Schlüssels mitgeben.

Auch wenn sich der Parameter IV_ALTKEY_KEY über Literale (durch die direkte

Angabe von 'CUSTOMER_ID') befüllen lässt, empfiehlt sich die Benutzung des Kon-

stanten-Interface des Geschäftsobjekts. Die alternativen Schlüssel finden Sie im Kon-

stanten-Interface unter der Konstante SC_ALTERNATIVE_KEY, gefolgt vom Namen

des Knotens.

In Listing 5.7 sehen Sie eine beispielhafte Implementierung der Methode, mit der für

den alternativen Schlüssel CUSTOMER_ID der Schlüssel der dazugehörigen Kno-

teninstanz bestimmt wird.

DATA: lt_alt_keys TYPE TABLE OF /bobf/demo_customer_id,ls_alt_keys TYPE /bobf/demo_customer_id,

5972.book Seite 122 Donnerstag, 30. November 2017 3:26 15

5.3 Modifizieren von Objekten

123

5

lt_keys TYPE /bobf/t_frw_key.

ls_alt_keys = '123456'.APPEND ls_alt_keys TO lt_alt_keys.

lo_mgr->convert_altern_key(EXPORTINGiv_node_key = /bobf/if_demo_customer_c=>sc_node-rootiv_altkey_key = /bobf/if_demo_customer_c=>sc_

alternative_key-root-customer_idit_key = lt_alt_keys

IMPORTINGet_key = lt_keys

).

Listing 5.7 Konvertierung von alternativen Schlüsseln

Bei erfolgreicher Ausführung erhalten Sie die zugehörigen Schlüssel in der Rückgabe-

tabelle ET_KEY.

5.3 Modifizieren von Objekten

Das Modifizieren von Objekten geschieht im BOPF mit der Methode MODIFY des Ser-

vice-Managers. Mit dieser Methode können Sie Geschäftsobjekte anlegen, ändern

und löschen.

Zusätzlich wird zum Abschluss für all diese Modifikationen die Methode SAVE des

Transaktions-Managers benötigt. Den Transaktions-Manager brauchen Sie in diesem

Fall, da Datenbankmodifikationen nicht direkt ausgeführt, sondern wie bei klassi-

schen transaktionalen Funktionsbausteinen (BAPI-Funktionsbausteinen) in einer

logischen Datenbankeinheit (LUW) gesammelt werden. Die Methode SAVE stößt zum

Abschließen dieser Verarbeitung die Anweisung COMMIT WORK an und verarbeitet

die in der LUW gesammelten Datenbankoperationen.

Datenbanksperren

Sperren werden durch den Aufruf der Methode MODIFY für die übergebenen Schlüs-

sel automatisch gesetzt. Die Sperren gelten für das gesamte Geschäftsobjekt und

werden durch die Methode SAVE wieder freigegeben. Falls das Speichern fehlschlägt,

kann die Freigabe mit der Methode CLEANUP erfolgen. Darüber können Sie auch

manuelle Sperren ohne eine Änderung durch die Methode MODIFY setzen. Diese

Vorgehensweise wird in Abschnitt 5.4 genauer beschrieben.

5972.book Seite 123 Donnerstag, 30. November 2017 3:26 15

Page 7: SAP-issen aus erster an - Amazon S3 · 2018-03-26 · 115 5 Kapitel 5 Anwendung der Consumer-API Willkommen im BOPF-Programmierparadies! Hier finden Sie Dutzende von Programmierbeispielen,

5 Anwendung der Consumer-API

124

Die entscheidende Tabelle beim Modifizieren mit der Methode MODIFY ist die Ta-

belle des Importparameters IT_MODIFCATION. Eine Zeile dieser Tabelle entspricht

genau einer Modifikation. Für jede Zeile kann über das Feld CHANGE_MODE be-

stimmt werden, welche Modifikation ausgeführt wird (also ob angelegt, geändert

oder gelöscht wird). Die Methode MODIFY ermöglicht daher die Ausführung mehre-

rer Modifikationsoperationen gleichzeitig. Listing 5.8 zeigt die grundlegende Aufruf-

reihenfolge der Methode MODIFY.

"Beschaffen des Service-ManagersDATA: lo_serv_mgr TYPE REF TO /bobf/if_tra_service_manager.lo_mgr = /bobf/cl_tra_serv_mgr_factory=>get_service_manager(iv_bo_key = /bobf/if_demo_customer_c=>sc_bo_key

)."Beschaffen des Transaktions-ManagersDATA: lo_trans_mgr TYPE REF TO /bobf/if_tra_transaction_mgr.lo_trans_mgr = /bobf/cl_tra_trans_mgr_factory=>

get_transaction_manager( )."Deklaration der benötigten VariablenDATA: lt_modi TYPE /bobf/t_frw_modification,

ls_modi TYPE /bobf/s_frw_modification,lo_message TYPE REF TO /bobf/if_frw_message,lt_messages TYPE /bobf/t_frw_message_k,lv_rejected TYPE flag,lt_rejected_keys TYPE /bobf/t_frw_key2.

FIELD-SYMBOLS: <s_message> TYPE /bobf/s_frw_message_k.

"Hier unterschiedliches Befüllen der Tabelle LT_MODI je nachdem,"ob Sie die das Geschäftsobjekt Anlegen, Ändern oder"Aktualisieren wollenls_modi-...APPEND ls_modi TO lt_modi."Aufruf der Methode MODIFY und Übergabe der Modifikations-Tabellelo_serv_mgr->modify(EXPORTINGit_modification = lt_modi

IMPORTINGeo_message = lo_message

)."Überprüfung ob die Verarbeitung erfolgreich warIF lo_message IS BOUND.IF lo_message->check( ) EQ abap_true."Ausgabe der Nachrichten im Fehlerfalllo_message->get_messages(

5972.book Seite 124 Donnerstag, 30. November 2017 3:26 15

5.3 Modifizieren von Objekten

125

5

IMPORTING et_message = lt_messages).LOOP AT lt_messages ASSIGNING <s_message>.cl_demo_output=>write_data(<s_message>-message->get_text( )

).ENDLOOP.cl_demo_output=>display( ).

ELSE. "bei erfolgreicher Ausführung speichernlo_trans_mgr->save(IMPORTINGev_rejected = lv_rejected

)."Falls Speichern erfolgreich, Ausgabe sonst RollbackIF lv_rejected IS INITIAL.cl_demo_output=>display_text( 'Erfolg!' ).

ELSE.lo_trans_mgr->cleanup( ).

ENDIF.ENDIF.

ENDIF.

Listing 5.8 Grundaufbau für die Methode MODIFY

Das Feld CHANGE_MODE können Sie mit folgenden Konstanten des Interface /BOBF/

IF_FRW_C belegen:

� /BOBF/IF_FRW_C=>SC_MODIFY_CREATE für Anlegen

� /BOBF/IF_FRW_C=>SC_MODIFY_UPDATE für Aktualisieren

� /BOBF/IF_FRW_C=>SC_MODIFY_DELETE für Löschen

Je nachdem, ob Sie anlegen, aktualisieren oder löschen wollen, müssen Sie die Zeilen-

felder der Tabelle IT_MODIFICATION unterschiedlich belegen. Einen Überblick über

die einzelnen Felder der Modifikationstabelle finden Sie in Tabelle 5.1.

Feldname Beschreibung

NODE Name des zu modifizierenden Knotens

CHANGE_MODE Art der Änderung

NODE_CAT Beim Anlegen: Knotenkategorie; wenn keine mitgegeben wird, wird

die Standardkategorie verwendet (obsolet, immer leer lassen).

KEY Beim Anlegen: neu erzeugter Schlüssel des Knotens (mit GET_NEW_KEY )

Tabelle 5.1 Die Felder der Modifikationsstruktur

5972.book Seite 125 Donnerstag, 30. November 2017 3:26 15

Page 8: SAP-issen aus erster an - Amazon S3 · 2018-03-26 · 115 5 Kapitel 5 Anwendung der Consumer-API Willkommen im BOPF-Programmierparadies! Hier finden Sie Dutzende von Programmierbeispielen,

5 Anwendung der Consumer-API

126

In den folgenden Abschnitten beschreiben wir diese Aspekte:

� Anlegen von Hauptknoten

� Anlegen von Unterknoten

� Aktualisieren von Knoteninstanzen

� Löschen von Knoteninstanzen

5.3.1 Anlegen von Hauptknoten

Beim Anlegen von Hauptknoten müssen Sie die Felder KEY, DATA, NODE und natür-

lich CHANGE_MODE befüllen. Wichtig ist, dass Sie in der Struktur des Parameters

DATA und im Parameter KEY einen neu generierten Schlüssel mitgeben, den Sie von

der Methode GET_NEW_KEY des Service-Managers erhalten.

Zusätzlich müssen Sie dafür sorgen, dass Sie im Parameter DATA die richtige Struktur

des gewünschten Knotens mitgeben. Das Feld ist hierbei vom Typ TYPE REF TO data.

Daher müssen Sie die Struktur vorher ebenfalls über TYPE REF TO strukturname

deklarieren und über die Anweisung CREATE DATA erzeugen. Den Strukturnamen

finden Sie in den Einstellungen des Knotens. Anschließend können Sie die erzeugte

Struktur über den Komponentenselektor -> befüllen. Listing 5.9 zeigt dies beispiel-

haft für das Geschäftsobjekt /BOBF/DEMO_CUSTOMER für den Knoten ROOT.

"Deklaration der Variablen und Beschaffung des Service-Managers"und Transaktions-Managers wie in Listing 5.8DATA: lr_cust_root TYPE REF TO /bobf/s_demo_customer_hdr_k."Erzeugen der neuen Knoten-Struktur des Kunden-KopfesCREATE DATA lr_cust_root.

DATA Beim Anlegen und Aktualisieren: Daten des Knotens

CHANGED_FIELDS Beim Ändern: die geänderten Felder

ASSOCIATION ID der Verknüpfung; zum Anlegen von Unterknoten

SOURCE_NODE eventuell referenzierter Oberknoten; zum Anlegen von Unterknoten

SOURCE_KEY eventuell referenziertes Geschäftsobjekt; zum Anlegen von Unter-

knoten

ROOT_KEY Optional beim Anlegen und Aktualisieren: Zu welchen ROOT-Knoten

soll die Instanz gehören?

Feldname Beschreibung

Tabelle 5.1 Die Felder der Modifikationsstruktur (Forts.)

5972.book Seite 126 Donnerstag, 30. November 2017 3:26 15

5.3 Modifizieren von Objekten

127

5

"Erzeugung eines neuen technischen Schlüsselslr_cust_root->key = lo_serv_mgr->get_new_key( )."oder über /bobf/cl_frw_factory=>get_new_key( ).

lr_cust_root->customer_id = '123459'.lr_cust_root->sales_org = '200'.lr_cust_root->cust_curr = 'US'.lr_cust_root->address_contry = 'US'.

ls_modi-data = lr_cust_root. "Befüllte Strukturls_modi-node = /bobf/if_demo_customer_c=>sc_node-root.ls_modi-change_mode = /bobf/if_frw_c=>sc_modify_create.ls_modi-key = lr_cust_root->key.APPEND ls_modi TO lt_modi.

lo_serv_mgr->modify(EXPORTINGit_modification = lt_modi

IMPORTINGeo_message = lo_message

).

Listing 5.9 Anlegen eines Hauptknotens

Ob das Anlegen erfolgreich war, können Sie wie in Listing 5.8 über den Rückgabepara-

meter LO_MESSAGE ermitteln. Zusätzlich müssen Sie wie in Listing 5.8 die Methode

SAVE aufrufen, um die Verbuchung anzustoßen. Erst dadurch werden die Daten auf

der Datenbanktabelle erzeugt.

Standardwerte

Für einen Knoten können über eine optionale Knotenklasse Standardwerte für die

Anlage hinterlegt werden. Wie Sie die dazugehörigen Standardwerte auslesen, kön-

nen Sie in Abschnitt 5.5, »Standardwerte für Knoten auslesen«, nachlesen.

5.3.2 Anlegen von Unterknoten

Das Anlegen für Unterknoten funktioniert analog zum Anlegen eines Hauptknotens,

indem Sie im Feld NODE den Namen des gewünschten anzulegenden Knotens ange-

ben. Zusätzlich müssen Sie noch im Feld SOURCE_NODE die ID des Oberknotens, im

Feld SOURCE_KEY den Schlüssel des Oberknotens und im Feld ASSOCIATION die

dazugehörige Assoziation vom Ober- zum Unterknoten angeben. Dadurch legen Sie

letztlich auch immer eine Assoziationsverbindung mit an.

5972.book Seite 127 Donnerstag, 30. November 2017 3:26 15

Page 9: SAP-issen aus erster an - Amazon S3 · 2018-03-26 · 115 5 Kapitel 5 Anwendung der Consumer-API Willkommen im BOPF-Programmierparadies! Hier finden Sie Dutzende von Programmierbeispielen,

5 Anwendung der Consumer-API

128

Diese Assoziationsverbindung können Sie im Konstanten-Interface des Geschäftsob-

jekts unter der Konstante SC_ASSOCIATION, gefolgt von dem gewünschten Knoten,

finden. Das in diesem Abschnitt gezeigte Beispiel legt hierzu eine neue Instanz des

Knotens ROOT_TEXT zum Oberknoten ROOT des Geschäftsobjekts /BOBF/DEMO_

CUSTOMER an und ist als Fortsetzung des im vorherigen Abschnitt 5.3.1 gezeigten

Anlegens eines Hauptknotens zu verstehen. Abbildung 5.1 zeigt nochmals die Kno-

tenhierarchie des Geschäftsobjekts.

Abbildung 5.1 Knotenstruktur von /BOBF/DEMO_CUSTOMER

Da der Knoten ROOT_TEXT unter dem Knoten ROOT hängt, wird als SOURCE_KEY

derselbe Schlüssel aus dem in Abschnitt 5.3.1 angelegten Knoten ROOT benutzt. Das

bedeutet, dass der hier neu angelegte Text dem Kunden mit der Kundennummer

123456 zugewiesen wird, wie es Listing 5.10 zeigt.

"Deklaration der Variablen und Beschaffung des Service-Managers und"Transaktions-Managers wie in Listing 5.8DATA lr_cust_root_txt TYPE REF TO /bobf/s_demo_short_text_k."Erzeugen der neuen Knoten-Struktur eines Kurztextes CREATE DATA lr_cust_root_txt.lr_cust_root_txt->key = lo_serv_mgr->get_new_key( ).lr_cust_root_txt->text = 'Beispiel-Text'.lr_cust_root_txt->language = sy-langu.

ls_modi-node = /bobf/if_demo_customer_c=>sc_node-root_text.ls_modi-change_mode = /bobf/if_frw_c=>sc_modify_create.ls_modi-source_node = /bobf/if_demo_customer_c=>sc_

node-root.ls_modi-association = /bobf/if_demo_customer_c=>sc_

association-root-root_text.ls_modi-source_key = lr_cust_root->key. "ausls_modi-key = lr_cust_root_txt->key.ls_modi-data = lr_cust_root_txt.APPEND ls_modi TO lt_modi.lo_serv_mgr->modify(EXPORTINGit_modification = lt_modi

5972.book Seite 128 Donnerstag, 30. November 2017 3:26 15

5.3 Modifizieren von Objekten

129

5

IMPORTINGeo_message = lo_message

).

Listing 5.10 Anlegen eines Unterknotens

Ob das Anlegen erfolgreich war, können Sie wie in Listing 5.8 mit dem Rückgabepara-

meter LO_MESSAGE ermitteln. Zusätzlich müssen Sie wie in Listing 5.8 die Methode

SAVE aufrufen, um die transaktionale Verarbeitung abzuschließen. Erst dadurch wer-

den die Daten auf der Datenbanktabelle angelegt.

5.3.3 Aktualisieren von Knoteninstanzen

Das Aktualisieren einer Knoteninstanz funktioniert vom Prinzip her so wie das Anle-

gen derselben – mit dem Unterschied, dass Sie in der internen Tabelle des Feldes

CHANGED_FIELDS der Modifikationsstruktur angeben, welche Felder aus den im Feld

DATA mitgegebenen Daten geändert werden sollen. Ohne diese Angabe können

keine Attribute der Knoteninstanz aktualisiert werden.

Listing 5.11 zeigt hier beispielhaft das Aktualisieren der Attribute ADDRESS (Adresse)

und CUST_CURR (Kundenwährung) des Knotens ROOT des Geschäftsobjekts /BOBF/

DEMO_CUSTOMER. Die Adresse wird auf eine neue Straße geändert, während die

Kundenwährung auf initial gesetzt wird. Im Feld KEY ist ein beispielhafter Schlüssel

einer Knoteninstanz des Knotens ROOT angegeben.

"Deklaration der Variablen und Beschaffung des Service-Managers und Transaktions-Managers wie in Listing 5.8"Für die Angabe der geänderten AttributeDATA: lt_changed_fields TYPE /bobf/t_frw_name.

DATA: lr_cust_root TYPE REF TO /bobf/s_demo_customer_hdr_k."Erzeugen der neuen Knoten-Struktur als DatenobjektCREATE DATA lr_cust_root.

"Spezifizieren welche Felder geändert werden sollenAPPEND 'ADDRESS' TO lt_changed_fields.APPEND 'CUST_CURR' TO lt_changed_fields."Auch Angabe der Attribute über das Konstanten-Interface möglich:"/bobf/if_demo_customer_c=>sc_query_attribute-root-"select_by_attributes-cust_curr.

"Neue Werte setzenlr_cust_root->address = 'Mühlenstraße 5'.

5972.book Seite 129 Donnerstag, 30. November 2017 3:26 15

Page 10: SAP-issen aus erster an - Amazon S3 · 2018-03-26 · 115 5 Kapitel 5 Anwendung der Consumer-API Willkommen im BOPF-Programmierparadies! Hier finden Sie Dutzende von Programmierbeispielen,

5 Anwendung der Consumer-API

130

CLEAR lr_cust_root->cust_curr.

ls_modi-data = lr_cust_root.ls_modi-node = /bobf/if_demo_customer_c=>sc_node-root.ls_modi-change_mode = /bobf/if_frw_c=>sc_modify_update."Beispielhafter Schlüssells_modi-key = '0050568F72901ED79EA63B400C91A0FF'.ls_modi-changed_fields = lt_changed_fields.APPEND ls_modi TO lt_modi.

lo_serv_mgr->modify(EXPORTINGit_modification = lt_modi

IMPORTINGeo_message = lo_message

).

Listing 5.11 Aktualisieren von Attributen einer Knoteninstanz

Ob das Aktualisieren erfolgreich war, können Sie wie in Listing 5.8 über den Rückga-

beparameter LO_MESSAGE ermitteln. Zusätzlich müssen Sie wie in Listing 5.8 die

Methode SAVE aufrufen, um die transaktionale Verarbeitung abzuschließen. Erst

dadurch werden die Daten auf der Datenbanktabelle aktualisiert.

5.3.4 Löschen von Knoteninstanzen

Zum Löschen von Knoteninstanzen müssen Sie bei der Methode MODIFY lediglich

den Knotennamen im Feld NODE, den Ändern-Modus SC_MODIFY_DELETE im Feld

CHANGE_MODE und den Schlüssel des zu löschenden Knotens im Feld KEY der Ände-

rungsstruktur angeben. Unterknoten können Sie auf dieselbe Art und Weise löschen.

Geben Sie dazu bei NODE den Namen des Unterknotens und im Feld KEY den Schlüs-

sel des zu löschenden Unterknotens an.

Löschen eines gesamten Geschäftsobjekts

Wenn Sie die Instanz eines Hauptknotens (ROOT ) eines Geschäftsobjekts löschen,

werden alle dazugehörigen Unterknoten mit gelöscht.

In Listing 5.12 können Sie das Löschen einer Knoteninstanz des Knotens ROOT des

Geschäftsobjekts /BOBF/DEMO_CUSTOMER sehen. Im Feld KEY ist ein beispielhafter

Schlüssel einer Knoteninstanz des Knotens ROOT angegeben.

5972.book Seite 130 Donnerstag, 30. November 2017 3:26 15

5.4 Sperren/Entsperren

131

5

"Deklaration der Variablen und Beschaffung des Service-Managersund Transaktions-Managers wie in Listing 5.8"Befüllen der Modifikations-Tabellels_modi-node = /bobf/if_demo_customer_c=>sc_node-root.ls_modi-change_mode = /bobf/if_frw_c=>sc_modify_delete.ls_modi-key = '0050568F72901ED79EA31FECBD8520FF'. "BeispielAPPEND ls_modi TO lt_modi.

lo_serv_mgr->modify(EXPORTINGit_modification = lt_modi

IMPORTINGeo_message = lo_message

).

Listing 5.12 Löschen einer Knoteninstanz

Ob das Löschen erfolgreich war, können Sie wie in Listing 5.8 über den Rückgabepara-

meter LO_MESSAGE ermitteln. Zusätzlich müssen Sie wie in Listing 5.8 die Methode

SAVE aufrufen, um die transaktionale Verarbeitung abzuschließen. Erst dadurch wer-

den die Daten auf der Datenbanktabelle gelöscht.

5.4 Sperren/Entsperren

Sperren werden beim Bearbeiten der Geschäftsobjekte über die Methode MODIFY wie

in Abschnitt 5.3 beschrieben automatisch gesetzt. Dabei handelt es sich prinzipiell

um exklusive Sperren. Das bedeutet, dass nur genau ein Benutzer das gesperrte

Geschäftsobjekt (bzw. dessen gesperrte Knoteninstanzen) bearbeiten darf und alle

anderen Änderungsanfragen abgewiesen werden. Beim Speichern (Methode SAVE)

oder Zurücksetzen der Daten (Methode CLEANUP) mit dem Transaktionsmanager

werden die so gesetzten Sperren automatisch wieder entfernt. Für Sie bedeutet das,

dass Sie keine Sperren manuell setzen müssen, da dies das Framework vollautoma-

tisch übernimmt.

In bestimmten Fällen kann es dennoch vorkommen, dass Sie eine Sperre setzen

wollen, ohne direkt eine Änderung mit der Methode MODIFY durchzuführen. Bei-

spielsweise wollen Sie ein Geschäftsobjekt bereits sperren, wenn der Benutzer Ihr

Programm (bzw. die dazugehörige Transaktion) im Bearbeitungsmodus aufruft. Viel-

leicht wollen Sie aber auch mehrere Instanzen eines Geschäftsobjekts in einer Liste

anbieten, und erst der Benutzer entscheidet nach der Auswahl, welche Instanz er

letztlich bearbeiten möchte. Um ein solches Geschäftsobjekt für zukünftige Ände-

rungen zu sperren, können Sie die Methode RETRIEVE benutzen. Hierfür benötigen

5972.book Seite 131 Donnerstag, 30. November 2017 3:26 15

Page 11: SAP-issen aus erster an - Amazon S3 · 2018-03-26 · 115 5 Kapitel 5 Anwendung der Consumer-API Willkommen im BOPF-Programmierparadies! Hier finden Sie Dutzende von Programmierbeispielen,

5 Anwendung der Consumer-API

132

Sie nur den Schlüssel der Instanz des zu sperrenden Geschäftsobjekts. Über den

Importparameter IV_EDIT_MODE derselben Methode können Sie anschließend an-

geben, welche Art der Sperre verwendet werden soll.

Dafür stehen Ihnen die folgenden Sperrarten zur Verfügung (es gibt im Framework

weitere [obsolete] Sperrarten, aber für alle anderen Sperroptionen als die hier aufge-

führten wirft die Methode eine Ausnahme):

� für die exklusive Sperre die Konstante /BOBF/IF_CONF_C=>SC_EDIT_EXCLUSIVE

In diesem Standardfall darf nur der Benutzer, der die Sperre setzt, das Geschäftsob-

jekt bearbeiten. Alle anderen Sperranfragen werden abgewiesen.

� für die optimistische Sperre die Konstante /BOBF/IF_CONF_C=>SC_EDIT_

OPTIMISTIC

Bei dieser Variante kann eine Sperre von mehreren Benutzern gleichzeitig gesetzt

werden. Sobald einer der Benutzer tatsächlich eine Änderung (durch Speichern)

am Geschäftsobjekt vornimmt, werden alle anderen optimistischen Sperren

gelöscht, und seine Sperre wird in eine exklusive Sperre umgewandelt. Möchte ein

anderer Benutzer nun das Geschäftsobjekt ändern, wird diese Anfrage abgewie-

sen. Eine exklusive Sperre gewinnt also immer gegen eine optimistische Sperre.

Wird die Änderung am Geschäftsobjekt gespeichert, wird die exklusive Sperre ent-

fernt, und die vorherigen optimistischen Sperren werden reaktiviert.

Listing 5.13 zeigt beispielhaft, wie eine Instanz des Geschäftsobjekts /BOBF/DEMO_

CUSTOMER exklusiv gesperrt wird. Wir empfehlen Ihnen, den Parameter IV_FILL_

DATA aus Performancegründen mit abap_false zu belegen, damit Sie hier nicht

unnötig die Daten der Instanz zurückbekommen.

DATA: lt_keys TYPE /bobf/t_frw_key,ls_key TYPE /bobf/s_frw_key.

"beispielhafter Schlüssells_key-key = '0050568F72901ED79EA326CDC37C60FF'.APPEND ls_key TO lt_keys.

lo_serv_mgr->retrieve(iv_node_key = /bobf/if_demo_customer_c=>sc_node-rootit_key = lt_keysiv_edit_mode = /bobf/if_conf_c=>sc_edit_exclusiveiv_fill_data = abap_false ).

Listing 5.13 Sperren einer Knoteninstanz mit RETRIEVE

Sie können die Instanzen mit der Methode RETRIEVE nicht entsperren (auch dann

nicht, wenn Sie im Parameter IV_EDIT_MODE = /BOBF/IF_CONF_C=>SC_EDIT_

READ_ONLY angeben).

5972.book Seite 132 Donnerstag, 30. November 2017 3:26 15

5.5 Standardwerte für Knoten auslesen

133

5

Die Instanzen werden immer nur dann entsperrt, wenn Sie die Methoden SAVE oder

CLEANUP des Transaktions-Managers aufrufen. So wird sichergestellt, dass es zu kei-

nen schiefen Datenbeständen kommen kann. Listing 5.14 zeigt dies noch einmal in

Kurzfassung.

"Entsperrenlo_trans_mgr->save( )."Oder (in der Regel bei Misserfolg von SAVE):lo_trans_mgr->cleanup( ).

Listing 5.14 Speichern und Aufräumen mit dem Transaktions-Manager

5.5 Standardwerte für Knoten auslesen

Zu jedem Knoten kann eine Knotenklasse angelegt werden, die das Interface /BOBF/

IF_FRW_NODE mit der Methode RETRIEVE_DEFAULT_VALUES implementiert.

Anlegen einer Knotenklasse

Die Anlage und Implementierung einer solchen Klasse über das Interface /BOBF/

IF_FRW_NODE haben wir in Abschnitt 6.2, »Knoten implementieren«, beschrieben.

Im Folgenden zeigen wir Ihnen, wie Sie diese Werte programmatisch für die Anlage

eines neuen Haupt- und Unterknotens ermitteln können.

5.5.1 Standardwerte für Oberknoten auslesen

Sind für einen Hauptknoten Standardwerte definiert worden, können Sie diese

über die Methode RETRIEVE_DEFAULT_NODE_VALUES des Service-Managers wie

hier beschrieben auslesen. Dazu müssen Sie im Changing-Parameter CT_DATA der

Methode die erzeugte leere Knotenstruktur des gewünschten ROOT-Knotens als

interne Tabelle übergeben. Die Methode wird diese so übergebenen Zeilen mit den in

der Knotenklasse ermittelten Standardwerten anreichern. Listing 5.15 zeigt dies bei-

spielhaft für den ROOT-Knoten des Geschäftsobjekts /BOBF/DEMO_CUSTOMER.

"Erzeugen der neuen Knoten-Struktur als DatenobjektDATA: lr_cust_root TYPE REF TO /bobf/s_demo_customer_hdr_k.CREATE DATA lr_cust_root.

"Erzeugen eines neuen Schlüsselslr_cust_root->key = lo_serv_mgr->get_new_key( ).

5972.book Seite 133 Donnerstag, 30. November 2017 3:26 15

Page 12: SAP-issen aus erster an - Amazon S3 · 2018-03-26 · 115 5 Kapitel 5 Anwendung der Consumer-API Willkommen im BOPF-Programmierparadies! Hier finden Sie Dutzende von Programmierbeispielen,

5 Anwendung der Consumer-API

134

"Ab hier: Beschaffung der Standard-WerteDATA: lt_cust_root TYPE TABLE OF /bobf/s_demo_customer_hdr_k.FIELD-SYMBOLS: <s_cust_root> TYPE /bobf/s_demo_customer_hdr_k.

"Hinzufügen der neuen Knotenstruktur zur ÜbergabetabelleASSIGN lr_cust_root->* TO <s_cust_root>.APPEND <s_cust_root> TO lt_cust_root.

"Aufruf der Anreicherunglo_serv_mgr->retrieve_default_node_values(EXPORTINGiv_node_key = /bobf/if_demo_customer_c=>sc_node-root

CHANGINGct_data = lt_cust_root

).

Listing 5.15 Auslesen von Standardwerten für einen Oberknoten

5.5.2 Standardwerte für Unterknoten auslesen

Auch für Unterknoten können Standardwerte implementiert und später durch die

Anwendung ausgelesen werden. Das Auslesen funktioniert wie bei Oberknoten mit

der Methode RETRIEVE_DEFAULT_NODE_VALUES. So müssen Sie auch hier die vor-

bereiteten leeren Knotenstrukturen als interne Tabelle im Changing-Parameter CT_

DATA mitgeben.

Anders als beim Auslesen für den Hauptknoten reicht es allerdings nicht mehr aus,

nur den Importparameter IV_NODE_KEY mit dem gewünschten Knoten zu belegen.

Das liegt daran, dass das Framework versucht, bei einem Unterknoten die dazugehö-

rigen Standardwerte kontextabhängig (d. h. abhängig von den Attributen der dazu-

gehörigen Instanz des Oberknotens) zu bestimmen. Daher müssen Sie zusätzlich

folgende Einstellungen vornehmen:

� im Parameter IV_SOURCE_KEY den Schlüssel der Instanz des zum Unterknoten

gehörigen Oberknotens mitgeben

� im Parameter IV_ASSOC_KEY den Schlüssel (über das Konstanten-Interface) der

dazugehörigen Assoziation vom Ober- zum Unterknoten mitgeben

Listing 5.16 zeigt dies für den Knoten ROOT_TEXT als Unterknoten von ROOT für das

Geschäftsobjekt /BOBF/DEMO_SALES_ORDER, der zu dem Kurztext die Sprache des

Textes in Abhängigkeit zum Verkaufsauftragskopf bestimmt.

DATA: lt_root_text TYPE TABLE OF /bobf/s_demo_short_text_k,lr_root_text TYPE REF TO /bobf/s_demo_short_text_k.

5972.book Seite 134 Donnerstag, 30. November 2017 3:26 15

5.6 Hauptknoten auslesen

135

5

FIELD-SYMBOLS: <s_root_text> TYPE /bobf/s_demo_short_text_k.

CREATE DATA lr_root_text.lr_root_text->key = /bobf/cl_frw_factory=>get_new_key( ).

ASSIGN lr_root_text->* TO <s_root_text>.APPEND <s_root_text> TO lt_root_text.

lo_mgr->retrieve_default_node_values(EXPORTINGiv_node_key = /bobf/if_demo_sales_order_c=>sc_node-root_textiv_source_key = '0050568F72901ED7A5949F1AA5B940FF'

"Schlüssel der ROOT-Instanz!iv_assoc_key = /bobf/if_demo_sales_order_c=>sc_association-

root-root_textCHANGINGct_data = lt_root_text

).

Listing 5.16 Auslesen von Standardwerten für einen Unterknoten

Abbildung 5.2 zeigt die mit der Sprache (Spalte LANGUAGE) angereicherte Struktur

des Kurztextes.

Abbildung 5.2 Angereicherte Struktur des Knotens ROOT_TEXT

5.6 Hauptknoten auslesen

Um zu einem Unterknoten den dazugehörigen Hauptknoten (ROOT ) auszulesen,

können Sie die Methode GET_ROOT_KEY verwenden. Diese wird allerdings nicht wie

die anderen hier vorgestellten Methoden vom Service-Manager, sondern vom BOPF-

Service-Layer bereitgestellt, den Sie mit der Methode GET_BOPF der Klasse /BOBF/

CL_FRW_FACTORY über den Schlüssel des Geschäftsobjekts auslesen können. Zum

Aufruf der Methode GET_ROOT_KEY müssen Sie lediglich im Importparameter IV_

NODE_KEY die ID des Knotens und im Importparameter IT_KEY die Schlüssel zum

angegebenen Knoten mitgeben.

5972.book Seite 135 Donnerstag, 30. November 2017 3:26 15

Page 13: SAP-issen aus erster an - Amazon S3 · 2018-03-26 · 115 5 Kapitel 5 Anwendung der Consumer-API Willkommen im BOPF-Programmierparadies! Hier finden Sie Dutzende von Programmierbeispielen,

5 Anwendung der Consumer-API

136

Listing 5.17 zeigt beispielhaft, wie für den Unterknoten ROOT_TEXT des Geschäftsob-

jekts /BOBF/DEMO_CUSTOMER die dazugehörige Instanz des Hauptknotens ermit-

telt wird.

DATA: lt_key_link TYPE /bobf/t_frw_key_link,lt_failed_key TYPE /bobf/t_frw_key,lt_target_key TYPE /bobf/t_frw_key.

DATA: lt_data TYPE /bobf/t_demo_short_text_k,lt_key TYPE /bobf/t_frw_key,ls_key TYPE /bobf/s_frw_key.

DATA: lo_customer TYPE REF TO /bobf/if_frw_service_layer.lo_customer = /bobf/cl_frw_factory=>get_bopf(EXPORTINGiv_bo_key = /bobf/if_demo_customer_c=>sc_bo_key

).

ls_key-key = '0050568F72901ED79EB7C7DA5BFA00FF'.APPEND ls_key TO lt_key.

lo_customer->get_root_key(EXPORTINGiv_node_key = /bobf/if_demo_customer_c=>sc_node-root_textit_key = lt_key

IMPORTINGet_key_link = lt_key_linket_failed_key = lt_failed_keyet_target_key = lt_target_key

).

Listing 5.17 Beschaffung des Schlüssels des Hauptknotens

Die ermittelten Hauptknoten können Sie in der Rückgabetabelle ET_TARGET_KEY

auslesen. Dann können Sie auf diese Knoten weitere Methoden, z. B. ein RETRIEVE

oder MODIFY, anwenden. Konnten für bestimmte Schlüssel keine Hauptknoten

bestimmt werden, werden diese Schlüssel in der Rückgabetabelle ET_FAILED_KEY

zurückgegeben. Zusätzlich gibt Ihnen die Methode GET_ROOT_KEY in den Rückgabe-

tabellen LT_KEY_LINK die komplette Verknüpfungskette vom angegebenen Knoten

zum Hauptknoten zurück.

5972.book Seite 136 Donnerstag, 30. November 2017 3:26 15

5.7 Abfragen

137

5

5.7 Abfragen

In Abschnitt 5.1.1, »Die Methode QUERY«, haben wir Ihnen bereits die grundlegende

Implementierung des Aufrufs einer Abfrage erläutert. In diesem Abschnitt möchten

wir Ihnen darüber hinaus zeigen, wie Sie über den optionalen Parameter IS_QUERY_

OPTIONS noch weitere Abfrageoptionen implementieren können. Zusätzlich demons-

trieren wir Ihnen, wie Sie über die Methode RETRIEVE_DEFAULT_QUERY_PARAM des

Service-Managers Standard-Abfrageparameter für eine Abfrage auslesen können.

5.7.1 Weitere Abfrageoptionen

Mit dem optionalen Parameter IS_QUERY_OPTIONS der Methode QUERY können Sie

zusätzlich Folgendes ausführen:

� die maximale Ergebnismenge einschränken

� die Ergebnismenge sortieren

� den Paging-Mechanismus aktivieren

Den grundlegenden Aufruf für alle drei Möglichkeiten finden Sie in Listing 5.18 (bei-

spielhaft an der Abfrage SELECT_ALL).

lo_serv_mgr->query(EXPORTINGiv_query_key = /bobf/if_demo_customer_c=>sc_query-

root-select_alliv_fill_data = abap_trueis_query_options = ls_query_options

IMPORTINGet_data = lt_dataet_key = lt_keys

).

Listing 5.18 Angabe von weiteren Abfrageoptionen

Die maximale Ergebnismenge angeben

Um das klassische UP TO … ROWS einer SQL-Anweisung durchzuführen, müssen Sie

die gewünschte maximale Anzahl der Ergebnismenge im Feld MAXIMUM_ROWS des

Parameters IS_QUERY_OPTIONS angeben:

DATA: ls_query_options TYPE /bobf/s_frw_query_options.ls_query_options-maximum_rows = 1.

5972.book Seite 137 Donnerstag, 30. November 2017 3:26 15

Page 14: SAP-issen aus erster an - Amazon S3 · 2018-03-26 · 115 5 Kapitel 5 Anwendung der Consumer-API Willkommen im BOPF-Programmierparadies! Hier finden Sie Dutzende von Programmierbeispielen,

5 Anwendung der Consumer-API

138

Die Ergebnismenge sortieren

Um das klassische ORDER BY einer SQL-Anweisung durchzuführen, müssen Sie ledig-

lich eine neue Zeile zum Feld SORTING_OPTIONS des Parameters IS_QUERY_OPTIONS

hinzufügen. In dieser neuen Zeile muss im Feld ATTRIBUTE_NAME das zu sortierende

Attribut und im Feld ASCENDING die Sortierrichtung (abap_false für absteigend,

abap_true für aufsteigend) angegeben werden. Listing 5.19 zeigt beispielhaft für das

Attribut CUST_CURR (Währung des Kunden) eine absteigende Sortierung.

DATA: ls_sort_options TYPE /bobf/s_frw_query_sorting,ls_query_options TYPE /bobf/s_frw_query_options.

ls_sort_options-attribute_name = /bobf/if_demo_customer_c=>sc_query_attribute-root-select_by_attributes-cust_curr.

"Oder direkte Angabe des Namen des Attributs CUST_CURRls_sort_options-ascending = ''."oder X für aufsteigende SortierungAPPEND ls_sort_options TO ls_query_options-sorting_options.

Listing 5.19 Sortieren der Ergebnismenge

Den Paging-Mechanismus aktivieren

Der Paging-Mechanismus dient dazu, nur eine gewisse Teilmenge von Knoten-

instanzen zu bestimmen, und ist vor allem für Tabellen auf der Oberfläche gedacht,

auf denen geblättert werden kann. Abbildung 5.3 zeigt eine solche Tabelle aus einer

SAPUI5-Anwendung.

Abbildung 5.3 Tabelle mit Paging-Funktion

Da die Performance auf diesen webbasierten Anwendungen kritisch ist, ist es wich-

tig, dass nur so wenige Daten wie möglich geladen und auf dem Endgerät (z. B.

Handy) vorgehalten werden. Konkret bedeutet dies für die Tabelle aus Abbildung 5.3:

Erst wenn die vierte Seite angeklickt wird, werden die Einträge 13 bis 16 geladen. Für

Sie bedeutet das bei der Implementierung der Datenbeschaffung: Sie müssen nur die

5972.book Seite 138 Donnerstag, 30. November 2017 3:26 15

5.7 Abfragen

139

5

Knoteninstanzen 13 bis 16 selektieren und sollten die ersten zwölf Knoteninstanzen

überspringen.

OpenSQL und der Zusatz »OFFSET«

In OpenSQL konnte man dieses Problem bis Version 7.51 nicht performant lösen. Erst

durch das Hinzufügen des Zusatzes OFFSET (Angabe der zu überspringenden Zeilen)

konnte dies performant implementiert werden. Vorher mussten im genannten Bei-

spiel alle 16 Einträge selektiert und anschließend die ersten zwölf Instanzen mithilfe

von ABAP wieder aus der internen Tabelle gelöscht werden.

Im BOPF übernimmt das Framework diese Aufgabe für Sie.

Implementieren können Sie eine solche Funktion wie folgt: Aktivieren Sie die

Paging-Option, indem Sie in der Struktur PAGING_OPTIONS des Parameters IS_

QUERY_OPTIONS im Feld PAGING_ACTIVE ein X mitgeben. Geben Sie zusätzlich im

Feld START_ROW die Anzahl der zu überspringenden Zeilen und im Feld MAXIMUM_

ROWS die maximal zu selektierenden Zeilen an. Listing 5.20 zeigt dies beispielhaft

um die Zeile 13 bis 16 zu laden.

DATA: ls_query_options TYPE /bobf/s_frw_query_options.ls_query_options-maximum_rows = 4.ls_query_options-paging_options-paging_active = 'X'.ls_query_options-paging_options-start_row = 13.

Listing 5.20 Umsetzung der Paging-Funktion

5.7.2 Standard-Abfrageparameter

Bei Abfragen, die nicht durch das Framework als Standard vorgegeben sind, sondern

durch eigene Abfrageklassen über das Interface /BOBF/IF_FRW_QUERY implemen-

tiert werden, gibt es mit der Methode RETRIEVE_DEFAULT_PARAM die Möglichkeit,

für die implementierte Abfrage Standardwerte vorzugeben.

Anlegen einer Abfrage

Wie Sie eine solche Abfrage anlegen und das dazugehörige Interface /BOBF/IF_FRW_

QUERY implementieren, können Sie in Abschnitt 6.6, »Abfragen implementieren«,

nachlesen.

Um zu sehen, ob eine Abfrage die Vorgabemethode implementiert hat oder nicht,

können Sie über die Abfrage in die dazugehörige Abfrageklasse der Methode RETRIE-

VE_DEFAULT_PARAM springen. Ist diese beispielsweise wie in Abbildung 5.4 nicht

leer, sondern mit Quellcode (für das Geschäftsobjekt /IAM/ISSUE, Knoten ROOT,

5972.book Seite 139 Donnerstag, 30. November 2017 3:26 15

Page 15: SAP-issen aus erster an - Amazon S3 · 2018-03-26 · 115 5 Kapitel 5 Anwendung der Consumer-API Willkommen im BOPF-Programmierparadies! Hier finden Sie Dutzende von Programmierbeispielen,

5 Anwendung der Consumer-API

140

Abfrage MOC_WORKLIST ) gefüllt, können Sie aus Ihrer Anwendung heraus diese

Standardwerte übernehmen.

Abbildung 5.4 Definition von Standardwerten für eine Abfrage

Das Auslesen der Standardwerte geschieht mit der Methode RETRIEVE_DEFAULT_

QUERY_PARAM des Service-Managers. Listing 5.21 zeigt eine beispielhafte Implemen-

tierung für die zuvor erwähnte Abfrage MOC_WORKLIST.

DATA: lt_selection_param TYPE /bobf/t_frw_query_selparam.lo_serv_mgr->retrieve_default_query_param(EXPORTINGiv_query_key = /iam/if_i_issue_c=>sc_query-root-moc_worklistCHANGINGct_selection_parameters = lt_selection_param

).

Listing 5.21 Auslesen von Standardparametern für eine Abfrage

Abbildung 5.5 zeigt die vom Aufruf aus Listing 5.21 zurückgegebenen Standardwerte.

In diesem Fall wird das Attribut APPLICATION mit dem Wert MOC als Vergleich

gesetzt.

Abbildung 5.5 Rückgabetabelle der Standardwerte für eine Abfrage

5972.book Seite 140 Donnerstag, 30. November 2017 3:26 15

5.8 Aktionen

141

5

5.8 Aktionen

Zur Arbeit mit Aktionen bietet der Service-Manager drei Methoden an:

� die Methode DO_ACTION zum Aufrufen einer Aktion

� die Methode RETRIEVE_DEFAULT_ACTION_PARAM zur Ermittlung von Standard-

Aktionsparametern für den Aufruf der Aktion mit DO_ACTION

� die Methode CHECK_ACTION zur Überprüfung, ob eine Aktion auf bestimmte

Knoteninstanzen ausgeführt werden kann (diese Prüfung wird in Abschnitt 5.9,

»Validierungen«, beschrieben)

Aktion anlegen

Wie Sie eine solche Abfrage anlegen und das dazugehörige Interface /BOBF/IF_FRW_

ACTION implementieren, haben wir in Abschnitt 6.3, »Aktionen implementieren«,

beschrieben.

5.8.1 Aktionen aufrufen

Mit der Methode DO_ACTION können Sie eine Aktion eines Geschäftsobjekts aufru-

fen. Für den grundlegenden Aufruf müssen Sie lediglich im Eingabeparameter IV_

ACT_KEY den Schlüssel der Aktion über das Konstanten-Interface mitgeben und im

Eingabeparameter IT_KEY die Schlüssel der Knoteninstanzen mitgeben, gegen die

die Aktion ausgeführt werden soll. Je nach Erfolg der Ausführung sind die Rückgabe-

parameter unterschiedlich gefüllt:

� Schlägt die Ausführung der Aktion fehl, ist die Rückgabetabelle ET_FAILED_ACTI-

ON_KEY mit dem Schlüssel der Aktion gefüllt, während die Rückgabetabelle ET_

FAILED_KEY die fehlgeschlagenen Schlüssel der Knoteninstanzen enthält.

� War die Durchführung der Aktion erfolgreich, ist die Rückgabetabelle ET_FAILED_

ACTION_KEY leer. Zusätzlich wird, falls in der Aktion eine Rückgabestruktur defi-

niert ist, die Rückgabetabelle ET_DATA mit Daten gefüllt.

Listing 5.22 zeigt eine beispielhafte Implementierung des Aufrufs einer Aktion. Hier-

bei wird die Aktion ARCHIVE des Geschäftsobjekts /BOBF/DEMO_SALES_ORDER aus-

geführt.

DATA: lt_keys TYPE /bobf/t_frw_key,ls_key TYPE /bobf/s_frw_key,lt_failed_keys TYPE /bobf/t_frw_key,lt_failed_action TYPE /bobf/t_frw_key,lo_message TYPE REF TO /bobf/if_frw_message.

5972.book Seite 141 Donnerstag, 30. November 2017 3:26 15

Page 16: SAP-issen aus erster an - Amazon S3 · 2018-03-26 · 115 5 Kapitel 5 Anwendung der Consumer-API Willkommen im BOPF-Programmierparadies! Hier finden Sie Dutzende von Programmierbeispielen,

5 Anwendung der Consumer-API

142

ls_key-key = '0050568F72901ED7A5949F1AA5B940FF'.APPEND ls_key TO lt_keys.

lo_serv_mgr->do_action(EXPORTINGiv_act_key = /bobf/if_demo_sales_order_c=>sc_

action-root-archiveit_key = lt_keys

IMPORTINGeo_message = lo_messageet_failed_key = lt_failed_keyset_failed_action_key = lt_failed_action

* et_data = "falls Aktion eine Rückgabe-Struktur hat).

Listing 5.22 Grundlegender Aufruf einer Aktion

Wenn in der Aktion eine Eingabestruktur definiert ist, können Sie diese über den Ein-

gabeparameter IS_PARAMETERS mitgeben. Vor der Übergabe müssen Sie die dahin-

terliegende Struktur mit TYPE REF TO definieren und mit CREATE DATA erzeugen.

Listing 5.23 zeigt hierfür eine beispielhafte Implementierung. Dabei wird versucht,

die Position 10 eines Verkaufsauftrags zu beliefern. Dies geschieht über die Aktion

DELIVER des Geschäftsobjekts /BOBF/DEMO_SALES_ORDER. Als Importparameter

wird die Position 10 mitgegeben. Die für den Aufruf benötigten Datendeklarationen

bauen auf Listing 5.22 auf. Für die angegebene Variable LR_DEL_IMPORT wurde des-

halb die Struktur /BOBF/S_DEMO_SALES_ORDER_HDR_D verwendet, weil diese Im-

portstruktur so in den Eigenschaften der Aktion im Geschäftsobjekt definiert worden

ist. Diese Struktur kann für jede Aktion unterschiedlich sein.

"Erzeugung der Import-Struktur für die AktionDATA: lr_del_import TYPE REF TO /bobf/s_demo_sales_order_hdr_d.CREATE DATA lr_del_import.lr_del_import->item_no = '010'.

lo_serv_mgr->do_action(EXPORTINGiv_act_key = /bobf/if_demo_sales_order_c=>sc_

action-root-deliverit_key = lt_keysis_parameters = lr_del_import

5972.book Seite 142 Donnerstag, 30. November 2017 3:26 15

5.8 Aktionen

143

5

IMPORTINGeo_message = lo_messageet_failed_key = lt_failed_keyset_failed_action_key = lt_failed_action

* et_data = "falls Aktion eine Rückgabe-Struktur hat).

Listing 5.23 Aufruf einer Aktion mit Importparametern

5.8.2 Standardparameter für Aktionen auslesen

Für eine Aktion können Standardparameter hinterlegt worden sein. Diese können

Sie über die Methode RETRIEVE_DEFAULT_ACTION_PARAM auslesen. Für den Aufruf

der Methode müssen Sie im Eingabeparameter IV_ACT_KEY den Schlüssel der Aktion

über das Konstanten-Interface mitgeben und im Eingabeparameter IT_KEY die

Schlüssel der Knoteninstanzen mitgeben, für die die Standardparameter ausgelesen

werden sollen.

Je nach Implementierung können die Standardparameter nicht nur statisch inner-

halb der Aktionsklasse, sondern auch dynamisch, d. h. abhängig von den Knoten-

instanzen und bereits vorbelegten Parametern, definiert worden sein. Daher können

Sie im Changing-Parameter CS_PARAMETERS nicht nur die ermittelten Standard-

parameter zurücknehmen, sondern diese auch schon vorbelegt mit in die Methode

übergeben. Bei Erfolg wird die in dem Parameter CS_PARAMETERS angegebene

Struktur angereichert. Konnten keine Standardparameter ermittelt werden (oder ist

für die Methode die Aktion nicht implementiert), bleibt die Struktur unverändert.

Listing 5.24 zeigt für die Methode eine beispielhafte Implementierung für die Aktion

DELIVER des Knotens ROOT des Geschäftsobjekts /BOBF/DEMO_SALES_ORDER.

DATA: ls_param TYPE REF TO data.CREATE DATA ls_param TYPE /bobf/s_demo_sales_order_hdr_d.

lo_serv_mgr->retrieve_default_action_param(EXPORTINGiv_act_key = /bobf/if_demo_sales_order_c=>sc_

action-root-deliverit_key = lt_keys

CHANGINGcs_parameters = ls_param

).

Listing 5.24 Ermittlung von Standard-Aktionsparametern

5972.book Seite 143 Donnerstag, 30. November 2017 3:26 15

Page 17: SAP-issen aus erster an - Amazon S3 · 2018-03-26 · 115 5 Kapitel 5 Anwendung der Consumer-API Willkommen im BOPF-Programmierparadies! Hier finden Sie Dutzende von Programmierbeispielen,

5 Anwendung der Consumer-API

144

5.9 Validierungen

Zur Ausführung von Validierungen bietet der Service-Manager drei Methoden an:

� die Methode CHECK_CONSISTENCY zur Durchführung von Konsistenz-Validie-

rungen für Knoteninstanzen

� die Methode CHECK_AND_DETERMINE zur Durchführung von Konsistenz-Vali-

dierungen und die dazugehörigen Ermittlungen für Knoteninstanzen

� die Methode CHECK_ACTION für die Validierung von Aktionen

Anlegen einer Validierung

Wie Sie eine solche Abfrage anlegen und das dazugehörige Interface /BOBF/IF_FRW_

VALIDATION implementieren, lesen Sie in Abschnitt 6.5, »Validierungen implemen-

tieren«.

5.9.1 Konsistenz-Validierungen

Konsistenz-Validierungen prüfen, ob eine bestimmte Menge von Knoteninstanzen

valide, d. h. ob Ihre Attributwerte in sich schlüssig sind. Diese Konsistenz-Validierun-

gen werden automatisch gemäß der eingestellten Ausführungszeitpunkte und der

eingestellten Ausführungsreihenfolge ausgeführt. Wollen Sie eine Konsistenz-Vali-

dierung dennoch manuell ausführen, können Sie dafür die Methoden CHECK_CON-

SISTENCY und CHECK_AND_DETERMINE nutzen. In diesem Abschnitt ist nur die

erste Methode beschrieben. Die zweite Methode CHECK_AND_DETERMINE beschrei-

ben wir in Abschnitt 5.10, »Ermittlungen«, da diese Methode auch die zu den Knoten

zugehörigen Ermittlungen ausführt.

Zur Ausführung der Methode CHECK_CONSISTENCY müssen Sie im Parameter IV_

NODE_KEY den zu prüfenden Knoten über das Konstanten-Interface angeben und

die dazugehörigen Knoteninstanzen im Parameter IT_KEY mitgeben. Anschließend

können Sie über den Parameter IV_CHECK_SCOPE entscheiden, ob die Prüfung lokal

oder für eine Teilstruktur durchgeführt werden soll:

� Lokal: Mit Angabe der Konstante /BOBF/IF_FRW_C=>SC_SCOPE_LOCAL wird nur

die aktuelle Knotenebene überprüft.

� Teilstruktur: Mit der Angabe von /BOBF/IF_FRW_C=>SC_SCOPE_SUBSTRUCTURE

werden auch alle Unterknoten überprüft.

Listing 5.25 zeigt die manuelle Validierung des Knotens ROOT des Geschäftsobjekts

/BOBF/SALES_ORDER.

DATA: lt_keys TYPE /bobf/t_frw_key,ls_key TYPE /bobf/s_frw_key,

5972.book Seite 144 Donnerstag, 30. November 2017 3:26 15

5.9 Validierungen

145

5

lo_message TYPE REF TO /bobf/if_frw_message.

"Beispielhafter Schlüssells_key-key = '0050568F72901ED7A5949F1AA5B940FF'.APPEND ls_key TO lt_keys.

lo_serv_mgr->check_consistency(EXPORTINGiv_node_key = /bobf/if_demo_sales_order_c=>sc_node-rootit_key = lt_keysiv_check_scope = /bobf/if_frw_c=>sc_scope_local

IMPORTINGeo_message = lo_message

).

Listing 5.25 Aufruf einer Konsistenz-Validierung

Der Rückgabeparameter EO_MESSAGE enthält nach der Ausführung die Diagnose zu

den übergebenen Knoteninstanzen. Abbildung 5.6 zeigt dies beispielhaft über das

im Debugger bereitgestellte Debugging-Skript (siehe Kapitel 10, »Debugging von

Geschäftsobjekten«).

Abbildung 5.6 Ergebnis einer Konsistenz-Validierung in Form eines Nachrichtenobjekts

Wie Sie programmatisch prüfen können, ob Fehlermeldungen zurückgegeben wur-

den und wie Sie die Fehlertexte aus diesem Nachrichtenobjekt auslesen können,

beschreiben wir in Abschnitt 4.7, »Nachrichtenobjekte«.

5.9.2 Aktions-Validierungen

Aktions-Validierungen prüfen, ob auf eine bestimmte Menge von Knoteninstanzen

eine Aktion ausgeführt werden kann. Dies geschieht vor der Ausführung einer Aktion

automatisch. Wollen Sie dennoch eine solche Aktions-Validierung manuell aus-

führen, können Sie dafür die Methode CHECK_ACTION nutzen. Dazu müssen Sie

lediglich im Eingabeparameter IV_ACT_KEY den Schlüssel der Aktion über das Kon-

stanten-Interface mitgeben, den Eingabeparameter IT_KEY mit den Schlüsseln der

Knoteninstanzen versorgen und, falls gegeben, die Aktionsparameter im Eingabe-

parameter IS_PARAMETERS übergeben.

5972.book Seite 145 Donnerstag, 30. November 2017 3:26 15

Page 18: SAP-issen aus erster an - Amazon S3 · 2018-03-26 · 115 5 Kapitel 5 Anwendung der Consumer-API Willkommen im BOPF-Programmierparadies! Hier finden Sie Dutzende von Programmierbeispielen,

5 Anwendung der Consumer-API

146

Je nach Erfolg der Ausführung sind die Rückgabeparameter unterschiedlich gefüllt:

� Schlägt die Ausführung der Aktion fehl, ist die Rückgabetabelle ET_FAILED_ACTI-

ON_KEY mit dem Schlüssel der Aktion gefüllt, während die Rückgabetabelle ET_

FAILED_KEY die fehlgeschlagenen Schlüssel der Knoteninstanzen enthält.

� War die Durchführung der Aktion erfolgreich, ist die Rückgabetabelle ET_FAILED_

ACTION_KEY leer.

Listing 5.26 zeigt einen beispielhaften Aufruf der Methode CHECK_ACTION. Dazu

wird geprüft, ob die Aktion ARCHIVE auf die Knoteninstanzen des Geschäftsobjekts

/BOBF/DEMO_SALES_ORDER ausgeführt werden kann.

lo_serv_mgr->check_action(EXPORTINGiv_act_key = /bobf/if_demo_sales_order_c=>sc_

action-root-archiveit_key = lt_keys

IMPORTINGeo_message = lo_messageet_failed_key = lt_failed_keyset_failed_action_key = lt_failed_action

).

Listing 5.26 Aufruf einer Aktions-Validierung

5.10 Ermittlungen

Für Ermittlungen bietet Ihnen der Service-Manager nur die Methode CHECK_AND_

DETERMINE an, die zum einen die Knoteninstanzen über die hinterlegten Validierun-

gen und zum anderen die dafür benötigten Ermittlungen durchführt. Eine explizite

Methode zur reinen Ausführung von Ermittlungen steht Ihnen als Anwender nicht

zur Verfügung (nur als private Methode DO_DETERMINATIONS der Klasse /BOBF/CL_

FRW).

Anlegen einer Ermittlung

Wie Sie eine solche Ermittlung anlegen und das dazugehörige Interface /BOBF/IF_

FRW_DETERMINATION implementieren, können Sie in Abschnitt 6.4, »Ermittlungen

implementieren«, nachlesen.

Zur Ausführung der Methode CHECK_AND_DETERMINE müssen Sie im Parameter

IV_NODE_KEY den gewünschten zu prüfenden Knoten über das Konstanten-Inter-

face angeben und die dazugehörigen Knoteninstanzen im Parameter IT_KEY mitge-

5972.book Seite 146 Donnerstag, 30. November 2017 3:26 15

5.10 Ermittlungen

147

5

ben. Anschließend können Sie über den Parameter IV_CHECK_SCOPE entscheiden,

ob die Prüfung lokal oder für eine Teilstruktur durchgeführt werden soll:

� Lokal: Bei Angabe der Konstante /BOBF/IF_FRW_C=>SC_SCOPE_LOCAL wird nur

die aktuelle Knotenebene überprüft.

� Teilstruktur: Bei Angabe von /BOBF/IF_FRW_C=>SC_SCOPE_SUBSTRUCTURE wer-

den auch alle Unterknoten überprüft.

Listing 5.27 zeigt die manuelle Ausführung einer Validierung mit zugehörigen Er-

mittlungen des Knotens ROOT des Geschäftsobjekts /BOBF/SALES_ORDER.

DATA: lt_keys TYPE /bobf/t_frw_key,ls_key TYPE /bobf/s_frw_key,lo_message TYPE REF TO /bobf/if_frw_message.

"Beispielhafter technischer Schlüssells_key-key = '0050568F72901ED79EA326CDC37C60FF'.APPEND ls_key TO lt_keys.

lo_serv_mgr->check_and_determine(EXPORTINGiv_node_key = /bobf/if_demo_customer_c=>sc_node-rootit_key = lt_keysiv_check_scope = /bobf/if_frw_c=>sc_scope_local

IMPORTINGeo_message = lo_message

).

Listing 5.27 Aufruf einer Ermittlung mit zugehörigen Prüfungen

5972.book Seite 147 Donnerstag, 30. November 2017 3:26 15

Page 19: SAP-issen aus erster an - Amazon S3 · 2018-03-26 · 115 5 Kapitel 5 Anwendung der Consumer-API Willkommen im BOPF-Programmierparadies! Hier finden Sie Dutzende von Programmierbeispielen,

15

1Einleitung

Durch die Einführung des neuen ERP-Systems SAP S/4HANA befindet sich die Ent-

wicklung mit ABAP gerade in einem großen Umbruch wie damals schon von dem

Wechsel von R/2 auf R/3: neue Technologien, eine neue Entwicklungsumgebung,

eine neue Datenbank, ein damit verbundenes neues Programmierparadigma und

letztlich auch ein neues Programmiermodell. Das sind viele Herausforderungen, die

es zu meistern gilt.

Herzlich willkommen daher an alle Leser, die sich entschieden haben, sich intensiver

mit einem wichtigen Baustein des neuen Programmiermodells zu beschäftigen: dem

Business Object Processing Framework, kurz BOPF.

In diesem Buch durchleuchten wir für Sie dieses Framework und geben Ihnen alle

wichtigen Informationen, um erfolgreich Geschäftsobjekte für Ihre Anwendungen

mit ABAP zu entwickeln. Damit können Sie sich für die nächsten 15 Jahre sattelfest für

die Entwicklung mit ABAP machen.

Aufbau dieses Buches

Zuallererst möchten wir Ihnen einen Überblick über das vor Ihnen liegende Buch

geben.

Teil I, »Einführung«, gibt Ihnen eine Einführung in das Thema BOPF. Dazu wird in

Kapitel 1, »Einführung in das Business Object Processing Framework«, das Gesamt-

bild der Entwicklungslandschaft mit ABAP und die Rolle des BOPF skizziert. Insbe-

sondere zeigen wir Ihnen in Kapitel 2, »Aufbau von Geschäftsobjekten«, den Aufbau

von Geschäftsobjekten und stellen Ihnen in Kapitel 3, »Testen von Geschäftsobjek-

ten«, als praktische Einführung die Testumgebung des BOPF vor, in der Sie bereits

mit vorgefertigten Geschäftsobjekten arbeiten und die einzelnen Bestandteile eines

Geschäftsobjekts erkunden können.

Teil II, »Anwendungsentwicklung mit Geschäftsobjekten«, wendet sich dann dem

Thema zu, wie Sie konkret mit ABAP auf bestehende Geschäftsobjekte zugreifen und

mit ihnen arbeiten können. Dazu erläutern wir Ihnen in Kapitel 4, »Architektur der

Consumer-API«, die Architektur der Consumer-API, während in Kapitel 5, »Anwen-

dung der Consumer-API«, die Anwendung im Vordergrund steht.

Teil III, »Anlegen von Geschäftsobjekten«, zeigt Ihnen, wie Sie eigene Geschäftsob-

jekte für die Abbildung Ihrer Geschäftsprozesse entwickeln können. Dazu erläutern

wir Ihnen in Kapitel 6, »Die Geschäftsobjekt-API«, die dazugehörige Geschäftsobjekt-

API, während es in Kapitel 7, »Eigene Geschäftsobjekte mit der SAP GUI anlegen«,

5972.book Seite 15 Donnerstag, 30. November 2017 3:26 15

Page 20: SAP-issen aus erster an - Amazon S3 · 2018-03-26 · 115 5 Kapitel 5 Anwendung der Consumer-API Willkommen im BOPF-Programmierparadies! Hier finden Sie Dutzende von Programmierbeispielen,

Einleitung

16

und in Kapitel 8, »Eigene Geschäftsobjekte mit Eclipse ADT anlegen«, konkret um die

Anlage von Geschäftsobjekten in der SAP GUI sowie in Eclipse ADT geht.

Im letzten Teil des Buches, Teil IV, »Fortgeschrittene Techniken«, stellen wir Ihnen

tiefer greifende Techniken für die Arbeit mit dem BOPF vor. Dazu gehören ins-

besondere die in Kapitel 9, »Bestehende Geschäftsobjekte erweitern«, beschriebene

Erweiterung von Standard-Geschäftsobjekten, die in Kapitel 10, »Debugging von

Geschäftsobjekten«, beschriebene Fehleranalyse im Debugger und die Wiederver-

wendung von Implementierungen, die in Kapitel 11, »Wiederverwendung«, beschrie-

ben wird. Im letzten Kapitel des Buches, in Kapitel 12, »Eine SAPUI5-App mit CDS und

BOPF als Grundlage entwickeln«, zeigen wir Ihnen zudem, wie Sie mit den neuen

Technologien CDS und BOPF eine moderne SAPUI5-Anwendung entwickeln können.

Im Anhang haben wir noch wichtige unterstützende Themen ergänzt. Dazu gehören

beispielsweise ein Klassendiagramm des BOPF sowie eine Übersicht über den Funk-

tionsumfang der beiden aktuell verfügbaren Entwicklungsumgebungen.

In diesem Buch machen wir Sie durch typografisch hervorgehobene Kästen auf be-

stimmte Dinge gesondert aufmerksam. In den Kästen, die mit einem Hinweis-Sym-

bol gekennzeichnet sind, finden Sie Informationen zu weiterführenden Themen

oder wichtigen Inhalten, die Sie sich merken sollten.

Die mit dem Tipp-Symbol gekennzeichneten Kästen geben Ihnen spezielle Empfeh-

lungen, die Ihnen die Arbeit erleichtern können.

Kästen mit dem Achtung-Symbol weisen Sie auf typische Probleme oder Fallstricke

hin.

Zum Schluss bleibt uns nur noch, Ihnen viel Erfolg und Spaß bei der Lektüre dieses

Buches zu wünschen. Wir hoffen, es hilft Ihnen bei den kleinen und großen Heraus-

forderungen des Alltags im Umgang mit dem BOPF.

Der Inhalt orientiert sich dabei an der Sichtweise, die wir als ABAP-Entwickler haben,

und basiert vor allem auf unseren Erfahrungen als Trainer. Unser Dank gilt daher ins-

besondere denen, die in den Kursen immer eine Frage mehr an uns gestellt und uns

somit neue Sichtweisen aufgezeigt haben. In diesem Sinne ist das vorliegende Buch

ein Gemeinschaftswerk von und für angehende ABAPler. Wir freuen uns daher über

jeden Kommentar, der dazu beiträgt, das Buch weiter zu verbessern und abzurunden.

Schreiben Sie uns dazu gerne unter der E-Mail-Adresse [email protected].

In diesem Sinne: COMMIT WORK!

Felix Roth und Stefan Stöhr

5972.book Seite 16 Donnerstag, 30. November 2017 3:26 15

Page 21: SAP-issen aus erster an - Amazon S3 · 2018-03-26 · 115 5 Kapitel 5 Anwendung der Consumer-API Willkommen im BOPF-Programmierparadies! Hier finden Sie Dutzende von Programmierbeispielen,

Auf einen Blick

TEIL I Einführung

1 Einführung in das Business Object Processing Framework .................... 19

2 Aufbau von Geschäftsobjekten ......................................................................... 35

3 Testen von Geschäftsobjekten .......................................................................... 65

TEIL II Anwendungsentwicklung mit Geschäftsobjekten

4 Architektur der Consumer-API .......................................................................... 87

5 Anwendung der Consumer-API ........................................................................ 115

TEIL III Anlegen von Geschäftsobjekten

6 Die Geschäftsobjekt-API ...................................................................................... 151

7 Eigene Geschäftsobjekte mit der SAP GUI anlegen ................................... 177

8 Eigene Geschäftsobjekte mit Eclipse ADT anlegen .................................... 229

TEIL IV Fortgeschrittene Techniken

9 Bestehende Geschäftsobjekte erweitern ...................................................... 265

10 Debugging von Geschäftsobjekten ................................................................. 287

11 Wiederverwendung .............................................................................................. 311

12 Eine SAPUI5-App mit CDS und BOPF als Grundlage entwickeln ........... 319

5972.book Seite 5 Donnerstag, 30. November 2017 3:26 15

Page 22: SAP-issen aus erster an - Amazon S3 · 2018-03-26 · 115 5 Kapitel 5 Anwendung der Consumer-API Willkommen im BOPF-Programmierparadies! Hier finden Sie Dutzende von Programmierbeispielen,

7

Inhalt

Einleitung ............................................................................................................................................... 15

TEIL I Einführung

1 Einführung in das Business Object Processing Framework 19

1.1 Was ist BOPF? ........................................................................................................................ 19

1.1.1 Typische Programmieraufgaben ..................................................................... 19

1.1.2 Vor- und Nachteile von BOPF ........................................................................... 22

1.2 Historische Entwicklung des Frameworks ............................................................... 24

1.3 Die Rolle im Programmiermodell für SAP S/4HANA ........................................... 25

1.3.1 Das aktuelle Programmiermodell (vor ABAP 7.50) ................................... 26

1.3.2 Das neue Programmiermodell (nach ABAP 7.50) ...................................... 27

1.3.3 Die Innovation für die Zukunft ........................................................................ 32

2 Aufbau von Geschäftsobjekten 35

2.1 Knoten ...................................................................................................................................... 36

2.1.1 Transiente Knoten ................................................................................................ 38

2.1.2 Transiente Attribute ............................................................................................ 38

2.1.3 Knotentypen .......................................................................................................... 39

2.2 Knotenelemente .................................................................................................................. 39

2.3 Alternative Schlüssel ......................................................................................................... 40

2.3.1 Eindeutigkeit .......................................................................................................... 43

2.3.2 Anlegen von alternativen Schlüsseln ............................................................ 44

2.3.3 Arbeiten mit alternativen Schlüsseln ............................................................ 44

2.4 Aktionen .................................................................................................................................. 44

2.4.1 Kardinalität einer Aktion ................................................................................... 45

2.4.2 Rückgabeparameter einer Aktion ................................................................... 45

2.4.3 Anlegen und Implementieren einer Aktion ................................................. 46

2.4.4 Aufruf einer Aktion .............................................................................................. 46

5972.book Seite 7 Donnerstag, 30. November 2017 3:26 15

Page 23: SAP-issen aus erster an - Amazon S3 · 2018-03-26 · 115 5 Kapitel 5 Anwendung der Consumer-API Willkommen im BOPF-Programmierparadies! Hier finden Sie Dutzende von Programmierbeispielen,

Inhalt

8

2.5 Assoziationen ........................................................................................................................ 46

2.5.1 Kompositionen ...................................................................................................... 47

2.5.2 Allgemeine Assoziationen ................................................................................. 50

2.5.3 Anlegen und Implementieren von Assoziationen ..................................... 54

2.5.4 Assoziation nutzen .............................................................................................. 54

2.6 Ermittlungen ......................................................................................................................... 54

2.6.1 Auslösebedingungen und Auswertungszeitpunkte ................................. 55

2.6.2 Abhängigkeiten festlegen ................................................................................. 57

2.6.3 Implementierung einer Ermittlung ................................................................ 57

2.6.4 Aufruf einer Ermittlung ...................................................................................... 58

2.7 Validierungen ........................................................................................................................ 58

2.7.1 Konsistenz-Validierungen ................................................................................. 58

2.7.2 Aktions-Validierungen ........................................................................................ 59

2.7.3 Implementierung einer Validierung .............................................................. 59

2.7.4 Konsistenzgruppen .............................................................................................. 60

2.8 Abfragen .................................................................................................................................. 61

2.8.1 Kundeneigene Abfragen .................................................................................... 62

2.8.2 Implementierung einer Abfrage ..................................................................... 62

2.8.3 Aufruf einer Abfrage ........................................................................................... 63

2.9 Berechtigungsprüfungen ................................................................................................. 63

3 Testen von Geschäftsobjekten 65

3.1 Instanzen über Abfragen finden ................................................................................... 66

3.1.1 Datenbanktabelle verwenden ......................................................................... 69

3.1.2 Unterknoten ........................................................................................................... 70

3.2 Eine Instanz ändern ............................................................................................................ 70

3.2.1 Prüfungen ausführen .......................................................................................... 72

3.2.2 Aktionen ausführen ............................................................................................. 73

3.3 Eine neue Instanz anlegen .............................................................................................. 73

3.4 Unterknoten hinzufügen ................................................................................................. 74

3.5 Löschen von Instanzen ...................................................................................................... 75

3.6 Analyse von Fehlermeldungen ...................................................................................... 76

3.7 Anzeigen der Änderungshistorie .................................................................................. 77

3.8 Break- und Watchpoints setzen ................................................................................... 77

3.8.1 Externe Breakpoints ............................................................................................ 78

3.8.2 BOPF-Watchpoints ............................................................................................... 79

5972.book Seite 8 Donnerstag, 30. November 2017 3:26 15

Inhalt

9

3.9 Die Trace-Funktion aktivieren ....................................................................................... 81

3.9.1 Trace aufzeichnen ................................................................................................ 81

3.9.2 Trace stoppen ........................................................................................................ 82

TEIL II Anwendungsentwicklung mit Geschäftsobjekten

4 Architektur der Consumer-API 87

4.1 Service-Manager .................................................................................................................. 88

4.2 Konstanten-Schnittstelle ................................................................................................. 90

4.3 Transaktions-Manager ...................................................................................................... 93

4.3.1 Methode SAVE ....................................................................................................... 95

4.3.2 Methode CLEANUP .............................................................................................. 98

4.3.3 Synchronisierungspunkte .................................................................................. 99

4.3.4 Änderungen nachverfolgen .............................................................................. 102

4.4 Konfigurations-Manager ................................................................................................. 102

4.5 Die Factory-Klasse des Frameworks ............................................................................ 104

4.6 Änderungsobjekte .............................................................................................................. 105

4.7 Nachrichtenobjekte ............................................................................................................ 110

4.8 Das auslösende Fehlerfeld: die Origin-Location .................................................... 113

5 Anwendung der Consumer-API 115

5.1 Lesen von Knoteninstanzen ........................................................................................... 116

5.1.1 Die Methode QUERY ............................................................................................ 117

5.1.2 Die Methode RETRIEVE ....................................................................................... 120

5.1.3 Auslesen einer Verknüpfung mit RETRIEVE_BY_ASSOCIATION ........... 121

5.2 Konvertieren von alternativen Schlüsseln ............................................................... 122

5.3 Modifizieren von Objekten ............................................................................................. 123

5.3.1 Anlegen von Hauptknoten ................................................................................ 126

5.3.2 Anlegen von Unterknoten ................................................................................. 127

5.3.3 Aktualisieren von Knoteninstanzen ............................................................... 129

5.3.4 Löschen von Knoteninstanzen ......................................................................... 130

5.4 Sperren/Entsperren ............................................................................................................ 131

5972.book Seite 9 Donnerstag, 30. November 2017 3:26 15

Page 24: SAP-issen aus erster an - Amazon S3 · 2018-03-26 · 115 5 Kapitel 5 Anwendung der Consumer-API Willkommen im BOPF-Programmierparadies! Hier finden Sie Dutzende von Programmierbeispielen,

Inhalt

10

5.5 Standardwerte für Knoten auslesen ........................................................................... 133

5.5.1 Standardwerte für Oberknoten auslesen .................................................... 133

5.5.2 Standardwerte für Unterknoten auslesen ................................................... 134

5.6 Hauptknoten auslesen ...................................................................................................... 135

5.7 Abfragen .................................................................................................................................. 137

5.7.1 Weitere Abfrageoptionen .................................................................................. 137

5.7.2 Standard-Abfrageparameter ............................................................................ 139

5.8 Aktionen .................................................................................................................................. 141

5.8.1 Aktionen aufrufen ................................................................................................ 141

5.8.2 Standardparameter für Aktionen auslesen ................................................. 143

5.9 Validierungen ........................................................................................................................ 144

5.9.1 Konsistenz-Validierungen ................................................................................. 144

5.9.2 Aktions-Validierungen ........................................................................................ 145

5.10 Ermittlungen ......................................................................................................................... 146

TEIL III Anlegen von Geschäftsobjekten

6 Die Geschäftsobjekt-API 151

6.1 Grundparameter .................................................................................................................. 154

6.1.1 IO_READ: Lesen von Daten ............................................................................... 154

6.1.2 IO_MODIFY: Ändern von Daten ....................................................................... 156

6.1.3 IO_CHECK: Prüfen von Daten ........................................................................... 157

6.1.4 EO_MESSAGE: Rückgabe von Nachrichten .................................................. 157

6.1.5 IS_CTX: Informationen zum Aufrufkontext ................................................ 159

6.2 Knoten implementieren ................................................................................................... 161

6.3 Aktionen implementieren ............................................................................................... 162

6.4 Ermittlungen implementieren ...................................................................................... 164

6.5 Validierungen implementieren ..................................................................................... 166

6.6 Abfragen implementieren ............................................................................................... 169

6.6.1 Die Methode QUERY ............................................................................................ 170

6.6.2 Die Rückgabetabelle ET_DATA ........................................................................ 172

6.7 Assoziationen implementieren ..................................................................................... 172

6.8 Ausnahmen implementieren ......................................................................................... 173

5972.book Seite 10 Donnerstag, 30. November 2017 3:26 15

Inhalt

11

7 Eigene Geschäftsobjekte mit der SAP GUI anlegen 177

7.1 Geschäftsobjekt anlegen ................................................................................................. 179

7.1.1 Persistente Struktur anlegen ............................................................................ 184

7.1.2 Transiente Struktur anlegen ............................................................................. 185

7.1.3 Anlage abschließen ............................................................................................. 186

7.2 Alternative Schlüssel für die SAP GUI ......................................................................... 187

7.2.1 Alternativen Schlüssel hinzufügen ................................................................ 188

7.2.2 Index anlegen ........................................................................................................ 190

7.3 Unterknoten hinzufügen ................................................................................................. 192

7.3.1 Standardknoten als Unterknoten anlegen .................................................. 192

7.3.2 Darstellungsknoten für Geschäftsobjekte anlegen .................................. 195

7.4 Assoziationen ........................................................................................................................ 197

7.5 Abfragen .................................................................................................................................. 199

7.5.1 Eine SELECT_ALL-Abfrage anlegen ................................................................. 200

7.5.2 Eine SELECT_BY_ELEMENTS-Abfrage anlegen ........................................... 200

7.5.3 Eine eigene Abfrage anlegen ............................................................................ 201

7.6 Aktionen .................................................................................................................................. 204

7.7 Validierungen ........................................................................................................................ 207

7.7.1 Eindeutigkeitsprüfung für alternative Schlüssel anlegen ...................... 208

7.7.2 Konsistenz-Prüfung anlegen ............................................................................ 209

7.7.3 Aktions-Prüfung anlegen ................................................................................... 212

7.8 Ermittlungen ......................................................................................................................... 214

7.9 Autorisierungen ................................................................................................................... 217

7.9.1 Ein eigenes Berechtigungsfeld anlegen ........................................................ 218

7.9.2 Ein eigenes Berechtigungsobjekt anlegen ................................................... 219

7.9.3 Autorisierung im Geschäftsobjekt einrichten ............................................ 221

7.9.4 Berechtigung an einen Nutzer vergeben ..................................................... 223

8 Eigene Geschäftsobjekte mit Eclipse ADT anlegen 229

8.1 Grundlegende Anlage ....................................................................................................... 229

8.1.1 Persistente Struktur anlegen ............................................................................ 235

8.1.2 Transiente Struktur anlegen ............................................................................. 238

5972.book Seite 11 Donnerstag, 30. November 2017 3:26 15

Page 25: SAP-issen aus erster an - Amazon S3 · 2018-03-26 · 115 5 Kapitel 5 Anwendung der Consumer-API Willkommen im BOPF-Programmierparadies! Hier finden Sie Dutzende von Programmierbeispielen,

Inhalt

12

8.2 Alternative Schlüssel ......................................................................................................... 238

8.3 Unterknoten .......................................................................................................................... 241

8.4 Assoziationen ........................................................................................................................ 243

8.5 Abfragen .................................................................................................................................. 246

8.5.1 Anlegen einer SELECT_BY_ELEMENTS-Abfrage ......................................... 246

8.5.2 Anlegen einer eigenen Abfrage ....................................................................... 247

8.6 Aktionen .................................................................................................................................. 249

8.7 Validierungen ........................................................................................................................ 252

8.7.1 Anlegen einer Konsistenz-Prüfung ................................................................. 253

8.7.2 Anlegen einer Aktions-Prüfung ....................................................................... 255

8.8 Ermittlungen ......................................................................................................................... 258

8.9 Autorisierungen ................................................................................................................... 261

TEIL IV Fortgeschrittene Techniken

9 Bestehende Geschäftsobjekte erweitern 265

9.1 Möglichkeiten der klassischen Erweiterung ........................................................... 266

9.1.1 Knotenattribute erweitern ................................................................................ 266

9.1.2 Erweiterung einer transienten Struktur ....................................................... 269

9.1.3 Erweiterung der Logik in implementierenden Klassen ........................... 269

9.2 Anlegen eines Erweiterungsobjekts ........................................................................... 271

9.3 Zusätzlichen Unterknoten anlegen ............................................................................. 273

9.3.1 Standard-Unterknoten hinzufügen ............................................................... 274

9.3.2 Darstellungsknoten für Geschäftsobjekte hinzufügen ........................... 276

9.4 Knotenfunktionen erweitern ......................................................................................... 277

9.4.1 Alternative Schlüssel ........................................................................................... 278

9.4.2 Assoziationen ........................................................................................................ 278

9.4.3 Abfragen .................................................................................................................. 279

9.4.4 Aktionen .................................................................................................................. 280

9.4.5 Validierungen ........................................................................................................ 282

9.4.6 Ermittlungen .......................................................................................................... 283

5972.book Seite 12 Donnerstag, 30. November 2017 3:26 15

Inhalt

13

10 Debugging von Geschäftsobjekten 287

10.1 Laufzeitfehler mit MESSAGE_TYPE_X_TEXT ........................................................... 288

10.1.1 Laufzeitfehler auslesen ...................................................................................... 290

10.1.2 Über die Ausnahmeklassen .............................................................................. 292

10.1.3 Im Aufrufstack navigieren ................................................................................. 297

10.2 Puffer debuggen .................................................................................................................. 298

10.2.1 Über Vorwärtsnavigation im Debugger debuggen .................................. 299

10.2.2 Mit Debugging-Skript debuggen .................................................................... 302

10.3 Nachrichten von EO_MESSAGE ..................................................................................... 304

10.4 Change-Log von EO_CHANGE ........................................................................................ 307

10.5 Eigenschaften von EO_PROPERTY ............................................................................... 308

10.6 Änderungstabelle IT_MODIFICATION ........................................................................ 308

11 Wiederverwendung 311

11.1 Validierungen ........................................................................................................................ 312

11.1.1 Werteprüfung auf Domänen ........................................................................... 312

11.1.2 Alternative Schlüssel validieren ...................................................................... 314

11.2 Ermittlungen ......................................................................................................................... 315

11.2.1 Administrationsdaten ........................................................................................ 315

11.2.2 Nummernkreise .................................................................................................... 316

12 Eine SAPUI5-App mit CDS und BOPF als Grundlage entwickeln 319

12.1 CDS: die Modelldefinition ............................................................................................... 320

12.1.1 Was ist CDS? .......................................................................................................... 321

12.1.2 Interface-Views mit ObjectModel-Annotationen ..................................... 322

12.1.3 Consumption-Views mit UI und OData Annotations .............................. 327

12.2 BOPF: die Backend-Implementierung ........................................................................ 331

12.2.1 BOPF-Geschäftsobjekt generieren .................................................................. 331

12.2.2 Arbeiten mit generierten Geschäftsobjekten ............................................. 335

5972.book Seite 13 Donnerstag, 30. November 2017 3:26 15

Page 26: SAP-issen aus erster an - Amazon S3 · 2018-03-26 · 115 5 Kapitel 5 Anwendung der Consumer-API Willkommen im BOPF-Programmierparadies! Hier finden Sie Dutzende von Programmierbeispielen,

Inhalt

14

12.3 OData: die Schnittstelle zur Welt ................................................................................ 335

12.3.1 Was ist OData? ...................................................................................................... 336

12.3.2 Was ist SADL? ........................................................................................................ 336

12.3.3 OData-Service generieren ................................................................................. 336

12.3.4 Arbeiten mit generierten OData-Services .................................................... 338

12.4 SAP Fiori: die Oberfläche .................................................................................................. 339

12.4.1 Was ist SAP Fiori? ................................................................................................. 339

12.4.2 Was ist SAPUI5? .................................................................................................... 339

12.4.3 Generieren einer SAP-Fiori-App ....................................................................... 340

12.4.4 Arbeiten mit generierten SAP-Fiori-Apps ..................................................... 344

Anhang 345

A Klassendiagramme zur Consumer-API ..................................................................... 347

B Einrichten der BOPF-Debugging-Skripte ................................................................... 351

C Funktionsumfang der Entwicklungsumgebungen .............................................. 355

D Die Autoren ............................................................................................................................ 359

Index ........................................................................................................................................................ 361

5972.book Seite 14 Donnerstag, 30. November 2017 3:26 15

Page 27: SAP-issen aus erster an - Amazon S3 · 2018-03-26 · 115 5 Kapitel 5 Anwendung der Consumer-API Willkommen im BOPF-Programmierparadies! Hier finden Sie Dutzende von Programmierbeispielen,

361

Index

Index

/BOBF/CL_FRW_FACTORY

GET_AUTHORITY_HANDLER .................... 104

GET_BO_NAME ............................................... 104

GET_BOPF .......................................................... 104

GET_CONFIGURATION ........................ 102, 105

GET_MAIN_BUFFER ...................................... 105

GET_NEW_KEY ................................................ 105

GET_NEW_TRANSIENT_KEY ...................... 105

QUERY_BO ........................................................ 105

QUERY_BOS ...................................................... 105

QUERY_EXTENSION_BO .............................. 105

QUERY_INHERITING_BO ............................ 105

QUERY_PARENT_BO ..................................... 105

/BOBF/CL_TRA_SERV_MGR_FACTORY

GET_SERVICE_MANAGER .............................. 88

/BOBF/CL_TRA_TRANS_MGR_FACTORY

GET_TRANSACTION_MANAGER ................. 94

/BOBF/CM_FRW .......................................... 111, 173

/BOBF/CX_FRW .................................................... 292

/BOBF/CX_FRW_CORE ...................................... 293

/BOBF/IF_FRW_ACTION

EXECUTE ............................................................. 251

/BOBF/IF_FRW_ASSOCIATIONS

/BOBF/CL_LIB_Q_SUPERCLASS ................ 172

/BOBF/IF_FRW_CONFIGURATION ............... 102

/BOBF/CL_CONFRT_COMPLETE ............... 102

GET_ACT ............................................................ 103

GET_ALTKEY ..................................................... 103

GET_ASSOC ....................................................... 103

GET_AUTHORITY_OBJECTS ........................ 103

GET_BO ............................................................... 103

GET_DETERMINATION ................................. 103

GET_GROUP ..................................................... 103

GET_NODE ........................................................ 103

GET_PROPERTY ............................................... 103

GET_QUERY ...................................................... 103

GET_VALIDATION .......................................... 103

GET_VALUE_SET ............................................. 103

/BOBF/IF_FRW_DETERMINATION

/BOBF/CL_LIB_D_SUPERCLASS ................ 164

EXECUTE .................................................... 165, 259

/BOBF/IF_FRW_MESSAGE

/BOBF/CL_FRW_MESSAGE ................ 110, 304

ADD ...................................................................... 110

ADD_CM ............................................................ 110

ADD_MESSAGE ................................................ 110

CHECK ................................................................. 111

/BOBF/IF_FRW_MESSAGE (Forts.)

CONVERT_ALTERN_KEY .............................. 122

GET ....................................................................... 111

GET_MESSAGES ............................................... 111

MODIFY .............................................................. 123

RETRIEVE ............................................................ 120

RETRIEVE_BY_ASSOCIATION .................... 121

/BOBF/IF_FRW_NODE

/BOBF/CL_LIB_N_SUPERCLASS ................ 161

RETRIEVE_DEFAULT_VALUES .......... 133, 161

/BOBF/IF_FRW_QUERY

/BOBF/CL_LIB_Q_SUPERCLASS ................ 169

QUERY ................................................................. 170

/BOBF/IF_FRW_SERVICE_LAYER

/BOBF/CL_FRW ................................................ 105

/BOBF/IF_FRW_VALIDATION

/BOBF/CL_LIB_V_SUPERCLASS ................ 166

EXECUTE .......................................... 167, 254, 257

/BOBF/IF_TRA_CHANGE

/BOBF/CL_TRA_CHANGE ............................ 106

ADD ...................................................................... 106

CONDENSE ........................................................ 106

GET_BO_CHANGES ........................................ 106

GET_CHANGES ................................................ 106

HAS_FAILED_CHANGES .............................. 106

MERGE ................................................................. 106

/BOBF/IF_TRA_SERVICE_MANAGER ............. 88

/BOBF/CL_TRA_SERVICE_MGR ................... 88

CHECK_ACTION ....................................... 88, 145

CHECK_AND_DETERMINE .......... 89, 144, 146

CHECK_CONSISTENCY ........................... 89, 144

CONVERT_ALTERN_KEY ................................. 89

DO_ACTION ............................................... 89, 141

GET_NEW_KEY ................................................... 89

MODIFY ................................................................. 89

QUERY ................................................. 89, 117, 137

RETRIEVE ............................................................... 89

RETRIEVE_BY_ASSOCIATION ....................... 89

RETRIEVE_DEFAULT_ ...................................... 89

RETRIEVE_DEFAULT_ACTION_

PARAM ........................................................... 143

RETRIEVE_DEFAULT_NODE_VALUES ....... 89

RETRIEVE_DEFAULT_QUERY_PARAM ... 140

/BOBF/IF_TRA_TRANSACTION_MGR ............ 94

/BOBF/CL_TRA_TRANSACTION_MGR ...... 94

CLEANUP ............................................................... 98

SAVE ........................................................................ 95

5972.book Seite 361 Donnerstag, 30. November 2017 3:26 15

Page 28: SAP-issen aus erster an - Amazon S3 · 2018-03-26 · 115 5 Kapitel 5 Anwendung der Consumer-API Willkommen im BOPF-Programmierparadies! Hier finden Sie Dutzende von Programmierbeispielen,

Index

362

A

ABAP ............................................................................ 26

Abfrage ........................................ 117, 169, 246, 279

anlegen ............................................................... 199

Custom Query .................................................. 247

Custom Query anlegen ................................. 201

kundeneigene ...................................................... 62

SELECT_ALL ....................................................... 246

SELECT_ALL-Abfrage anlegen ................... 200

SELECT_BY_ELEMENTS ................................ 246

SELECT_BY_ELEMENTS-

Abfrage anlegen ......................................... 201

Standard ................................................................ 61

Adminstrationsdaten ........................................ 315

Aktion ............................................ 44, 162, 250, 280

anlegen ............................................................... 204

aufrufen ................................................................. 46

Kardinalität ......................................................... 45

Prüfung anlegen .................................... 212, 255

Rückgabeparameter ......................................... 45

Standardparameter ....................................... 143

Validierung ................................................ 59, 145

Ändern

Geschäftsobjekt ............................................... 123

Geschäftsobjekt löschen .............................. 130

Geschäftsobjekt-Unterknoten ................... 127

Änderung nachverfolgen ................................. 102

Änderungsobjekt .............................. 102, 105, 307

Debugging-Skript ........................................... 307

Änderungsoperation, Debugging-Skript ... 309

Änderungszugriff in der API ........................... 156

API anwenden ....................................................... 115

Append-Struktur ................................................. 266

Assoziation ............... 46, 121, 172, 197, 243, 278

allgemeine ............................................................ 50

anlegen ........................................................ 54, 197

benutzen ............................................................... 54

Bindung ..................................................... 198, 276

Fremdschlüsselassoziation ............................ 51

geschäftsobjektübergreifende ...................... 53

Komposition ........................................................ 47

normale ................................................................. 47

Spezialisierungsassoziation .......................... 49

umgekehrte Fremdschlüssel-

assoziation ...................................................... 52

ASYNC SAVE AND CONTINUE ........................... 97

Attribut, transientes .............................................. 38

Aufrufstack ............................................................ 297

Ausnahme .............................................................. 173

Ausnahmeklasse .................................................. 292

Autorisierung ............................................... 217, 261

Berechtigungsfeld anlegen ......................... 218

Berechtigungsobjekt ...................................... 219

einrichten ........................................................... 218

im Geschäftsojekt ........................................... 221

Nutzerberechtigung einrichten ................. 224

B

Berechtigung zuweisen ..................................... 223

Berechtigungsfeld ............................................... 223

Berechtigungsobjekt ................................. 218, 225

Berechtigungsobjekt anlegen ......................... 219

Berechtigungsprüfung ......................................... 63

Binding .................................................................... 245

BOBT ............................................................................ 65

BOBX ......................................................................... 177

BOPF ............................................................................ 19

Definition .............................................................. 19

generieren .......................................................... 331

Geschichte ............................................................ 24

Service Layer ..................................................... 105

Vor- und Nachteile ............................................ 22

Business Object Processing Framework � BOPF

C

CDS .............................................................. 28, 32, 236

@ObjectModel-Annotation ........................ 332

@OData-Annotation .................................... 336

@UI-Annotation ............................................. 330

Annotation ........................................................... 33

Composite-View .............................................. 322

Consumption-View ............................... 322, 327

Funktionen ........................................................ 321

Interface-View ......................................... 321–322

View ...................................................................... 321

Check Before Save ............................................... 255

Code-Pushdown ................................................... 321

Code-to-Data ......................................................... 321

Consumer-API ............................................... 87, 347

Core Data Services � CDS

CRUD ........................................................................... 21

D

Darstellungsknoten

anlegen ............................................................... 195

hinzufügen ............................................... 196, 276

Dictionary-Element generieren ..................... 186

5972.book Seite 362 Donnerstag, 30. November 2017 3:26 15

Index

363

E

EO_CHANGE .......................................................... 307EO_PROPERTY ...................................................... 308Ermittlung ................. 54, 146, 164, 258, 283, 315

Abhängigkeiten .................................................. 57anlegen ........................................................ 57, 214aufrufen ................................................................. 58Auslösebedingung ............................................. 55Auswertungszeitpunkt .................................... 55

Ermittlungsklasse /BOBF/CL_D_ADMIN_DATA .................................................................... 315

Erweiterungsobjekt anlegen ........................... 271Exception-Anzeige .............................................. 295EXECUTE ................................................................. 211

F

Factory-Klasse ....................................................... 104

G

Geschäftsobjekt ....................................................... 20anlegen ...................................................... 179, 229Attribut ändern ............................................... 129Autorisierung einrichten ............................. 221bearbeiten .......................................................... 335erweitern ................................................... 265, 272Hauptknoten .................................................... 126testen ................................................................... 187

H

Hauptknotenanlegen ............................................................... 126auslesen .............................................................. 135

I

Implementierungsklasse ................................. 312impliziter Erweiterungspunkt ....................... 269Index anlegen ....................................................... 190IT_MODIFICATION ............................................. 308

K

Klasse/BOBF/CL_D_ADMIN_DATA ..................... 315/BOBF/CL_LIB_V_ALT_KEY ........................ 312/BOBF/CL_LIB_V_MANDATORY_

ATTR ................................................................ 312/BOFU/CL_D_DRAW_NUMBER ................ 315/BOFU/CL_V_CODE_VALUES ........... 312–313

Klasse (Forts.)

Diagramm ......................................................... 347

Knoten ........................................................................ 36

Attribut erweitern ........................................... 266

Darstellungsknoten .......................................... 39

Debugging-Skript ............................................ 308

delegierter Knoten ............................................. 39

erweitern ............................................................ 277

Instanz lesen ..................................................... 116

ROOT ....................................................................... 36

Standardwerte ................................................. 133

transiente Struktur ............................................ 38

transienter .................................................. 38, 183

Typ ................................................................. 39, 183

Konfigurations-Manager .................................. 102

Konsistenzgruppe .................................................. 60

Konsistenz-Validierung .................................... 144

Konstanten-Interface ......................... 90, 187, 232

L

Laufzeitfehler ........................................................ 288

Aufrufhierarchie .............................................. 291

auslesen .............................................................. 290

Langtext ............................................................. 291

Lesen ......................................................................... 120

Lesezugriff in der API ......................................... 154

LO_SERV_MGR ..................................................... 115

Logical Unit of Work � LUW

Logik erweitern .................................................... 269

LUW ....................................................................... 30, 93

M

MODIFY ................................................................... 123

N

Nachrichtenklasse ...................................... 112, 304

Nachrichtenklasse, Debugging-Skript ........ 306

Nachrichtenobjekt .............................................. 110

Nummernkreis ..................................................... 316

Nummernkreisnummer .................................. 318

O

OData ................................................................. 28, 336

Annotation ........................................................... 33

OData-Service .......................................................... 32

generieren .......................................................... 336

verwenden ......................................................... 338

OpenUI5 .................................................................. 340

5972.book Seite 363 Donnerstag, 30. November 2017 3:26 15

Page 29: SAP-issen aus erster an - Amazon S3 · 2018-03-26 · 115 5 Kapitel 5 Anwendung der Consumer-API Willkommen im BOPF-Programmierparadies! Hier finden Sie Dutzende von Programmierbeispielen,

Index

364

P

Paging ...................................................................... 138

Paket /BOBF/PUBLIC_LIBRARY ...................... 311

persistente Struktur .................................. 184, 235

Prüfungen innerhalb der API ......................... 157

Puffer ........................................................................ 298

Debugging-Skript ........................................... 302

im Debugger ..................................................... 299

Q

QUERY ...................................................................... 117

R

RETRIEVE ................................................................ 120

Rolle SAP_ALL ....................................................... 221

S

SADL ......................................................................... 336

SAP Cloud Connector ......................................... 340

SAP Fiori .................................................................. 339

App generieren ................................................ 340

Smart Template ............................................... 340

SAP GUI ...................................................................... 33

SAP HANA .......................................................... 28–29

SAP S/4HANA .......................................... 23, 25, 319

SAPUI5 ....................................................... 27, 29, 339

SAVE AND CONTINUE .......................................... 96

SAVE AND EXIT ....................................................... 96

Schlüssel

alternativer 42, 187–188, 208, 238, 278, 314

eindeutiger alternativer .................................. 43

Eindeutigkeitsprüfung .................................. 208

Sekundär-Index .................................................... 190

Service-Manager ..................................................... 88

SETPROGRESS ....................................................... 206

Skript-Wrapper ..................................................... 302

Sperre ....................................................................... 131

exklusive Sperre ............................................... 132

optimistische Sperre ...................................... 132

Standardknoten ................................................... 192

Standardparameter auslesen ......................... 143

Standard-Unterknoten ...................................... 274

Standardwert ......................................................... 161

Synchronisierungspunkt .......................... 99, 101

T

Test

Abfrage .................................................................. 66

Aktion ..................................................................... 73

Änderungshistorie ............................................. 77

Datenbanktabelle .............................................. 69

externer Breakpoint .......................................... 78

Fehlermeldungen ............................................... 76

Knoten bearbeiten ............................................. 70

Knoteninstanz anlegen ................................... 73

Knoteninstanz löschen .................................... 75

Prüfung .................................................................. 72

Trace ....................................................................... 81

Trace aufzeichnen ............................................. 81

Trace stoppen ...................................................... 82

Unterknoten ......................................................... 70

Watchpoint .......................................................... 79

TOTAL_PROGRESS .............................................. 216

Transaktion ............................................................... 19

BOB ....................................................................... 178

BOBF ..................................................................... 178

BOBX .................................................................... 272

Manager ................................................................ 93

transaktionale Verarbeitung ............................. 30

transiente Struktur .................................... 185, 238

transiente Struktur erweitern ........................ 269

U

Unterknoten ....................................... 134, 241, 274

anlegen ............................................................... 274

hinzufügen ........................................................ 192

V

Validierung ......................... 58, 166, 252, 282, 312

Aktion ..................................................................... 59

Aktions-Prüfung .............................................. 255

Aktions-Validierung ...................................... 213

anlegen ............................................................... 208

Eindeutigkeitsprüfung .................................. 208

Konsistenzgruppe .............................................. 60

Konsistenz-Prüfung ....................................... 253

Konsistenz-Validierung ......................... 58, 209

Verbundschlüssel ................................................ 189

W

Web IDE ...................................................................... 32

Wiederverwendung ............................................ 311

Wurzelknoten verbinden ................................. 197

5972.book Seite 364 Donnerstag, 30. November 2017 3:26 15

Page 30: SAP-issen aus erster an - Amazon S3 · 2018-03-26 · 115 5 Kapitel 5 Anwendung der Consumer-API Willkommen im BOPF-Programmierparadies! Hier finden Sie Dutzende von Programmierbeispielen,

Wir hoffen sehr, dass Ihnen diese Leseprobe gefallen hat. Gerne dürfen Sie diese Leseprobe empfehlen und weitergeben, allerdings nur vollständig mit allen Seiten. Die vorliegende Leseprobe ist in all ihren Teilen urheber-rechtlich geschützt. Alle Nutzungs- und Verwertungsrechte liegen beim Autor und beim Verlag.

Teilen Sie Ihre Leseerfahrung mit uns!

Felix Roth, Stefan Stöhr

BOPF – Business-Objekte mit ABAP entwickeln

364 Seiten, gebunden, Dezember 2017 79,90 Euro, ISBN 978-3-8362-5972-9

www.sap-press.de/4520

Felix Roth ist Trainer, Entwickler und Berater mit Herzblut und im kompletten ABAP-Technologie-Umfeld zu Hause. Aktuell ist er als selbstständiger Berater unter dem Namen LOOP AT Consulting (www.loop-at.de) tätig. In seiner Posi-tion berät er Kunden in den verschiedensten Entwicklungs-projekten und beschäftigt sich maßgeblich mit den neues-ten SAP-Technologien. Seit 2014 hält Felix Roth regelmäßig SAP-Schulungen für die Integrata AG. Er ist Autor des Buchs »ABAP Objects – Das umfassende Handbuch«, das 2016 bei SAP PRESS erschienen ist.

Stefan Stöhr ist Software-Entwickler für ABAP und Java bei der X-CASE GmbH. Seine Hauptaufgabe ist die Entwicklung von Anwendungen auf der SAP Cloud Platform sowie die Erforschung von euen SAP-Technologien. Darüber hinaus hält er SAP-Schulungen für die Integrata AG und arbeitet bei der Erstellung von Schulungsunterlagen mit.

SAP-Wissen aus erster Hand.