사용 예:

cl_wd_table_column=>e_cell_design-criticalvalue_light

 

타입:

WDUI_TABLE_CELL_DESIGN

 

출처: 

http://help.sap.com/saphelp_nw70ehp1/helpdata/en/45/0ef14d9d942462e10000000a1553f7/content.htm

 

 

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

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/

 

 

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

http://www.saptechnical.com/Tutorials/WebDynproABAP/Sort/tablecolumn.htm

 

 

웹딘프로아밥 테이블 정렬(소트) 구현방법

By Swarna Ramya R, Wipro

 

목표: 

 

복잡하지 않은 다소 간소한 테이블 데이터를 표시할때 ALV 보다는 테이블 UI 엘리먼트를 사용하는 것이 편하고 익숙합니다. 때로는 다수의 숫자 컬럼을 가지는 테이블이 있기도 합니다. 데이터를 더 수월하게 확인하기 위해, 고객들은 컬럼단위로 정렬 기능을 사용하기를 원합니다. 언듯 생각하면 정렬을 구현하는 게 복잡한 작업으로 생각될 수 있지만, 웹딘프로아밥에서는 쉽게 정렬을 구현할 수 있도록 테이블 핸들러에서 기능을 제공합니다.

 

 

진행 순서: 

 

1. 웹딘프로아밥 컴포넌트를 만듭니다. 이름: ZWA_TABLE_SORT. 

 

2. 뷰의 레이아웃탭에서, ROOTUIELEMENTCONTAINER 을 선택하고 마우스 오른쪽 버튼을 누른후 Insert Element 합니다. 그러면 엘리먼트 생성을 위한 팝업 창이 열립니다.

 

3. ID에 Table 을 입력하고 Type은 Table을 선택합니다. 엔터키를 누릅니다.

 

 

4. 컨텍스트 탭으로 이동하여 CONTEXT에서 마우스 오른쪽 버튼을 누르고 Create à Node 를 선택합니다. 

 

5. Node Name 에는 MARA를, Dictionary Structure 에는 MARA를, Cardinality 에는 0..n을 선택하고 하단에 버튼중에  ‘Add Attribute from Structure ‘ 버튼을 누릅니다. 

 

 

6. 사용할 필드로 MATNR, MTART, MATKL, MEINS 를 선택하고 엔터를 누릅니다. 

 

 

7. 레이아웃탭에서 TABLE 아래 CAPTION의 속성중 text에 Material Details라고 입력합니다.

 

 

8. TABLE에서 마우스 오른쪽 버튼을 누르고 Create Binding을 선택합니다. 이제 컨텍스트를 바인딩할 수 있는 팝업 창이 뜹니다.

 

9. Context 버튼을 누르면 컨텍스트를 선택할 수 있는 팝업 창이 뜹니다.

 

10. MARA 노드를 선택하고  엔터키를 누릅니다.

  

 

11. 선택한 노드 아래에 있는 모든 어트리뷰트가 목록으로 표시됩니다. 이제 엔터키를 누릅니다.

 

 

12. 어트리뷰트 탭으로 이동하여, TABLE_CONTROL 레퍼런스 타입 IF_WD_TABLE_METHOD_HNDL 을 추가 합니다.

 

 

13. 레이아웃탭의 TABLE의 속성 중 onSort 이벤트 옆에 바인딩쪽에 있는 생성 버튼을 누릅니다. 팝업창에 Action Name 은 ON_TEST_SORT 을 입력하고 엔터키를 누릅니다.

 

 

14. 메소드 탭으로 이동합니다.

 

 

15. 아래 코드를 각각의 메소드에 입력합니다.

WDDOINIT:
method WDDOINIT .
  data LO_ND_MARA type ref to IF_WD_CONTEXT_NODE.
 data LO_EL_MARA type ref to IF_WD_CONTEXT_ELEMENT.
 data LT_MARA type WD_THIS->ELEMENTS_MARA.
 data LS_MARA type WD_THIS->ELEMENT_MARA.
* navigate from  to  via lead selection
 LO_ND_MARA = WD_CONTEXT->GET_CHILD_NODE( NAME = WD_THIS->WDCTX_MARA ).
  SELECT MATNR MTART MATKL MEINS FROM MARA INTO CORRESPONDING FIELDS OF
        TABLE LT_MARA UP TO 10 ROWS WHERE MATNR LIKE 'A%'.
* Bind Table
 LO_ND_MARA->BIND_TABLE( LT_MARA ).
endmethod.
WDDOMODIFYVIEW:
method WDDOMODIFYVIEW .
data wd_table type ref to cl_wd_table.
check first_time = abap_true.
* Name of the table UI element to be provided
wd_table ?= view->get_element( 'TABLE' ).
wd_this->table_control ?= wd_table->_method_handler.
*Name of the key attribute of the context node to which the table binding is done to be  provided
wd_this->table_control->set_key_attribute_name( 'MATNR' ).
endmethod.
ONACTIONON_TEST_SORT:
method ONACTIONON_TEST_SORT .
wd_this->table_control->apply_sorting( ).
endmethod.

 

16. 저장하고 활성화 합니다. 

 

 

17. 실행하기 위해 WebDynpro Application 을 만들고 그 Application을 실행합니다.

결과:

  1. 초기 테이블의 모습.

 

  1. 정렬 버튼을 누른후 변경된 모습.

 

 

끝.

요약: _method_handler , apply_sorting( ).

 

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

