loading

Logout succeed

Logout succeed. See you again!

ebook img

BOPF – Business-Objekte mit ABAP entwickeln PDF

pages30 Pages
release year2017
file size4.68 MB
languageGerman

Preview BOPF – Business-Objekte mit ABAP entwickeln

SAP-Wissen aus erster Hand. Leseprobe Entwickeln Sie eigene ABAP-Anwendungen, ohne sich um die zeitraubende Implementierung der Hintergrundlogik kümmern zu müssen. Überzeugen Sie sich selbst, und lernen Sie in dieser Leseprobe, wie Sie mit der Consumer-API auf bestehende Ge- schäftsobjekte zugreifen. »Anwendung der Consumer-API« »Einleitung« Inhaltsverzeichnis Index Die Autoren Leseprobe weiterempfehlen 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 5972.book Seite 115 Donnerstag, 30. November 2017 3:26 15 Kapitel 5 Anwendung der Consumer-API Willkommen im BOPF-Programmierparadies! Hier finden Sie Dutzende von Programmierbeispielen, die Ihnen zeigen, wie Sie mit 5 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: (cid:2) Anlegen (Create) (cid:2) Lesen (Read) (cid:2) Aktualisieren (Update) (cid:2) Löschen (Delete) (cid:2) 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: (cid:2) das Auflösen von Assoziationen zwischen zwei Knoten (cid:2) das Sperren und Entsperren von Geschäftsobjektinstanzen ohne Modifikation (Änderung) (cid:2) das Ermitteln eines Schlüssels zu einem alternativen Schlüssel (cid:2) das Auslesen von Standardwerten für die Anlage von Knoten und für das Ausfüh- ren von Aktionen und Abfragen (cid:2) das Ermitteln des Oberknotens zu einem gegebenen Knoten (cid:2) 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: 115 5972.book Seite 116 Donnerstag, 30. November 2017 3:26 15 5972.book Seite 117 Donnerstag, 30. November 2017 3:26 15 5 Anwendung der Consumer-API 5.1 Lesen von Knoteninstanzen DATA: lo_serv_mgr TYPE REF TO /bobf/if_tra_service_manager. 2. Abfrage von Instanzen über einen Schlüssel lo_serv_mgr = /bobf/cl_tra_serv_mgr_factory=>get_service_manager( Sie haben bereits einen oder mehrere Schlüssel und wollen dazu die dazugehöri- iv_bo_key = /bobf/if_demo_customer_c=>sc_bo_key gen Knoteninstanzen eines Geschäftsobjekts auslesen. Dann können Sie die ). Methode RETRIEVE oder QUERY des Service-Managers verwenden. Listing 5.1 Beschaffung des Service-Managers 5.1.1 Die Methode QUERY 5 Das vorliegende Kapitel können Sie auch durcharbeiten, wenn Sie noch kein eigenes Zur Abfrage von Knoteninstanzen eines Geschäftsobjekts anhand von bestimmten Geschäftsobjekt angelegt haben, da Sie in jedem Abschnitt ein auf den Demo-Ge- Kriterien können Sie die Methode QUERY des Service-Managers verwenden. schäftsobjekten des SAP-Systems beschriebenes Beispiel vorfinden werden. Wir empfehlen Ihnen, die hier vorgestellten Programmierbeispiele direkt im ABAP- Nur Rückgabe von persistenten Daten Editor auszuprobieren. Den Erfolg können Sie anhand der in Kapitel 3, »Testen von Abfragen geben nur die Schlüssel von Instanzen zurück, die bereits auf der Daten- Geschäftsobjekten«, beschriebenen Test-UI, der Transaktion BOBT, durch Vergleich bank persistiert wurden (und nicht solche, die gerade im Speicher in Bearbeitung lie- der Ergebnisse überprüfen. gen). Abfragen sollten daher nicht innerhalb der transaktionalen Verarbeitung (z.B. in einer Aktion, Ermittlung oder Validierung) verwendet werden. Als Alternative ste- Consumer-API nur für externe Aufrufe hen Ihnen hier Assoziationen zur Verfügung. Alle in diesem Kapitel beschriebenen Methoden sollten Sie nicht innerhalb eines Geschäftsobjekts, d.h. in den Implementierungen von Aktionen, Validierungen, Konkret können Sie mit dieser Methode dieselben Funktionen wie mit einer SELECT- Ermittlungen usw., verwenden. Die interne Verwendung wird in Kapitel 6, »Die Anweisung (von Joins und Aggregationen abgesehen) abbilden. Zu diesen Funktio- Geschäftsobjekt-API«, beschrieben. Dort geschieht die Implementierung durch die in nen zählen: den Methoden bereitgestellten Importparameter. (cid:2) vordefinierte Abfragen aus dem Geschäftsobjektausführen (cid:2) nach Schlüsseln und Werten filtern (cid:2) bestimmen, ob nur die ermittelten Schlüssel oder auch die Daten 5.1 Lesen von Knoteninstanzen der Knoteninstanzen zurückgegeben werden sollen Das Lesen von Instanzen eines Geschäftsobjekts gehört zu den absoluten Grundauf- (cid:2) sich die Anzahl der gefunden Einträge zurückgeben lassen gaben des Frameworks. In diesem Zusammenhang möchten wir noch einmal darauf (cid:2) die maximale Ergebnismenge einschränken hinweisen, dass immer nur Instanzen eines einzelnen Knotens ausgelesen werden (cid:2) die Ergebnismenge sortieren können und nicht die Instanzen aller Knoten eines Geschäftsobjekts. In der Regel wer- (cid:2) Paging verwenden, d.h. sich nur eine Teilmenge zurückgeben lassen 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 Nachfolgend erläutern wir alle diese Funktionen getrennt. Das bedeutet aber nicht, Zielknoten navigieren. Beim Lesen von Knoteninstanzen eines Geschäftsobjekts müs- dass Sie diese nicht auch kombiniert verwenden können. sen zwei Szenarien unterschieden werden: Grundaufbau 1. Abfrage von Instanzen anhand von Kriterien Sie haben keinen Schlüssel, aber eventuell einen oder mehrere alternative Schlüs- Zur Demonstration der Funktionsweise der Methode QUERY wird in diesem Ab- sel (beispielsweise die ursprünglichen Primärschlüssel) oder Filterkriterien, zu schnitt die grundlegende Abfrage SELECT_ALL auf den Hauptknoten (hier ROOT) ver- denen Sie die dazugehörigen Instanzen bzw. die Schlüssel auslesen möchten. wendet, die in jedem Geschäftsobjekt als Standard definiert werden kann. Diese gibt, Dann können Sie die Methode QUERY des Service-Managers verwenden. wie der Name es aussagt, alle Instanzen eines Knotens zu dem jeweiligen Geschäfts- objekt zurück. 116 117 5972.book Seite 118 Donnerstag, 30. November 2017 3:26 15 5972.book Seite 119 Donnerstag, 30. November 2017 3:26 15 5 Anwendung der Consumer-API 5.1 Lesen von Knoteninstanzen Beim Aufruf der Methode QUERY müssen Sie unter dem Parameter IV_QUERY_KEY sätzliche Feld ist es möglich, dass Sie auf mehrere Attribute gleichzeitig filtern kön- über das Konstanten-Interface des Geschäftsobjekts unter Konstante SC_QUERY_ nen oder für ein Attribut mehrere Einschränkungen treffen können, z.B. pro Zeile ROOT den Schlüssel dieser Abfrage entsprechend auswählen. Für das Geschäftsobjekt der Selektions-Parametertabelle eine Einschränkung. Listing 5.3 zeigt Ihnen eine bei- /BOBF/DEMO_CUSTOMER wäre der Pfad zu dem Schlüssel der Abfrage der folgende: spielhafte Implementierung einer Abfrage mit SELECT_BY_ATTRIBUTES für den Kno- ten ROOT des Geschäftsobjekts /BOBF/DEMO_CUSTOMER. Im Beispiel werden alle /bobf/if_demo_customer_c=>sc_query-root-select_all Kunden gesucht, die »EUR« als Kundenwährung haben. Listing 5.2 zeigt einen beispielhaften Aufruf der Methode QUERY für den Knoten 5 ROOT des Geschäftsobjekts /BOBF/DEMO_CUSTOMER. DATA: lt_sel_param TYPE /bobf/t_frw_query_selparam, ls_sel_param TYPE /bobf/s_frw_query_selparam. DATA: lt_data TYPE /bobf/t_demo_customer_hdr_k, lt_keys TYPE /bobf/t_frw_key. ls_sel_param-attribute_name = /bobf/if_demo_customer_c=>sc_ "Beschaffen des Service-Managers wie im Listing 5.1 query_attribute-root-select_by_attributes-cust_curr. lo_serv_mgr->query( "Oder auch direkte Angabe des Attributs CUST_CURR möglich EXPORTING ls_sel_param-low = 'EUR'. iv_query_key = /bobf/if_demo_customer_c=> ls_sel_param-option = 'EQ'. sc_query-root-select_all ls_sel_param-sign = 'I'. iv_fill_data = abap_true APPEND ls_sel_param TO lt_sel_param. IMPORTING lo_serv_mgr->query( et_data = lt_data EXPORTING et_key = lt_keys iv_query_key = /bobf/if_demo_customer_c=>sc_query-root- ). select_by_attributes iv_fill_data = abap_true Listing 5.2 Grundaufbau einer Abfrage it_selection_parameters = lt_sel_param IMPORTING Sind Sie nicht nur an den Schlüsseln (Rückgabetabelle ET_KEY), sondern auch an den et_data = lt_data et_key = lt_keys 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 Listing 5.3 Abfrage nach Attributen 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 Einschränken über Schlüssel Abfragen des Geschäftsobjekts durchführen. Wählen Sie dazu über das Konstanten- Wenn Sie bereits die Schlüssel einer Knoteninstanz eines Geschäftsobjekts haben Interface die entsprechende Abfrage aus. Nachfolgend ist dies über die zweite Stan- und sich dazu die Daten der Knoteninstanz auslesen lassen wollen, müssen Sie die- dardabfrage SELECT_BY_ATTRIBUTES (bzw. SELECT_BY_ELEMENTS), die ebenfalls für sen Schlüssel nur im Feld KEY der Tabelle des Parameters IT_FILTER_KEY angeben jeden Knoten zusätzlich angelegt werden kann, dargestellt. 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. Einschränken über Attribute DATA: lt_filter_key TYPE /bobf/t_frw_key, Zum Einschränken der Abfrageergebnisse nach Attributwerten bietet der Parameter ls_filter_key TYPE /bobf/s_frw_key. IT_SELECTION_PARAMETERS den Grundaufbau einer Range-Tabelle mit den klassi- schen Feldern SIGN, OPTION, LOW und HIGH an. ls_filter_key-key = '000C294A1BC91ED78FA9BE1AD6C520E0'. Zusätzlich zu diesen Grundfeldern müssen Sie in der Struktur noch den Namen des APPEND ls_filter_key TO lt_filter_key. einzuschränkenden Attributs im Feld ATTRIBUTE_NAME angeben. Durch dieses zu- 118 119 5972.book Seite 120 Donnerstag, 30. November 2017 3:26 15 5972.book Seite 121 Donnerstag, 30. November 2017 3:26 15 5 Anwendung der Consumer-API 5.1 Lesen von Knoteninstanzen lo_serv_mgr->query( iv_fill_data = abap_true EXPORTING iv_invalidate_cache = abap_true iv_query_key = /bobf/if_demo_customer_c=>sc_query-root- IMPORTING select_all et_data = lt_data iv_fill_data = abap_true et_failed_key = lt_failed_keys it_filter_key = lt_filter_key ). 5 IMPORTING Listing 5.5 Auslesen von Daten mit RETRIEVE et_data = lt_data et_key = lt_keys 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 Listing 5.4 Abfrage nach Schlüsseln würden dagegen im Rückgabeparameter ET_FAILED_KEY zurückgegeben werden. 5.1.2 Die Methode RETRIEVE 5.1.3 Auslesen einer Verknüpfung mit RETRIEVE_BY_ASSOCIATION Anstelle bei der Methode QUERY im Parameter IT_FILTER_KEY die Schlüssel mitzuge- In Abschnitt 2.5, »Assoziationen«, haben wir Ihnen die Möglichkeiten der Verknüp- ben und über den Parameter IV_FILL_DATA die Daten anzufragen, können Sie dies fung von Knoten über Assoziationen vorgestellt. Die Methode RETRIEVE_BY_ASSO- auch über die Methode RETRIEVE des Service-Managers erreichen. CIATION ist letztlich die Stelle, an der Sie mit diesen definierten Verknüpfungen Vorteil dieser Methode ist, dass Sie über den Parameter IV_INVALIDATE_CACHE die arbeiten können und von einer Instanz eines Knotens A zu einem oder mehreren Möglichkeit haben, den Puffer zurückzusetzen und, falls Sie dies benötigen, Sperren Instanzen eines Knotens B navigieren können. auf die Knoteninstanzen zu setzen. Letzteres finden Sie in Abschnitt 5.4, »Sperren/ Zum Aufruf der Methode müssen Sie im Parameter IV_ASSOCIATION den Namen der Entsperren«, beschrieben. Assoziation angeben. Diesen können Sie im Konstanten-Interface des Geschäftsob- Listing 5.5 zeigt Ihnen einen solchen Aufruf der Methode RETRIEVE. Achten Sie da- jekts unter der Konstante SC_ASSOCIATION, gefolgt von dem gewünschten Knoten, rauf, wirklich nur Schlüssel und keine alternativen Schlüssel mitzugeben. Im Beispiel finden. Im Parameter IV_NODE_KEY müssen Sie zusätzlich die ID des gewünschten ist zu demonstrativen Zwecken ein richtiger und ein falscher Schlüssel mitgegeben Knotens angeben, von der aus Sie navigieren wollen, während Sie im Parameter IT_ worden. 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- DATA: lt_keys TYPE /bobf/t_frw_key, teninstanzen anfragen, die im Rückgabeparameter ET_DATA bereitgestellt werden. ls_key TYPE /bobf/s_frw_key, lt_failed_keys TYPE /bobf/t_frw_key. Listing 5.6 zeigt beispielhaft die Navigation vom Knoten ROOT zu dem Unterknoten ROOT_TEXT des Geschäftsobjekts /BOBF/DEMO_CUSTOMER über die gleichnamige "beispielhafter Schlüssel Assoziation ROOT_TEXT. ls_key-key = '0050568F72901ED79EA326CDC37C60FF'. DATA: lt_data TYPE /bobf/t_demo_short_text_k, APPEND ls_key TO lt_keys. lt_key TYPE /bobf/t_frw_key, ls_key TYPE /bobf/s_frw_key. ls_key-key = '123456'. "falsch APPEND ls_key TO lt_keys. "beispielhafter Schlüssel ls_key-key = '0050568F72901ED79EA63B400C91A0FF'. lo_serv_mgr->retrieve( APPEND ls_key TO lt_key. EXPORTING iv_node_key = /bobf/if_demo_customer_c=>sc_node- lo_serv_mgr->retrieve_by_association( root EXPORTING it_key = lt_keys 120 121 5972.book Seite 122 Donnerstag, 30. November 2017 3:26 15 5972.book Seite 123 Donnerstag, 30. November 2017 3:26 15 5 Anwendung der Consumer-API 5.3 Modifizieren von Objekten iv_node_key = /bobf/if_demo_customer_c=>sc_node-root lt_keys TYPE /bobf/t_frw_key. it_key = lt_key iv_association = /bobf/if_demo_customer_c=>sc_ ls_alt_keys = '123456'. association-root-root_text APPEND ls_alt_keys TO lt_alt_keys. iv_fill_data = abap_true IMPORTING lo_mgr->convert_altern_key( 5 et_data = lt_data ). EXPORTING iv_node_key = /bobf/if_demo_customer_c=>sc_node-root Listing 5.6 Auslesen von Daten über eine Assoziation iv_altkey_key = /bobf/if_demo_customer_c=>sc_ alternative_key-root-customer_id Bei Erfolg werden Ihnen in der Rückgabetabelle ET_DATA die ausgelesenen Kno- it_key = lt_alt_keys teninstanzen zurückgegeben. IMPORTING et_key = lt_keys ). 5.2 Konvertieren von alternativen Schlüsseln Listing 5.7 Konvertierung 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 Bei erfolgreicher Ausführung erhalten Sie die zugehörigen Schlüssel in der Rückgabe- zu diesem alternativem Schlüsselden technischen Schlüssel des dazugehörigen Kno- tabelle ET_KEY. 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: 5.3 Modifizieren von Objekten (cid:2) Sie führen mit dem alternativen Schlüssel eine Abfrage über SELECT_BY_ATTRIBU- Das Modifizieren von Objekten geschieht im BOPF mit der Methode MODIFY des Ser- TES aus (siehe Abschnitt 5.1.1). vice-Managers. Mit dieser Methode können Sie Geschäftsobjekte anlegen, ändern (cid:2) Sie verwenden die Methode CONVERT_ALTERN_KEY des Service-Managers und und löschen. übergeben dort den alternativen Schlüssel. Zusätzlich wird zum Abschluss für all diese Modifikationen die Methode SAVE des Die Verwendung der Methode CONVERT_ALTERN_KEY ist denkbar einfach: Sie müs- Transaktions-Managers benötigt. Den Transaktions-Manager brauchen Sie in diesem sen in der internen Tabelle des Parameters IT_KEY die alternativen Schlüssel, im Fall, da Datenbankmodifikationen nicht direkt ausgeführt, sondern wie bei klassi- Parameter IV_NODE_KEY den entsprechenden Knoten und im Parameter IV_ALT- schen transaktionalen Funktionsbausteinen (BAPI-Funktionsbausteinen) in einer KEY_KEY den Namen des alternativen Schlüssels mitgeben. logischen Datenbankeinheit (LUW) gesammelt werden. Die Methode SAVE stößt zum Abschließen dieser Verarbeitung die Anweisung COMMIT WORK an und verarbeitet Auch wenn sich der Parameter IV_ALTKEY_KEY über Literale (durch die direkte die in der LUW gesammelten Datenbankoperationen. 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 Datenbanksperren des Knotens. Sperren werden durch den Aufruf der Methode MODIFY für die übergebenen Schlüs- In Listing 5.7 sehen Sie eine beispielhafte Implementierung der Methode, mit der für 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, den alternativen Schlüssel CUSTOMER_ID der Schlüssel der dazugehörigen Kno- kann die Freigabe mit der Methode CLEANUP erfolgen. Darüber können Sie auch teninstanz bestimmt wird. manuelle Sperren ohne eine Änderung durch die Methode MODIFY setzen. Diese DATA: lt_alt_keys TYPE TABLE OF /bobf/demo_customer_id, Vorgehensweise wird in Abschnitt 5.4 genauer beschrieben. ls_alt_keys TYPE /bobf/demo_customer_id, 122 123 5972.book Seite 124 Donnerstag, 30. November 2017 3:26 15 5972.book Seite 125 Donnerstag, 30. November 2017 3:26 15 5 Anwendung der Consumer-API 5.3 Modifizieren von Objekten Die entscheidende Tabelle beim Modifizieren mit der Methode MODIFY ist die Ta- IMPORTING et_message = lt_messages belle des Importparameters IT_MODIFCATION. Eine Zeile dieser Tabelle entspricht ). genau einer Modifikation. Für jede Zeile kann über das Feld CHANGE_MODE be- LOOP AT lt_messages ASSIGNING <s_message>. stimmt werden, welche Modifikation ausgeführt wird (also ob angelegt, geändert cl_demo_output=>write_data( <s_message>-message->get_text( ) oder gelöscht wird). Die Methode MODIFY ermöglicht daher die Ausführung mehre- ). rer Modifikationsoperationen gleichzeitig. Listing 5.8 zeigt die grundlegende Aufruf- ENDLOOP. 5 reihenfolge der Methode MODIFY. cl_demo_output=>display( ). "Beschaffen des Service-Managers ELSE. "bei erfolgreicher Ausführung speichern DATA: lo_serv_mgr TYPE REF TO /bobf/if_tra_service_manager. lo_trans_mgr->save( lo_mgr = /bobf/cl_tra_serv_mgr_factory=>get_service_manager( IMPORTING iv_bo_key = /bobf/if_demo_customer_c=>sc_bo_key ev_rejected = lv_rejected ). ). "Beschaffen des Transaktions-Managers "Falls Speichern erfolgreich, Ausgabe sonst Rollback DATA: lo_trans_mgr TYPE REF TO /bobf/if_tra_transaction_mgr. IF lv_rejected IS INITIAL. lo_trans_mgr = /bobf/cl_tra_trans_mgr_factory=> cl_demo_output=>display_text( 'Erfolg!' ). get_transaction_manager( ). ELSE. "Deklaration der benötigten Variablen lo_trans_mgr->cleanup( ). DATA: lt_modi TYPE /bobf/t_frw_modification, ENDIF. ls_modi TYPE /bobf/s_frw_modification, ENDIF. lo_message TYPE REF TO /bobf/if_frw_message, ENDIF. lt_messages TYPE /bobf/t_frw_message_k, Listing 5.8 Grundaufbau für die Methode MODIFY lv_rejected TYPE flag, lt_rejected_keys TYPE /bobf/t_frw_key2. Das Feld CHANGE_MODE können Sie mit folgenden Konstanten des Interface /BOBF/ FIELD-SYMBOLS: <s_message> TYPE /bobf/s_frw_message_k. IF_FRW_C belegen: "Hier unterschiedliches Befüllen der Tabelle LT_MODI je nachdem, (cid:2) /BOBF/IF_FRW_C=>SC_MODIFY_CREATE für Anlegen "ob Sie die das Geschäftsobjekt Anlegen, Ändern oder (cid:2) /BOBF/IF_FRW_C=>SC_MODIFY_UPDATE für Aktualisieren "Aktualisieren wollen (cid:2) /BOBF/IF_FRW_C=>SC_MODIFY_DELETE für Löschen ls_modi-... APPEND ls_modi TO lt_modi. Je nachdem, ob Sie anlegen, aktualisieren oder löschen wollen, müssen Sie die Zeilen- "Aufruf der Methode MODIFY und Übergabe der Modifikations-Tabelle felder der Tabelle IT_MODIFICATION unterschiedlich belegen. Einen Überblick über lo_serv_mgr->modify( die einzelnen Felder der Modifikationstabelle finden Sie in Tabelle 5.1. EXPORTING it_modification = lt_modi Feldname Beschreibung IMPORTING eo_message = lo_message NODE Name des zu modifizierenden Knotens ). CHANGE_MODE Art der Änderung "Überprüfung ob die Verarbeitung erfolgreich war IF lo_message IS BOUND. NODE_CAT Beim Anlegen: Knotenkategorie; wenn keine mitgegeben wird, wird IF lo_message->check( ) EQ abap_true. die Standardkategorie verwendet (obsolet, immer leer lassen). "Ausgabe der Nachrichten im Fehlerfall KEY Beim Anlegen: neu erzeugter Schlüssel des Knotens (mit GET_NEW_KEY) lo_message->get_messages( Tabelle 5.1 Die Felder der Modifikationsstruktur 124 125 5972.book Seite 126 Donnerstag, 30. November 2017 3:26 15 5972.book Seite 127 Donnerstag, 30. November 2017 3:26 15 5 Anwendung der Consumer-API 5.3 Modifizieren von Objekten "Erzeugung eines neuen technischen Schlüssels Feldname Beschreibung lr_cust_root->key = lo_serv_mgr->get_new_key( ). DATA Beim Anlegen und Aktualisieren: Daten des Knotens "oder über /bobf/cl_frw_factory=>get_new_key( ). CHANGED_FIELDS Beim Ändern: die geänderten Felder lr_cust_root->customer_id = '123459'. ASSOCIATION ID der Verknüpfung; zum Anlegen von Unterknoten lr_cust_root->sales_org = '200'. 5 lr_cust_root->cust_curr = 'US'. SOURCE_NODE eventuell referenzierter Oberknoten; zum Anlegen von Unterknoten lr_cust_root->address_contry = 'US'. SOURCE_KEY eventuell referenziertes Geschäftsobjekt; zum Anlegen von Unter- knoten ls_modi-data = lr_cust_root. "Befüllte Struktur ls_modi-node = /bobf/if_demo_customer_c=>sc_node-root. ROOT_KEY Optional beim Anlegen und Aktualisieren: Zu welchen ROOT-Knoten ls_modi-change_mode = /bobf/if_frw_c=>sc_modify_create. soll die Instanz gehören? ls_modi-key = lr_cust_root->key. Tabelle 5.1 Die Felder der Modifikationsstruktur (Forts.) APPEND ls_modi TO lt_modi. In den folgenden Abschnitten beschreiben wir diese Aspekte: lo_serv_mgr->modify( EXPORTING (cid:2) Anlegen von Hauptknoten it_modification = lt_modi (cid:2) Anlegen von Unterknoten IMPORTING (cid:2) Aktualisieren von Knoteninstanzen eo_message = lo_message (cid:2) Löschen von Knoteninstanzen ). Listing 5.9 Anlegen eines Hauptknotens 5.3.1 Anlegen von Hauptknoten Ob das Anlegen erfolgreich war, können Sie wie in Listing 5.8 über den Rückgabepara- Beim Anlegen von Hauptknoten müssen Sie die Felder KEY, DATA, NODE und natür- meter LO_MESSAGE ermitteln. Zusätzlich müssen Sie wie in Listing 5.8 die Methode lich CHANGE_MODE befüllen. Wichtig ist, dass Sie in der Struktur des Parameters SAVE aufrufen, um die Verbuchung anzustoßen. Erst dadurch werden die Daten auf DATA und im Parameter KEY einen neu generierten Schlüssel mitgeben, den Sie von der Datenbanktabelle erzeugt. 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 Standardwerte des gewünschten Knotens mitgeben. Das Feld ist hierbei vom Typ TYPE REF TO data. Für einen Knoten können über eine optionale Knotenklasse Standardwerte für die Daher müssen Sie die Struktur vorher ebenfalls über TYPE REF TO strukturname Anlage hinterlegt werden. Wie Sie die dazugehörigen Standardwerte auslesen, kön- deklarieren und über die Anweisung CREATE DATA erzeugen. Den Strukturnamen nen Sie in Abschnitt 5.5, »Standardwerte für Knoten auslesen«, nachlesen. 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. 5.3.2 Anlegen von Unterknoten "Deklaration der Variablen und Beschaffung des Service-Managers Das Anlegen für Unterknoten funktioniert analog zum Anlegen eines Hauptknotens, "und Transaktions-Managers wie in Listing 5.8 indem Sie im Feld NODE den Namen des gewünschten anzulegenden Knotens ange- DATA: lr_cust_root TYPE REF TO /bobf/s_demo_customer_hdr_k. ben. Zusätzlich müssen Sie noch im Feld SOURCE_NODE die ID des Oberknotens, im "Erzeugen der neuen Knoten-Struktur des Kunden-Kopfes Feld SOURCE_KEY den Schlüssel des Oberknotens und im Feld ASSOCIATION die CREATE DATA lr_cust_root. dazugehörige Assoziation vom Ober- zum Unterknoten angeben. Dadurch legen Sie letztlich auch immer eine Assoziationsverbindung mit an. 126 127 5972.book Seite 128 Donnerstag, 30. November 2017 3:26 15 5972.book Seite 129 Donnerstag, 30. November 2017 3:26 15 5 Anwendung der Consumer-API 5.3 Modifizieren von Objekten Diese Assoziationsverbindung können Sie im Konstanten-Interface des Geschäftsob- IMPORTING jekts unter der Konstante SC_ASSOCIATION, gefolgt von dem gewünschten Knoten, eo_message = lo_message finden. Das in diesem Abschnitt gezeigte Beispiel legt hierzu eine neue Instanz des ). Knotens ROOT_TEXT zum Oberknoten ROOT des Geschäftsobjekts /BOBF/DEMO_ Listing 5.10 Anlegen eines Unterknotens 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- Ob das Anlegen erfolgreich war, können Sie wie in Listing 5.8 mit dem Rückgabepara- 5 tenhierarchie des Geschäftsobjekts. 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 Abbildung 5.1 Knotenstruktur von /BOBF/DEMO_CUSTOMER CHANGED_FIELDS der Modifikationsstruktur angeben, welche Felder aus den im Feld DATA mitgegebenen Daten geändert werden sollen. Ohne diese Angabe können Da der Knoten ROOT_TEXT unter dem Knoten ROOT hängt, wird als SOURCE_KEY keine Attribute der Knoteninstanz aktualisiert werden. 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 Listing 5.11 zeigt hier beispielhaft das Aktualisieren der Attribute ADDRESS (Adresse) 123456 zugewiesen wird, wie es Listing 5.10 zeigt. 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 "Deklaration der Variablen und Beschaffung des Service-Managers und Kundenwährung auf initial gesetzt wird. Im Feld KEY ist ein beispielhafter Schlüssel "Transaktions-Managers wie in Listing 5.8 einer Knoteninstanz des Knotens ROOT angegeben. DATA 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. "Deklaration der Variablen und Beschaffung des Service- lr_cust_root_txt->key = lo_serv_mgr->get_new_key( ). Managers und Transaktions-Managers wie in Listing 5.8 lr_cust_root_txt->text = 'Beispiel-Text'. "Für die Angabe der geänderten Attribute lr_cust_root_txt->language = sy-langu. DATA: lt_changed_fields TYPE /bobf/t_frw_name. ls_modi-node = /bobf/if_demo_customer_c=>sc_node-root_text. DATA: lr_cust_root TYPE REF TO /bobf/s_demo_customer_hdr_k. ls_modi-change_mode = /bobf/if_frw_c=>sc_modify_create. "Erzeugen der neuen Knoten-Struktur als Datenobjekt ls_modi-source_node = /bobf/if_demo_customer_c=>sc_ CREATE DATA lr_cust_root. node-root. ls_modi-association = /bobf/if_demo_customer_c=>sc_ "Spezifizieren welche Felder geändert werden sollen association-root-root_text. APPEND 'ADDRESS' TO lt_changed_fields. ls_modi-source_key = lr_cust_root->key. "aus APPEND 'CUST_CURR' TO lt_changed_fields. ls_modi-key = lr_cust_root_txt->key. "Auch Angabe der Attribute über das Konstanten-Interface möglich: ls_modi-data = lr_cust_root_txt. "/bobf/if_demo_customer_c=>sc_query_attribute-root- APPEND ls_modi TO lt_modi. "select_by_attributes-cust_curr. lo_serv_mgr->modify( EXPORTING "Neue Werte setzen it_modification = lt_modi lr_cust_root->address = 'Mühlenstraße 5'. 128 129 5972.book Seite 130 Donnerstag, 30. November 2017 3:26 15 5972.book Seite 131 Donnerstag, 30. November 2017 3:26 15 5 Anwendung der Consumer-API 5.4 Sperren/Entsperren CLEAR lr_cust_root->cust_curr. "Deklaration der Variablen und Beschaffung des Service-Managers und Transaktions-Managers wie in Listing 5.8 ls_modi-data = lr_cust_root. "Befüllen der Modifikations-Tabelle ls_modi-node = /bobf/if_demo_customer_c=>sc_node-root. ls_modi-node = /bobf/if_demo_customer_c=>sc_node-root. ls_modi-change_mode = /bobf/if_frw_c=>sc_modify_update. ls_modi-change_mode = /bobf/if_frw_c=>sc_modify_delete. "Beispielhafter Schlüssel ls_modi-key = '0050568F72901ED79EA31FECBD8520FF'. "Beispiel 5 ls_modi-key = '0050568F72901ED79EA63B400C91A0FF'. APPEND ls_modi TO lt_modi. ls_modi-changed_fields = lt_changed_fields. APPEND ls_modi TO lt_modi. lo_serv_mgr->modify( EXPORTING lo_serv_mgr->modify( it_modification = lt_modi EXPORTING IMPORTING it_modification = lt_modi eo_message = lo_message IMPORTING ). eo_message = lo_message Listing 5.12 Löschen einer Knoteninstanz ). Listing 5.11 Aktualisieren von Attributen 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 Ob das Aktualisieren erfolgreich war, können Sie wie in Listing 5.8 über den Rückga- SAVE aufrufen, um die transaktionale Verarbeitung abzuschließen. Erst dadurch wer- beparameter LO_MESSAGE ermitteln. Zusätzlich müssen Sie wie in Listing 5.8 die den die Daten auf der Datenbanktabelle gelöscht. Methode SAVE aufrufen, um die transaktionale Verarbeitung abzuschließen. Erst dadurch werden die Daten auf der Datenbanktabelle aktualisiert. 5.4 Sperren/Entsperren 5.3.4 Löschen von Knoteninstanzen Sperren werden beim Bearbeiten der Geschäftsobjekte über die Methode MODIFY wie Zum Löschen von Knoteninstanzen müssen Sie bei der Methode MODIFY lediglich in Abschnitt 5.3 beschrieben automatisch gesetzt. Dabei handelt es sich prinzipiell den Knotennamen im Feld NODE, den Ändern-Modus SC_MODIFY_DELETE im Feld um exklusive Sperren. Das bedeutet, dass nur genau ein Benutzer das gesperrte CHANGE_MODE und den Schlüssel des zu löschenden Knotens im Feld KEY der Ände- Geschäftsobjekt (bzw. dessen gesperrte Knoteninstanzen) bearbeiten darf und alle rungsstruktur angeben. Unterknoten können Sie auf dieselbe Art und Weise löschen. anderen Änderungsanfragen abgewiesen werden. Beim Speichern (Methode SAVE) Geben Sie dazu bei NODE den Namen des Unterknotens und im Feld KEY den Schlüs- oder Zurücksetzen der Daten (Methode CLEANUP) mit dem Transaktionsmanager sel des zu löschenden Unterknotens an. 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. Löschen eines gesamten Geschäftsobjekts In bestimmten Fällen kann es dennoch vorkommen, dass Sie eine Sperre setzen Wenn Sie die Instanz eines Hauptknotens (ROOT) eines Geschäftsobjekts löschen, wollen, ohne direkt eine Änderung mit der Methode MODIFY durchzuführen. Bei- werden alle dazugehörigen Unterknoten mit gelöscht. spielsweise wollen Sie ein Geschäftsobjekt bereits sperren, wenn der Benutzer Ihr Programm (bzw. die dazugehörige Transaktion) im Bearbeitungsmodus aufruft. Viel- In Listing 5.12 können Sie das Löschen einer Knoteninstanz des Knotens ROOT des leicht wollen Sie aber auch mehrere Instanzen eines Geschäftsobjekts in einer Liste Geschäftsobjekts /BOBF/DEMO_CUSTOMER sehen. Im Feld KEY ist ein beispielhafter anbieten, und erst der Benutzer entscheidet nach der Auswahl, welche Instanz er Schlüssel einer Knoteninstanz des Knotens ROOT angegeben. 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 130 131

See more

The list of books you might like