cancel
Showing results for 
Search instead for 
Did you mean: 

Add Childelements to Accordion_Item dynamically

Former Member
0 Kudos

I have a webdynpro application in which I add an Accordion with some Accordion Items dynamically.


Now I want to add an inputfield and a caption (several/more than one ui-elements) to an Accordion Item.

The problem is, that I only found the method set_content. (This method can only add one item)

data: lr_acc_item TYPE REF TO CL_WD_ACCORDION_ITEM.

CALL METHOD cl_wd_caption=>new_caption
      EXPORTING
        text    = wa_txt
      RECEIVING
        control = lr_caption.

CALL METHOD lr_acc_item->SET_CONTENT
    EXPORTING
      the_content = lr_caption.

With this code, I have the caption in the accordion_item.

I tried to add a transparent controller, which contains my elements, with the method set_content but without success. (Error message)

Accepted Solutions (1)

Accepted Solutions (1)

former_member184578
Active Contributor
0 Kudos

Hi,

You can add Transparent Container to Accordion Item and add multiple UI elements in Transparent Container.

I jus tried and here is the sample code: Write the below code in domodifyview method.


METHOD wddomodifyview .

   DATA lr_accordion_item TYPE REF TO cl_wd_accordion_item.

   DATA: lr_accordion TYPE REF TO cl_wd_accordion.

   DATA: lr_root       TYPE REF TO cl_wd_uielement_container,

         lr_tcontainer TYPE REF TO cl_wd_transparent_container.

   DATA: input_field TYPE REF TO cl_wd_input_field,

         input_field1 TYPE REF TO cl_wd_input_field,

         flow_data TYPE REF TO cl_wd_flow_data.


*Get Root Container

   lr_root ?= view->get_root_element( ).

*Create Accordion

   lr_accordion =   cl_wd_accordion=>new_accordion(

                            id    = 'AC'   " dummy test ID; use meaningful ID

                            view  = view        ).

*Create Accordian Item

   lr_accordion_item = cl_wd_accordion_item=>new_accordion_itemid 'AI'

                                                               title         = 'AccordionItem'

                                                               tooltip       = 'Tooltip AccordionItem 1' ) .

* Create Transparent Container

   lr_tcontainer = cl_wd_transparent_container=>new_transparent_container( ).

* Create flow data to TC

   cl_wd_flow_data=>new_flow_data( lr_tcontainer ).

   cl_wd_flow_layout=>new_flow_layout( lr_tcontainer ).


*Create 2 input fields

   input_field = cl_wd_input_field=>new_input_field(

                 bind_value = 'TEXT1' )" TEXT1 is the attribute name in context

   input_field1 = cl_wd_input_field=>new_input_field(

                 bind_value = 'TEXT2' ).

* Set flow data to input fields

   flow_data = cl_wd_flow_data=>new_flow_data( input_field ).

   input_field->set_layout_data( flow_data ).

   flow_data = cl_wd_flow_data=>new_flow_data( input_field1 ).

   input_field1->set_layout_data( flow_data ).

*Add 2 input fields to Transparent Container

   lr_tcontainer->add_child( input_field ).

   lr_tcontainer->add_child( input_field1 ).

*Set Transparent Container to Accordion Item

   lr_accordion_item->set_contentlr_tcontainer ).

* Add Accordion item to Accordion.

   lr_accordion->add_item( lr_accordion_item ).

*Set Flow layout to Accordion

   flow_data = cl_wd_flow_data=>new_flow_data( lr_accordion ).

   lr_accordion->set_layout_data( flow_data ).

*Now add Accordion to Root Container

   lr_root->add_child( lr_accordion ).

ENDMETHOD.

Hope this helps u.,

Regards,

Kiran

Former Member
0 Kudos

Thanks for your answer.

I tried it with your code.

Now it works, but I have one problem.

You use the flow layout.

Can I set the height of the accordion? Because now it is endless height. (Look at the screens)


When I use the matrix layout, then it is ok.

(But I don´t know, how to put a new line in matrix layout)

Rudy_Clement1
Participant
0 Kudos

Hi Alexander!

I think you can do the same as Kiran proposes. Just replace the calls to:

CL_WD_FLOW_DATA=>NEW_FLOW_DATA( ).

with

CL_WD_MATRIX_DATA=>NEW_MATRIX_DATA( ) or CL_WD_MATRIX_HEAD_DATA=>NEW_MATRIX_HEAD_DATA( ).

CL_WD_FLOW_LAYOUT=>NEW_FLOW_LAYOUT( ).

with

CL_WD_MATRIX_LAYOUT=>NEW_MATRIX_LAYOUT( ).

And replace the object

FLOW_DATA TYPE REF TO CL_WD_FLOW_DATA

with

MATRIX_DATA TYPE REF TO CL_WD_MATRIX_DATA or

MATRIX_HEAD_DATA TYPE REF TO CL_WD_MATRIX_HEAD_DATA.

Kind regards,

Rudy.

Answers (0)