Skip to Content
Technical Articles
Author's profile photo Birzhan Moldabayev


Small BOPF objects editor.

There are several good BOPF related articles and books of James Wood’s Working with the BOPF API BOPF: Business Object Development & Paul Hardy’s ABAP to the Future (BOPF chapter)

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.)


Insert button is deactivated

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.

    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


Deliver action’s screen


& dynamic selection screens in Z_BOPF_TEST_UI program.


Selction screen for /BOBF/DEMO_SALES_ORDER

Installation process:

Before zbobt via abapGit you have to install eui library (it contains some UI classes mentioned earlier).


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

Assigned Tags

      You must be Logged on to comment or reply to a post.
      Author's profile photo Shai Sinai
      Shai Sinai

      Thanks for sharing. Looks interesting.

      Isn't BOPF dead? 🙂

      Author's profile photo Birzhan Moldabayev
      Birzhan Moldabayev
      Blog Post Author

      What is dead may never die)

      There are still a lot of relatively old systems. Recently I heard a question about 6.40 system.

      Thankfully BOPF available since 7.40(or so) and I didn't force myself to use old ABAP syntax




      Author's profile photo Jelena Perfiljeva
      Jelena Perfiljeva

      Neat, thanks for sharing!

      Obligatory "tsk, tsk" on using Hungarian notation (lt_... etc.). 🙂 We should use Clean ABAP more.

      Thank you!