안녕하십니까. 오늘도 즐프 하시는 고수님들...
질문은 테이블 콘트롤 alv 평션 alv 클래스 이벤트 관련 이벤트를 처리 루틴이 어떻게 되는지 궁금해서요
제가 이지 아밥 책을 보고 있는데 생성 및 레이아웃에 대한 이야기는 잘 나와있어도 이벤트에 관련된게 적더라고요
역시 실무에 들어가서 깨우쳐야하는건지
저희가 어떤 테이블이나 alv 형식을 더블 클릭하면 다른 화면으로 넘어가게 되자나요..
이때 더블 클릭 이벤트를 구분해서 처리를 한다는건데
wirte문에서는 at line-selection을 하게 되면 hide에 숨겨놓은 데이터를 기반으로 어떤 처리를 하자나요
1. 테이블은 모듈 프로그램이니까.
MODULE user_command_0100 INPUT.
에서 ok_code를 이용해서 처리하는게 맞는건가요? 이게 맞다면
case ok_code.
when '??????'. <- 여기에는 어떤것이 들어가야하는건가요?
더블 클릭된 열의 데이타도 어떻게 가져욜지 모르겠네요?(hide 비슷)
2. alv 평션 이건 알아요
FORM alv_write .
DATA : pgm LIKE sy-repid. "현재 프로그램 명
pgm = sy-repid.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
i_callback_program = pgm
i_callback_user_command = 'USER_COMMAND‘ “이벤트 폼 연결
…..
ENDFORM.
FORM user_command USING r_ucomm TYPE sy-ucomm
rs_selfield TYPE slis_selfield." hide와 비슷한 역활
CASE r_ucomm.
* 더블 클릭
WHEN '&IC1'.
READ TABLE it_02 INDEX rs_selfield-tabindex.
IF it_02-belnr <> ''.
SET PARAMETER ID 'BLN' FIELD it_02-belnr.
SET PARAMETER ID 'BUK' FIELD it_02-bukrs.
SET PARAMETER ID 'GJR' FIELD it_02-gjahr.
CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
ENDIF.
ENDCASE.
ENDFORM. "USER_COMMAND
3. class ALV 는 전혀 모르겠습니다.
어떤 메쏘드를 사용하는것 같은데 어떤 메소드를 어느 시점에서 사용해야 하며 한번만 설정해주면
계속 캐치해서 돌아가는지 모르겠네요?
더블 클릭된 열의 데이타도 어떻게 가져욜지 모르겠네요?(hide 비슷)
나름대로 열심히 공부 하고 찾아 보다가 질문 드리는겁니다.
고수님들 어린 양을 굽어 살피어 쫌 도와주세요
댓글 3
-
Jaden
2009.04.02 23:23
-
아밥돌이
2009.04.03 01:36
윗분의 답변을 보고 넘넘 감동 받았습니다.
그런데 가장 쉬울것 같았던 테이블 콘트롤에 대한 이해가
쫌 어렵네요
user commnad로 온다면 ok_code로 받는다는거자나요
그런데 GUI Status PICK 설정이라니?
GUI Status는 메뉴설정하는곳이자나요
그리고 ok_code로 넘어 온다면 어떤 식으로 넘어오는지
case ok_code일때
when 'pick'이런식인가요?
그리고 해당 클릭 데이터를 어떻게 제어하죠
class같은 경우에는 님이 말하신데로 해당 열과 행을 알수가 있지 않습니까.
그리고 class경우에는 만들어진 클래스가 없고 직접 만들어서 사용해야하는것인가요?
부탁 쫌 드릴께요.. 넘넘 궁금해요.
-
Jaden
2009.04.03 02:22
감사합니다ㅎ.. 도움이 되셨다면 다행이네요
우선 테이블 컨트롤에서 더블클릭이벤트는 위에서 말씀드린것처럼 Gui status에서 PICK이란 녀석으로 지정을 해주셔야 합니다
엄밀히 따지면 Gui status 의 Recommended Function Key Settings부분에서 F2의 펑션키에 해당하는 Choose라는 위치에 펑션코드를
지정해 주시면 이부분에서 더블클릭으로 인식하고 PAI의 user command에서 로직을 구성하실수가 있습니다
해당 더블클릭된 데이터는 set cursor / get cursor 등을 통해 인식하여 컨트롤 하시면 됩니다
(아밥돌이님 생각대로 when 'PICK'일 경우에 해당하는 펑션코드로 인식해 PAI에서 Flow를 타게 됩니다)
ex) Recommended Function Key Settings
F2 PICK Choose
class를 이용한 ALV구현시에는 따로 class를 생성하실 필요는 없습니다 ALV구현에 맞는 class를 상속받아서 사용하시면 됩니다
class를 이용하여 ALV를 구현해보셨는지요? 쉽게 이해하시기 위해서는 다음과 같습니다
하나의 스크린에 컨테이너를 이용하여 바탕을 만듭니다. 그위에 Grid를 입힌 다음 해당 Grid에 데이터를 뿌려줄 컬럼 즉 fieldcat을
삽입하고 그에 따른 layout을 이용하여 Grid를 컨트롤 합니다
그 후에 추가적으로 더블클릭, 핫스팟, 데이터체인지 등의 이벤트도 부가적으로 연결할수도 있습니다.
위의 과정들을 통해 데이터를 뿌려줄 준비가 되었다면 CALL METHOD grid->set_table_for_first_display 를 이용하여 출력합니다
자세한 로직을 보실려면 우선 SLIS 패키지를 통한 방법과 t-code 'DWDM' 을 참조하시면 될 듯 싶습니다
- Table control -
PAI에서 선언된 Ok code의 값으로 User command를 제어할 수 있으며
GUI Status중 'PICK'를 설정한 후 더블클릭 이벤트 제어 가능
- ALV Func -
Ex) REUSE_ALV_LIST(GRID)_DISPLAY 를 사용하였을시
Exporting 중 i_callback_user_command = 'USER_COMMAND‘의 서브루틴에서
ok_code = '&IC1' 에 의해서 제어 가능
- ALV Class -
1. DATA : event_receiver TYPE REF TO lcl_event_receiver 를 선언 후
2. PBO에서 다음과 같이 사용될 Grid에 이벤트 핸들러 생성 한 뒤
CREATE OBJECT event_receiver.
CALL METHOD grid->set_ready_for_input
EXPORTING
i_ready_for_input = 1.
SET HANDLER event_receiver->handle_double_click FOR grid.
3. 밑의 로직과 같이 해당 이벤트의 Definition과 Impementation 구현 후
*----------------------------------------------------------------------*
* CLASS lcl_event_receiver DEFINITION
*----------------------------------------------------------------------*
CLASS lcl_event_receiver DEFINITION.
PUBLIC SECTION.
METHODS : handle_double_click
FOR EVENT double_click OF cl_gui_alv_grid
IMPORTING e_row
e_column
es_row_no.
ENDCLASS. "(LCL_EVENT_RECEIVER DEFINITION)
*----------------------------------------------------------------------*
* CLASS lcl_event_receiver IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS lcl_event_receiver IMPLEMENTATION.
METHOD handle_double_click.
PERFORM handle_double_click USING e_row
e_column.
ENDMETHOD. "handle_user_command
ENDCLASS. "LCL_EVENT_RECEIVER IMPLEMENTATION
4. 위 로직에서 사용된 e_row와 e_column의 값으로 더블클릭된 데이터를 제어할 수 있습니다