ABAP - BOPF Manager
BOPF provides so-called managers, which you need for working with BOPF. We'll show you what they can and what they do.
As you've seen in recent BOPF articles, we've already used a few managers for outside access who have done various things for us. Today we want to show you what it is all about and for what you need which manager.
The managers are used to manage the object and the data streams within the processing in the BOPF. For a brief explanation, the following graphic illustrates the scenario:
Created with draw.io
The transaction includes all the actions and changes that are to be performed on a BOPF model and can be thought of as a flow, in which individual actions are repeatedly carried out. For this the managers are needed.
Monitors and collects all changes to the model and forms a LUW to keep the data consistent. The manager takes care of the entire transaction and at the end writes the data back to the database. That's why he's the staple on everything.
Always created for a specific BOPF model so the manager knows what data he manages. Provides actions to change the data, perform actions on the model, read and validate data. The actions of the manager are always on their own.
Only affected by the service manager and unable to communicate with another service layer of another manager. After the action has been taken, processing returns to the transaction layer.
In this specific case, you can read data only with the help of a service manager, but you need the transaction manager as soon as the data is to be changed concretely.
In the variant without transaction manager, the data is read by filter and via the QUERY method. As a result you get a table with the affected keys and can then use the RETRIEVE method to read in the data in the appropriate structure:
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 ).
In the variant with transaction manager, a table with changes is created (a contract with a rule) and changed by the MODIFY method. If there are no problems and errors, the transaction manager can take over the data and create it in the tables. In the case of an error, the CLEANUP method is called, which rolls back the steps since the last save.
DATA: lt_mod TYPE /bobf/t_frw_modification. DATA(ld_key) = /bobf/cl_frw_factory=>get_new_key( ). " Contract data 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. " Rules 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.
The various managers and concepts are a central component of BOPF. Actions and changes to the data model should only be performed with their help, as this is the only way to preserve consistency within the data. In addition, the managers take a lot of work off of managing all the changes.