Small BOPF objects editor.
After reading them, I decided to do something with moderate complexity & desirably practical in the same time. Since in the standard BOBT (or /BOBF/TEST_UI) transaction I didn’t find some functionality.
Creating delegated nodes was one of those. (You just can choose existing CUSTOMER & PRODUCT by search helps.)
It seemed to me creating own analogue of Z* BOBT transaction was good candidate to learn BOPF framework.
Long story short let me show you the the final result of several weeks of development.
For navigation purpose instead of tree a tree control in BOBT transaction, ZBOBT uses hotspot links in ALV for nodes and subnodes. Sometimes it looks like Russian nesting dolls but allows to concentrate your attention to one thing at a time without jumping back and forth by TREE control. Probably some of readers disagree with the privous statement that’s why let’s jump to discussion of wrapper classes.
The main warpper class is ZCL_BOPF_MANAGER
I hope most of the methods are self explanatory. The difference between *_ROW & *_TAB methods that *_TAB returns reference to entire table.
mo_manager = zcl_bopf_manager=>create( '/BOBF/DEMO_SALES_ORDER' ).
To get instance of class just pass BOPF name to CREATE method. After that you can omit a node key to retrieve data.
" SELECT_ALL without passing VALUE /BOBF/T_FRW_QUERY_SELPARAM( ) DATA(lt_key) = lo_manager->query_tab( ). " Retrieve data. Uses ROOT node by default DATA(lr_rows) = lo_manager->retrieve_tab( it_key = lt_key ). ... " Cast the result to specific type DATA(lt_items) = CAST /bobf/t_demo_sales_order_itm_k( mo_manager->retrieve_by_assoc_tab( iv_key = lv_key iv_assoc_type = /bobf/if_demo_sales_order_c=>sc_association-root-item ) ).
The second class that helps MANAGER class to create dynamic data structures is ZCL_BOPF_METADATA. It wraps /BOBF/IF_FRW_CONFIGURATION interface and has 2 public methods
Both of them creates ROW (ER_DATA) or TABLE (ER_DATA_TBLE) based on BOPF metadata
If something gets wrong BOPF produces a lot of errors. To handle them ZCL_BOPF_MESSAGES class was created.
it can store messages from table (BAPIRET2_TAB), bopf message (/BOBF/IF_FRW_MESSAGE) or transactional changes (after calling /BOBF/IF_TRA_SERVICE_MANAGER->MODIFY( ) method)
CHECK NEW zcl_bopf_messages( iv_severity = 'AXE' )->add_from_message( lo_message )->show( ) <> abap_true.
it uses ZCL_EUI_LOGGER class to tackle with messages.
and finally ZCL_BOPF_UI_NODE class uses ZCL_EUI_ALV class to show root or sub nodes level items
Also ZCL_EUI_SCREEN class is used for actions’ parameters
& dynamic selection screens in Z_BOPF_TEST_UI program.
I personally tested zbobt with /BOBF/DEMO_SALES_ORDER andZ_MONSTER (ABAP to the Future) BOPF objects.
I know about Web Dynpr, FPM & FBI. But I’ve just created the zbopt repository for self education purpose. Maybe ZCL_BOPF_MANAGER & ZCL_BOPF_METADATA classes will be helpful for me in the future projects