먼저 죄송하다는 말씀 부터 드립니다
많은 분께서 도와주셨는데 보름이 넘도록 해결을 못하고 있네요 ㅠ.ㅠ
시행착오를 겪으면서 했는데 막히는 부분이 너무 많네요
보시다시피 오른쪽 소견서 필드를 클릭하면 팝업창이 뜨게 하려는데요
또 팝업창이 완료되면 "작성완료"라는 문구로 바뀌게 하고싶은데
간단한 로직 좀 다시 부탁드립니다.
한가지 더 부탁드리면
제가 클래스부분, 데이터선언부분, form부분 이렇게 3가지 include를 쓰는데요
로직들이 어느부분에 들어가야하는지도 좀 알려주시면 감사하겠습니다.
이부분이 가장 막히네요
아직 신입이라서 계속 하다보면 익숙해지겠죠...
댓글 3
-
無念군
2010.10.01 02:55
-
맑은하늘
2010.10.01 05:34
그냥 필드 한개짜리 그리드의 해당 필드를 버튼으로 만들고
그 버튼을 눌렀을때 button_click 이벤트 설정하고
가상으로 다른 팝업을 호출했다는 가정하에 클릭한
셀을 작성완료로 텍스트를 변경합니다.
참고하시고 좋은 결과 있으시길 바랍니다.
[status : M100]
기능키 'BACK' -> 기능유형 'E' (종료명령어)
[화면 100 => flow logic]
PROCESS BEFORE OUTPUT.
MODULE status_0100.
MODULE set_alv.
*
PROCESS AFTER INPUT.
MODULE exit AT EXIT-COMMAND.
[소스코드]
*---------------------------------------------------------------------*
* 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_EVENT_RECEIVER DEFINITION)
*---------------------------------------------------------------------*
* LOCAL CLASSES: IMPLEMENTATION
*---------------------------------------------------------------------*
CLASS lcl_event_receiver IMPLEMENTATION.
METHOD z_halv_button_click. "화면에 엔터를 칠경우 이벤트가 실행되는 부분
PERFORM z_halv_button_click CHANGING es_col_id
es_row_no.
ENDMETHOD. "LCL_EVENT_RECEIVER
ENDCLASS. "LCL_EVENT_RECEIVER IMPLEMENTATION
************************************************************************
* DATA Def.
************************************************************************
DATA gcl_grid TYPE REF TO cl_gui_alv_grid.
DATA gcl_event TYPE REF TO zsdcl_event_receiver.
DATA gs_layo TYPE lvc_s_layo.
DATA g_okcode TYPE syucomm.
DATA gt_fcat TYPE lvc_t_fcat.
DATA gt_sort TYPE lvc_t_sort.
DATA : BEGIN OF gs_data,
field TYPE c LENGTH 10,
END OF gs_data,
gt_data LIKE TABLE OF gs_data.
START-OF-SELECTION.
DO 15 TIMES.
CLEAR gs_data.
gs_data-field = sy-index.
APPEND gs_data TO gt_data.
ENDDO.
CALL SCREEN 100.
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
SET PF-STATUS 'M100'.
SET TITLEBAR 'T100'.
ENDMODULE. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Module EXIT INPUT
*&---------------------------------------------------------------------*
MODULE exit INPUT.
LEAVE TO SCREEN 0.
ENDMODULE. " EXIT INPUT
*&---------------------------------------------------------------------*
*& Module SET_ALV OUTPUT
*&---------------------------------------------------------------------*
MODULE set_alv OUTPUT.
DATA ls_fcat TYPE lvc_s_fcat.
DATA lcl_event TYPE REF TO lcl_event_receiver.
IF gcl_grid IS NOT BOUND.
* Create alv
CREATE OBJECT gcl_grid
EXPORTING
i_parent = cl_gui_container=>default_screen
i_appl_events = 'X'.
gs_layo-box_fname = 'A'.
* Event-set
CREATE OBJECT lcl_event.
SET HANDLER lcl_event->z_halv_button_click FOR gcl_grid.
* Set field-catalog
ls_fcat-fieldname = 'FIELD'.
ls_fcat-inttype = 'C'.
ls_fcat-intlen = 10.
ls_fcat-style = cl_gui_alv_grid=>mc_style_button.
APPEND ls_fcat TO gt_fcat.
* Display-ALV
CALL METHOD gcl_grid->set_table_for_first_display
EXPORTING
is_layout = gs_layo
CHANGING
it_outtab = gt_data
it_fieldcatalog = gt_fcat
it_sort = gt_sort.
ELSE.
CALL METHOD gcl_grid->refresh_table_display.
ENDIF.
ENDMODULE. " SET_ALV OUTPUT
*&---------------------------------------------------------------------*
*& Form z_halv_button_click
*&---------------------------------------------------------------------*
FORM z_halv_button_click CHANGING 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.
"" call screen 200. 버튼 클릭하였을 경우 실행될 화면
"" 처리가 완료되었다면
<lfs_data>-field = '처리완료'.
ENDFORM. "z_halv_data_changed
-
유정a
2010.10.07 02:05
맑은 하늘님
gt_data LIKE TABLE OF gs_data.
이부분에서 gs_data는 internaltable라 그대로 써도 되는건 알겠는데 gt_data는 테이블명이 들어가나요?
<lfs_data>이부분에는 테이블명이 들어가나요?
READ TABLE gt_data ASSIGNING <lfs_data> INDEX es_row_no-row_id.
이부분에서 gt_data와 <lfs_data>가 있는데요 이 두부분에는 같은 테이블명이 들어가나요?
마지막으로 es_row_no 나 es_row_id는 그대로 써주면되나요? 아니면 변경해야하나요?
설명 좀 부탁드려요 저번부터 이 부분이 막히네요 ㅠ.ㅠ
팜업기능은 user-commend 에 기술 하셨을듯 한데요..
팜업창 기능을 기술하신 구문 이후에 ..
internal table (실제 출력 되는 itab) 의 내역을 loop을 돌려서..
evnet가 발생한 low의 값을 기준으로 실제 table modify 작업을 실행한 후에 ..
alv 화면을 refresh 해주시면 되실듯 한데요...
screen이 있으실 경우...
PBI - uesr-command 이후에 위에 순서대로 기술하시면 되고 ..
screen이 없으실 경우 ..
위 내용을 기준으로 event (팜업창) 이 뜨는 이후에 기술하시면 되실듯 합니다 ..
아마도 form (user-command)구문쪽에 해당이 되실듯 하네요 .