이글은 아래 링크의 원본 글에 대한 한글 번역 입니다

https://blogs.sap.com/2015/04/01/how-to-read-the-data-from-a-filtered-table-in-sap-web-dynpro-abap/

 

 

Ramakrishnappa Gangappa

웹딘프로아밥 테이블 필터링 적용된 데이터만 가져오는 방법

Posted by Ramakrishnappa Gangappa in Web Dynpro ABAP on Apr 1, 2015 6:26:04 AM

 

웹딘프로아밥 테이블 필터링 적용된 데이터만 가져오는 스탠다드 메소드인 인터페이스 IF_WD_TABLE_METHOD_HNDL 의 GET_TABLE_DATA 에 해당하는 코드를 공유합니다.

 

SCN 커뮤니티 게시판에서 필터링 적용된 테이블 데이터를 가져오는 방법을 질문하는 글에 제대로된 답변이 없는 경우를 많이 보았습니다. 답은 정해져 있죠. 스탠다드 메소드인 인터페이스 IF_WD_TABLE_METHOD_HNDL 의 GET_TABLE_DATA를 사용하면 되는데 이게 시스템에 없는 경우가 있습니다. 아마도 GET_TABLE_DATA 메소드는 서버 버전이 SAP_ABA 731 이후 부터 사용가능 한것으로 보입니다.

 

그래서, 필터링 적용된 테이블 데이터를 가져오는 방법을 서버 버전에 상관없이 모두가 사용할 수 있도록 아래 로직을 만들었습니다.


 

선행 조건:

Webdynpro ABAP,& OO ABAP 에 대한 기본 지식이 필요합니다.

 

 

아래 메소드를 만들어 주세요.

 

 

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.

 

컴포넌트 컨트롤러에 위 메소드 GET_TABLE_DATA 를 만들었다고 가정하겠습니다.

 

아래 사용방법에 따라 실행하면 필터링 적용된 데이터를 읽을 수 있습니다.

 

사용방법:

  • 뷰의 어트리뷰트 탭으로 이동 하여 GO_TBL of type ref to CL_WD_TABLE를 추가 합니다.
  • 메소드 WDDOMODIFYVIEW( ) 로 이동 하여  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.
 
  • 이제, 필터링 적용된 데이터를 읽기 위해 아래 코드를 사용합니다.
       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 ).
  •  

읽어 주셔서 감사합니다. 이글이 도움이 되었으면 좋겠습니다.

 

관심/ 댓글/ 추천 은 항상 감사합니다.

 

끝.

 

이글은 아래 링크의 원본 글에 대한 한글 번역 입니다

https://blogs.sap.com/2015/04/01/how-to-read-the-data-from-a-filtered-table-in-sap-web-dynpro-abap/

 

 

+ Recent posts