http://www.saptechnical.com/Tutorials/WebDynproABAP/Sort/tablecolumn.htm

웹딘프로아밥 컴포넌트마다 내부적으로 클래스가 하나 배정되어 있습니다.

그걸 찾는 방법이

cl_wdy_wb_naming_service=>get_classname_for_component

물론 SE24 에서 위 클래스 메소드를 찾아서 실행하면 웹딘 컴포넌트 -> 클래스 이름을 얻을 수 있습니다.

다시 SE24를 열어서 위에서 얻은 클래스 이름을 넣고 들어가서 Find 로 검색을 하면 됩니다.

 

편하게 쓰기 위해 이 일을 하는 펑션모듈을 만들어 봤습니다.

[2022-01-12 수정] 아래 프로그램을 설치하세요.

https://github.com/boy0korea/ZWD_CODE_SCANNER

 

GitHub - boy0korea/ZWD_CODE_SCANNER: WD code scanner

WD code scanner. Contribute to boy0korea/ZWD_CODE_SCANNER development by creating an account on GitHub.

github.com

 

제가 블로그에 올리고 있는 최신 강의 자료는 이곳에서 주로 가져오고 있습니다.

물론 수많은 자료중 유용하다고 판단되는 내용을 골라서 블로그에 올리고 있습니다 :)

 

http://scn.sap.com/community/web-dynpro-abap/content

 

들어가면 이런 화면이 나옵니다. 

1. All Content

: 2,3,4 내용이 모두 통합하여 나옵니다.

2. Blog Posts

: 블로그 입니다. 대상은 새로운 소식이나 다소 가벼운 주제 입니다.

3. Documents

: 주로 pdf 문서 인데 동영상이나 블로그 형태의 글도 있습니다. 고수들의 비법을 볼 수 있습니다.

4. Discussions

: 질문게시판입니다. 예전의 SDN forum 이 이곳으로 이동하였습니다.

웹딘프로아밥 교육자료를 찾는 분들이 많은데요.

한글로 된 자료는 별로 없습니다. 이 링크에 있는 수많은 동영상 역시 영어로 들으셔야 합니다.

WDA 분야에서는 이분이 단연 최고라 할수 있습니다. 토마스 영(Thomas Jung)님의 동영상 강의 모음 링크 입니다.

 

Thanks to Thomas Jung.

http://scn.sap.com/people/thomas.jung/blog/2006/06/20/web-dynpro-abap-demonstration-videos

 

원래는 읽기전용으로 세팅하면 서치핼프가 작동하지 않습니다.

 

기발한 아이디어로, 읽기전용 이면서 서치핼프가 작동하도록 하는 방법을 소개 합니다.

출처: http://scn.sap.com/docs/DOC-33880

 

Allowing Only Search Help Entry for an InputField

airline_3.JPG

 

간단히 요약하자면,

인풋필드를 2개 만듭니다. 둘다 같은 context 에 바인딩 합니다.

앞에껀 읽기 전용(readOnly)으로 하세요. 뒤에껀 넓이(width)를 0px 로  지정합니다.

실행을 해보면 2개의 인풋필드가 붙어있어서 하나처럼 보입니다.

 

단점은... 읽기 전용이 된 인풋필드에서 F4를 눌러도 서치핼프는 뜨지 않습니다. 마우스로 옆칸에 있는 버튼을 눌러야 합니다.

출처:

https://help.sap.com/saphelp_nw70ehp3/helpdata/en/4b/4cdb2ffcf74d39ac958fe21702887b/frameset.htm

 

Example of Performance Monitor Performance

단축키: Ctrl + Alt + Shift + P

개발서버나 품질서버에서만 사용가능하며, 운영시스템은 동작하지 않습니다.

 

(

하지만 운영에서도 디버깅권한이 있으면 디버깅으로 회피 해서 사용할 수는 있어요

Class : CL_WDR_TRACING

Method : BOOTSTRAP

)

 

웹딘프로 컴포넌트를 만들고 지우다 보면 이상하게 꼬여서 다시 만들어지지 않는 경우가 발생합니다.

생성을 누르면 The ABAP interface does not exist 라는 에러가 나면서 생성이 되지 않습니다.

 

이런 경우 인터페이스를 찾아보면 ZIWCI_로 시작하는 이름의 인터페이스가 있을 것입니다.

이것을 삭제해야 합니다.

불행히도 SE80에서는 삭제가 안됩니다.

 

 

정확한 이름은 웹딘 컴포넌트가 ZABC일때 인터페이스는 ZIWCI_ABC 입니다.

인터페이스가 있는지 검색하려면 우선 뷰 테이블 VSEOINTERF 에서 찾아보세요.

삭제할 인터페이스 이름을 잠시 적어둡니다.

SE37에서 펑션 모듈 SEO_INTERFACE_DELETE 를 실행합니다.

파라미터로 삭제할 인터페이스 이름을 넣고 실행하면 삭제가 됩니다.

 

다시 웹딘프로 컴포넌트를 만들어 보면 성공~!

Web Dynpro automatically activate service after transport

전송후 ICF 서비스 자동 액티브 방법

http://scn.sap.com/thread/1776428

 

Thomas Jung Dec 13, 2011 4:39 PM (in response to Uwe Fetzer)

Currently Being Moderated

In one system landscape I work in, we use RSICF_SERVICE_ACTIVATION with a variant to activates any inactive nodes within a certain naming standard. We then schedule this program to run automatically as a background job at the end of the transport event.

+ Recent posts