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

ABAP - BOPF Manager

BOPF stellt sogenannte Manager zur Verfügung, die du für das Arbeiten mit BOPF benötigst. Wir zeigen dir heute was sie tun und können.

Werbung

Wie du bereits in den letzten BOPF Artikeln sehen konntest, haben wir für die Zugriffe von Außen bereits einige Manager verwendet, die für uns verschiedene Dinge erledigt haben. Heute möchten wir dir zeigen, was es damit auf sich hat und wofür man welchen Manager benötigt.

 

Funktionsweise

Die Manager dienen zur Verwaltung des Objekts und der Datenströme innerhalb der Verabeitung im BOPF. Zur kurzen Erklärung gibt es die folgende Grafik die das Szenario veranschaulicht:

 

Erstellt mit draw.io

 

Die Transaktion umfasst alle Aktionen und Änderungen die auf einem BOPF Modell durchgeführt werden sollen und kann sich als Fluss vorgestellt werden, bei dem immer wieder einzelne Aktionen durchgeführt werden. Dafür werden die Manager gebraucht.

 

Transaktionsmanager

Überwacht und sammelt alle Änderungen am Modell und bildet eine logische LUW, um die Daten konsistent zusammenzuhalten. Der Manager kümmert sich um die gesamte Transaktion und schreibt am Ende die Daten wieder zurück auf die Datenbank. Deshalb bildet er die Klammer über allem.

 

Servicemanager

Wird immer für ein spezifisches BOPF Modell erzeugt, damit der Manager weiß, welche Daten er verwaltet. Bietet Aktionen zur Anpassung der Daten, Ausführung von Aktionen auf dem Modell, liest und validiert Daten. Die Aktionen des Managers stehen immer für sich allein.

 

Serviceschicht

Wird nur durch den Servicemanager beeinflusst und kann nicht mit einer anderen Serviceschicht eines anderen Managers kommunizieren. Nach erfolgten Aktion, geht die Verarbeitung wieder zurück zur Transaktionsschicht.

 

Beispiel

Im konkreten Fall kannst du also Daten lesen nur mit Hilfe eines Servicemanagers, benötigst aber den Transaktionsmanager, sobald die Daten auch konkret verändert werden sollen.

Bei der Variante ohne Transaktionsmanager werden die Daten per Filter und über die QUERY Methode gelesen. Als Ergebnis erhältst du eine Tabelle mit den betroffenen Schlüsseln und kannst über die RETRIEVE Methode dann die Daten in der passenden Struktur einlesen:


DATA:
  lt_sel       TYPE /bobf/t_frw_query_selparam,
  lt_contracts TYPE ztest_t_contract.

DATA(lo_smgr) = /bobf/cl_tra_serv_mgr_factory=>get_service_manager( zif_tst_bopf_c=>sc_bo_key ).

INSERT VALUE #(
  attribute_name  = 'CREDITOR'
  sign            = 'I'
  option          = 'EQ'
  low             = '0000123456'
) INTO TABLE lt_sel.

lo_smgr->query(
  EXPORTING
    iv_query_key            = zif_tst_bopf_c=>sc_query-contract-select_by_elements
    it_selection_parameters = lt_sel
  IMPORTING
    et_key                  = DATA(lt_key)
).

lo_smgr->retrieve(
  EXPORTING
    iv_node_key             = zif_tst_bopf_c=>sc_node-contract
    it_key                  = lt_key
  IMPORTING
    et_data                 = lt_contracts
).

 

Bei der Variante mit Transaktionsmanager wird eine Tabelle mit Änderungen erstellt (ein Vertrag mit einer Regel) und per MODIFY Methode übernommen. Wenn es keine Probleme gibt, dann kann der Transaktionsmanager die Daten übernehmen und in den Tabellen anlegen. Im Fehlerfall wird die CLEANUP Methode aufgerufen, die die Schritte seit dem letzten Sichern zurückrollt.


DATA:
  lt_mod TYPE /bobf/t_frw_modification.

DATA(ld_key) = /bobf/cl_frw_factory=>get_new_key( ).

" Vertragsdaten
DATA(ls_contract) = VALUE ztest_s_contract(
  contract_id   = '910'
  creditor      = '0000123456'
  creation_date = '20191101'
).

INSERT VALUE #(
  node        = zif_tst_bopf_c=>sc_node-contract
  change_mode = /bobf/if_frw_c=>sc_modify_create
  data        = REF #( ls_contract )
  key         = ld_key
) INTO TABLE lt_mod.

" Regeln
DATA(ls_rule) = VALUE ztest_s_rules(
  lnumber     = 1
  langu       = 'D'
  description = 'One rule for all'
).

INSERT VALUE #(
  node        = zif_tst_bopf_c=>sc_node-rules
  change_mode = /bobf/if_frw_c=>sc_modify_create
  data        = REF #( ls_rule )
  association = zif_tst_bopf_c=>sc_association-rules-to_parent
  source_node = zif_tst_bopf_c=>sc_node-contract
  source_key  = ld_key
) INTO TABLE lt_mod.

DATA(lo_tmgr) = /bobf/cl_tra_trans_mgr_factory=>get_transaction_manager( ).
DATA(lo_smgr) = /bobf/cl_tra_serv_mgr_factory=>get_service_manager( zif_tst_bopf_c=>sc_bo_key ).

lo_smgr->modify(
  EXPORTING
    it_modification = lt_mod
  IMPORTING
    eo_change       = DATA(lo_change)
    eo_message      = DATA(lo_msg)
).

IF lo_msg->check( ) = abap_false.
  lo_tmgr->save(
    IMPORTING
      ev_rejected         = DATA(ld_reject)
      et_rejecting_bo_key = DATA(lt_keys)
  ).
ENDIF.

IF ld_reject = abap_true.
  lo_tmgr->cleanup( ).
ENDIF.

 

Fazit

Die verschiedenen Manager und Konzepte sind zentraler Bestandteil des BOPF. Aktionen und Änderungen auf dem Datenmodell sollten nur mit ihrer Hilfe durchgeführt werden, da nur so die Konsistenz innerhalb der Daten bewahrt werden kann. Außerdem nehmen die Manager dir einiges an Arbeit ab bei der Verwaltung aller Änderungen.


Enthaltene Themen:
BOPFManagerTransaktion
Kommentare (0)
Werbung

ABAP - BOPF Quick Guide (Update)

Kategorie - ABAP

Ein kleiner Update zu unserem Buch das wir veröffentlicht haben. Für alle Menschen, die das papierlose Büro langweilig finden.

23.10.2020

ABAP - BOPF Quick Guide

Kategorie - ABAP

Du benötigst einen Schnelleinstieg in das Business Object Processing Framework (BOPF) der SAP, wir haben hier den richtigen Guide für dich.

11.09.2020

ABAP - BOPF Eclipse

Kategorie - ABAP

Kann man BOPF auch in Eclipse entwickeln? Hier zeigen wir dir, wie gut die Suche und Navigation im System läuft.

20.03.2020

ABAP - BOPF Performance

Kategorie - ABAP

Wie sieht es eigentlich mit der Performance bei Zugriffen auf BOPF aus? Dieser Frage wollen wir heute nachgehen.

13.03.2020

ABAP - BOPF Hilfsmethoden

Kategorie - ABAP

Das Framework stellt dir verschiedene Methoden und Objekte zur Verfügung, die die Benutzung vereinfachen sollen.

21.02.2020