Hi welcome !!!

I would like to share the code/logic of method GET_TABLE_DATA of interface IF_WD_TABLE_METHOD_HNDL which helps to read the data from a filtered Table in Web Dynpro ABAP.

I have come across few SCN threads where in the requirement for reading filtered table data is left unanswered, as the method GET_TABLE_DATA( ) is not available in interface IF_WD_TABLE_METHOD_HNDL in their systems. I think the method GET_TABLE_DATA is available from SAP_ABA 731.

So, it might be useful if the logic to read the data from a filtered table is available for all.


Pre-requisite:

Basic knowledge of Webdynpro ABAP,& OO ABAP

Create below method.

GET_TABLE_DATA( )

Parameters:

IO_TBL Importing type ref to CL_WD_TABLE
RT_DATA Returning WDR_TABLE_ROW_DATA_TAB



METHOD get_table_data .

 


DATA elements         TYPE wdr_context_element_set.
  DATA element          TYPE REF TO if_wd_context_element.
  DATA row_data         TYPE wdr_table_row_data.
  DATA last_row_index   TYPE i.
  DATA first_row_index  TYPE i.
  DATA wd_row_arrangement_type_id TYPE guid.
  DATA wd_row_arrangement         TYPE REF TO cl_wd_view_element.
  DATA first_actual_row TYPE i.
  DATA fixed_row_count  TYPE i.
  DATA data_source      TYPE REF TO if_wd_context_node.
  DATA row_count        TYPE i.
  DATA selected_elements TYPE wdr_context_element_set.
  DATA first_row        TYPE i.
  DATA last_row        TYPE i value -1.
  CONSTANTS c_none TYPE guid VALUE ''.
  CLEAR rt_data.
  CLEAR selected_elements.
  row_count = 0.
  IF data_source IS NOT BOUND.
    data_source = io_tbl->get_data_source( ).
  ENDIF.
  wd_row_arrangement ?= io_tbl->get_row_arrangement( ).
  IF wd_row_arrangement IS NOT BOUND.
    wd_row_arrangement = io_tbl->get_master_column( ).
  ENDIF.
  IF wd_row_arrangement IS BOUND.
    wd_row_arrangement_type_id = wd_row_arrangement->_cid.
  ENDIF.
  fixed_row_count = io_tbl->get_row_count( ).
  first_actual_row = io_tbl->get_first_actual_row( ).
  CASE wd_row_arrangement_type_id.
    WHEN c_none.
      selected_elements = data_source->get_selected_elements( ).
      IF fixed_row_count = -1.
        row_count = data_source->get_element_count( ) +
first_actual_row.
      ELSE.
        row_count = fixed_row_count.
      ENDIF.
      first_row_index = first_row - first_actual_row.
      IF last_row = -1 OR
         last_row > row_count.
        last_row_index = row_count - first_actual_row.
      ELSE.
        last_row_index = last_row - first_actual_row.
      ENDIF.
      IF last_row_index >= first_row_index.
        elements = data_source->get_elements( from = first_row_index
to = last_row_index ).
      ENDIF.
      LOOP AT elements INTO element.
        row_data-context_element = element.
        row_data-level           = 0.
        INSERT row_data INTO TABLE rt_data.
      ENDLOOP.
  ENDCASE.







ENDMETHOD.

Let us say, we have created the above method GET_TABLE_DATA in component controller of WD component.

Please refer to the below steps to read data from a filtered table

Steps:

  • Go to attributes tab of view and create an view attribute GO_TBL of type ref to CL_WD_TABLE
  • Go to method WDDOMODIFYVIEW( ) and write the below logic to get the reference of table ui element MY_TABLE

METHOD wddomodifyview .
           IF first_time = abap_true.
               "Note: my_table is the ui name of table in view layout
               wd_this->go_tbl ?= view->get_element( 'MY_TABLE' ).
           ENDIF.
ENDMETHOD.






  • Now, to read data from filtered table, use the below code

   data lt_data type WDR_TABLE_ROW_DATA_TAB.
   
            wd_comp_controller->get_table_data(
                    exporting
                         io_tbl = wd_this->go_tbl
                    receiving
                         rt_data = lt_data ).






Thank you for your time and hope content of this blog was helpful.

Your comments / Feedback / suggestions are highly appreciable & always welcome 🙂 🙂 🙂

To report this post you need to login first.

7 Comments

You must be Logged on to comment or reply to a post.

  1. Rohith Brungi

    Hi Ramakrishna,

      Can u upload the screenshots for the same process.As I am new to WebDynpro,and my requirement seems similar to the same you posted which will be a great help for me.

    Thanks In Advance.

    (0) 

Leave a Reply