>그림을 보시면 alv테이블이 있는데요
>
>오른쪽에 소견서 필드를 만들고 소견서 필드를 클릭하면
>
>팝업이 뜨면서 소견서 작성을 할 수 있게 하려고 합니다.
>
>또한 소견서 작성 완료가 되면 아무것도 없는 필드에 "작성완료"라는 문구가 필드에 적용되게 하려합니다.
>
>가능할까요?
>
>자세한 설명 좀 부탁드립니다.
>
>매번 수고해주시는 분들께 진심으로 감사드립니다.
>
>저도 많이 배워서 많은 사람들에게 알려 주도록 하겠습니다.
대충 아래처럼 로직을 만드시면 될 거예요.
DATA : BEGIN OF GS_DATA,
FIELD TYPE C LENGTH 10,
END OF GS_DATA,
GT_DATA LIKE TABLE OF GS_DATA.
DATA : GCL_GRID TYPE REF TO CL_GUI_ALV_GRID,
GT_FCAT TYPE LVC_T_FCAT.
START-OF-SELECTION.
DO 10 TIMES.
APPEND '소견서작성' TO GT_DATA.
ENDDO.
CALL SCREEN 100.
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
DATA LS_FCAT TYPE LVC_S_FCAT.
DATA LCL_EVENT TYPE REF TO ZSDCL_EVENT_RECEIVER.
SET PF-STATUS 'M100'.
* SET TITLEBAR 'xxx'.
IF GCL_GRID IS NOT BOUND.
CREATE OBJECT GCL_GRID
EXPORTING
I_PARENT = CL_GUI_CONTAINER=>DEFAULT_SCREEN
I_APPL_EVENTS = 'X'.
LS_FCAT-FIELDNAME = 'FIELD'.
LS_FCAT-INTTYPE = 'CHAR'.
LS_FCAT-INTLEN = '10'.
LS_FCAT-COLTEXT = '소견서'.
LS_FCAT-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_BUTTON.
APPEND LS_FCAT TO GT_FCAT.
CREATE OBJECT LCL_EVENT
EXPORTING
I_PROGRAM = SY-REPID.
SET HANDLER : LCL_EVENT->Z_HALV_BUTTON_CLICK FOR GCL_GRID.
CALL METHOD GCL_GRID->SET_TABLE_FOR_FIRST_DISPLAY
CHANGING
IT_OUTTAB = GT_DATA
IT_FIELDCATALOG = GT_FCAT.
ELSE.
GCL_GRID->REFRESH_TABLE_DISPLAY( ).
ENDIF.
ENDMODULE. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Form Z_HALV_BUTTON_CLICK
*&---------------------------------------------------------------------*
FORM Z_HALV_BUTTON_CLICK CHANGING SENDER
ES_COL_ID
ES_ROW_NO TYPE LVC_S_ROID.
FIELD-SYMBOLS <LFS_DATA> LIKE GS_DATA.
READ TABLE GT_DATA ASSIGNING <LFS_DATA> INDEX ES_ROW_NO-ROW_ID.
CHECK SY-SUBRC IS INITIAL.
* ==> 소견서 작성 팝업.
* IF 소견서 작성완료
<LFS_DATA>-FIELD = '소견서 작성 완료'.
* ENDIF.
ENDFORM. "Z_HALV_BUTTON_CLICK
*&---------------------------------------------------------------------*
*& Module EXIT INPUT
*&---------------------------------------------------------------------*
MODULE EXIT INPUT.
LEAVE TO SCREEN 0.
ENDMODULE. " EXIT INPUT
댓글 5
-
유정a
2010.08.26 01:35
-
맑은하늘
2010.08.26 02:35
아.. 여기서 하는 코딩으로 하다보니 그리 되었네요. 죄송합니다 .^^;;
로컬이벤트 클래스 하나 만드시구요(맨꼭대기에 만드시면 됩니다)
*----------------------------------------------------------------------*
* CLASS LCL_EVENT_RECEIVER DEFINITION
*----------------------------------------------------------------------*
CLASS LCL_EVENT_RECEIVER DEFINITION.
PUBLIC SECTION.
METHODS : Z_HALV_BUTTON_CLICK
FOR EVENT BUTTON_CLICK OF CL_GUI_ALV_GRID
IMPORTING ES_COL_ID
ES_ROW_NO .
ENDCLASS. " lcl_def_receiver
*----------------------------------------------------------------------*
* CLASS LCL_EVENT_RECEIVER1 IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS LCL_EVENT_RECEIVER IMPLEMENTATION.
METHOD Z_HALV_BUTTON_CLICK.
PERFORM Z_HALV_BUTTON_CLICK CHANGING ES_COL_ID
ES_ROW_NO.
ENDMETHOD. "handle_data_changed
ENDCLASS. " lcl_def_receiver
이벤트 설정을 위 이벤트 클래스로 바꾸시구요
DATA LCL_EVENT TYPE REF TO LCL_EVENT_RECEIVER.
이벤트 form 을
FORM Z_HALV_BUTTON_CLICK CHANGING ES_COL_ID
ES_ROW_NO TYPE LVC_S_ROID.
로 바꾸시면 실행되실 겁니다.
디버깅으로 실행해서 찬찬히 보시면 아실 거예요
-
유정a
2010.08.26 03:14
정말 감사합니다 반은 해결되었네요^^
자세히 알려주시는데도 반밖에 이해를 못했네요
방금 써주신 소스로 top 에 데이타 소스넣고 클래스 생성했는데요
클래스 부분 활성화는 되는데 top부분 활성화가 안나네요
The type "LCL_EVENT_RECEIVER" is unknown.
유형을 썼는데도 이렇게 나오네요
그리고
CHECK SY-SUBRC IS INITIAL. 이부분에서요 <LFS_DATA>에는 머가 들어가나요?
* ==> 소견서 작성 팝업. GT_DATA는 구조체인건 알겠는데 위에건 모르겠네요
* IF 소견서 작성완료 IF~ENDIF 부분도 주석되어있는데 참고만 하라고 해주신거죠?
<LFS_DATA>-FIELD = '소견서 작성 완료'.
* ENDIF.
죄송합니다 머리가 나빠서 자꾸 물어보게되네요
-
맑은하늘
2010.08.26 17:54
위에서 read table gt_data assigning <lfs_data> index es_row_no-row_id. 에서 가져온 거구요.
내용은 grid 에서 클릭한 button 에 해당하는 internal table 레코드 입니다.
-
으..2MB~떠나야하나
2010.08.26 19:09
유정님이 원하시는 코딩은 버튼 클릭 이벤트가 아니라 더블클릭 이벤트인것 같군요.
참조하는 이벤트를 더블 클릭을 바꾸시고...
The type "LCL_EVENT_RECEIVER" is unknown.
이렇게 나오는 이유는 선언부 위치 문제 입니다.
아마도 이벤트 리시버를 Top 에 선언하시고 로컬 클래스를 그 아래에 선언하셨으면 Top 에 선언된 위치에서는 로컬 클래스가 없기 때문에 오류가 발생합니다.
로컬 클래스 선언 --> 이벤트 리시버 선언 --> 더블클릭 이벤트 코딩 --> 입력 화면 Pop Up --> 입력 완료시 원화면의 인터널 테이블에 소견서 작성 완료 수정
이런식으로 개념을 잡으시면 될 듯 합니다.
GRID OBJECT 가 만들어져있는데 OUTPUT에 넣어도 되나요
책을 몇번씩 정독을 해도 실습을 많이 해봐도 이해가 잘 안되네요 ㅠㅠ
SET PF-STATUS 'M100' 이 부분에서 M100은 PAI에 BASE란 이름을 주었거든요 또 써줘야하나요
DATA LCL_EVENT TYPE REF TO ZSDCL_EVENT_RECEIVER.
이 구문에서 LCL_EVENT에러와 ZSDCL_EVENT_RECEIVER에러가 나네요 ㅠ.ㅠ