cancel
Showing results for 
Search instead for 
Did you mean: 

Dynamic programming - dynamic creation of a toolbar within a tray

matteo_montalto
Contributor
0 Kudos

Hi experts,

please forgive the nooby question but cannot find any reference to the task on the SCN.

Shortly; I used to manage dynamic creation of UIElements in WDDOMODIFYVIEW method of a view. In particular, we created a Tray object in this way:

- in "layout" section we created a Transparent container, which is further split into two subContainers (left & right) in order to manage contents on two columns.

- in WDDOMODIFYVIEW, we used this sketch of code:

* Create Tray

       lr_context_elem   wd_context->get_element( ).

       lo_container_root ?=  view->get_root_element( ).

*Creation of the Dynamic TRAY

       create object lo_tray

         exporting

           iv_title           = lv_tray_text

           iv_component_id    = lc_container_bd_cuf "that's the name of the TransparentContainer defined above

           ir_rootuielement   = lo_container_root

           ir_context_element = lr_context_elem

           iv_type            = /sapsrm/ch_wd_ui_elements=>switch_tray

           iv_max_action      = lc_maximize_bd

           iv_min_action      = lc_minimize_bd

           iv_toggle_action   = lc_toggle_bd.

       wd_this->mr_tray_cuf_bd = lo_tray.

Now, my requirement is to add a simple toolbar to the tray. This toolbar should be "binded" to the tray itself and will contain two buttons (say, "Edit" and "Save"). This could be a straightforward task if done in Layout section as a static design operation, but creating and adding a toolbar in dynamic programming is a bit more challenging.

Could anyone help me with suggestions/code examples ?

Thanks you in advance.

Accepted Solutions (0)

Answers (1)

Answers (1)

matteo_montalto
Contributor
0 Kudos

Ok, I'm stucked as per my requirement, I should create a toolbar with two buttons and bind them to the tray.

Creating a toolbar with two buttons seems to be quite straightforward.

DATA: bd_toolbar TYPE REF TO CL_WD_TOOLBAR,

             bd_toolbutton_edit TYPE REF TO cl_wd_toolbar_button,

             bd_toolbutton_save TYPE REF TO cl_wd_toolbar_button.

        bd_toolbar cl_wd_toolbar=>new_toolbar( ).

        bd_toolbutton_edit = cl_wd_toolbar_button=>new_toolbar_button( text = 'EDIT' on_action = 'EDIT_BD' ).

        bd_toolbutton_save = cl_wd_toolbar_button=>new_toolbar_button( text = 'SAVE' on_action = 'SAVE_BD' ).

        bd_toolbar->add_toolbar_item( bd_toolbutton_edit ).

        bd_toolbar->add_toolbar_item( bd_toolbutton_save ).

Now the problem is: how to bind the toolbar to the tray?

It seems quite easy as the class CL_WD_TRAY offers a method, SET_TOOLBAR.

Unfortunately, as far as I can see, the existing code (posted above) creates an object LO_TRAY which is declared as:

data : lo_tray                 type ref to /sapsrm/ch_wd_ui_elements.

The class /SAPSRM/CH_WD_UI_ELEMENTS does not offer any method to attach a toolbar and casting explictly (my_tray ?= lo_tray) results in a runtime dump.

Do you have any suggestions on the task?

Thanks

Former Member
0 Kudos

You must be doing something wrong since it is definitely possible to dynamically add a toolbar to a tray. See method CREATE_SETTINGS_TRAY of ABAP class CL_WDR_ALL_IN_ONE_UIELEM. You can use the WDA test component WDR_TEST_UI_ELEMENTS to test and even place an external break point in the mentioned method to see yourself.

matteo_montalto
Contributor
0 Kudos

Thanks Samuli,

I solved by adding the Toolbar in the right placement into a TransparentContainer which contains also the Tray.
I did it via dynamic programming and the solution seems to fit my requirement.

Thanks again for the support!