SAP-issen aus erster an - Amazon S3 · 2018-03-26 · 115 5 Kapitel 5 Anwendung der Consumer-API...
Transcript of SAP-issen aus erster an - Amazon S3 · 2018-03-26 · 115 5 Kapitel 5 Anwendung der Consumer-API...
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.
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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.