REPORT z15_24.
DATA : gt_emplist LIKE zemplist OCCURS 0 WITH HEADER LINE.
DATA : con1_ref TYPE REF TO cl_gui_custom_container.
DATA : g_grid TYPE REF TO cl_gui_alv_grid.
DATA : gs_variant TYPE disvariant.
DATA : gs_layout TYPE lvc_s_layo.
DATA : gt_toolbar TYPE ui_functions.
DATA : gt_sort TYPE lvc_t_sort.
DATA : gt_fieldcat TYPE lvc_t_fcat.
DATA : gt_modified_rows TYPE STANDARD TABLE OF zemplist.
DATA : ok_code TYPE sy-ucomm.
TYPE-POOLS: icon.
*----------------------------------------------------------------------*
* CLASS lcl_event_receiver DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_event_receiver DEFINITION.
PUBLIC SECTION.
METHODS : handle_toolbar
FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING e_object e_interactive.
METHODS : handle_command
FOR EVENT user_command OF cl_gui_alv_grid
IMPORTING e_ucomm.
METHODS:
handle_data_changed
FOR EVENT data_changed OF cl_gui_alv_grid
IMPORTING er_data_changed.
ENDCLASS. "lcl_event_receiver DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_event_receiver IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_event_receiver IMPLEMENTATION.
METHOD handle_toolbar.
DATA: ls_toolbar TYPE stb_button.
CLEAR ls_toolbar.
ls_toolbar-butn_type = 3.
APPEND ls_toolbar TO e_object->mt_toolbar.
CLEAR ls_toolbar.
ls_toolbar-function = 'RESH'.
ls_toolbar-icon = icon_refresh.
ls_toolbar-quickinfo = 'Refresh'.
ls_toolbar-text = ' '.
ls_toolbar-disabled = ' '.
APPEND ls_toolbar TO e_object->mt_toolbar.
ENDMETHOD. "handle_toolbar
METHOD handle_command.
DATA : l_scroll TYPE lvc_s_stbl.
CASE e_ucomm.
WHEN 'RESH'.
SELECT *
FROM zemplist
INTO TABLE @gt_emplist.
l_scroll-row = 'X'.
l_scroll-col = 'X'.
CALL METHOD g_grid->refresh_table_display
EXPORTING
i_soft_refresh = ''
is_stable = l_scroll.
ENDCASE.
ENDMETHOD. "handle_command
METHOD handle_data_changed.
DATA:
ls_emplist TYPE zemplist,
ls_outtab LIKE LINE OF gt_emplist.
FIELD-SYMBOLS: <fs> TYPE table.
ASSIGN er_data_changed->mp_mod_rows->* TO <fs>.
LOOP AT <fs> INTO ls_outtab.
MOVE-CORRESPONDING ls_outtab TO ls_emplist.
APPEND ls_emplist TO gt_modified_rows.
ENDLOOP.
ENDMETHOD. "handle_data_changed
ENDCLASS. "lcl_event_receiver IMPLEMENTATION
PARAMETERS: p_vari LIKE disvariant-variant.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.
gs_variant-report = sy-repid.
CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
EXPORTING
is_variant = gs_variant
i_save = 'A'
IMPORTING
es_variant = gs_variant
EXCEPTIONS
not_found = 1
program_error = 2
OTHERS = 3.
IF sy-subrc EQ 0.
p_vari = gs_variant-variant.
ENDIF.
START-OF-SELECTION.
SELECT *
FROM zemplist
INTO TABLE @gt_emplist.
CALL SCREEN 100.
*&---------------------------------------------------------------------*
*& Module INIT_CON OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE init_con OUTPUT.
IF con1_ref IS INITIAL.
CREATE OBJECT con1_ref
EXPORTING
container_name = 'CON1'.
CREATE OBJECT g_grid
EXPORTING
i_parent = con1_ref.
ENDIF.
gs_variant-report = sy-repid.
gs_variant-username = sy-uname.
PERFORM setting_layout CHANGING gs_layout.
PERFORM setting_toolbar.
PERFORM setting_sort.
PERFORM getting_catalog.
PERFORM setting_catalog.
DATA : event_receiver TYPE REF TO lcl_event_receiver.
* CREATE OBJECT event_receiver.
* SET HANDLER event_receiver->handle_data_changed FOR g_grid.
*
* CALL METHOD g_grid->register_edit_event
* EXPORTING
* i_event_id = cl_gui_alv_grid=>mc_evt_modified.
*
* CALL METHOD g_grid->register_edit_event
* EXPORTING
* i_event_id = cl_gui_alv_grid=>mc_evt_enter.
*
CALL METHOD g_grid->set_table_for_first_display
EXPORTING
* i_structure_name = 'SFLIGHT'
is_variant = gs_variant
i_save = 'A'
i_default = ''
is_layout = gs_layout
it_toolbar_excluding = gt_toolbar
CHANGING
it_outtab = gt_emplist[]
it_fieldcatalog = gt_fieldcat
it_sort = gt_sort.
ENDMODULE. " INIT_CON OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT. " 5번 저장 이벤트
CASE sy-ucomm.
WHEN 'BACK' OR 'EXIT' OR 'CANC'.
LEAVE TO SCREEN 0.
WHEN 'SAVE'.
DATA: l_valid TYPE c.
CALL METHOD g_grid->check_changed_data
IMPORTING
e_valid = l_valid.
IF l_valid IS NOT INITIAL.
PERFORM update_database.
ENDIF.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
SET PF-STATUS '100_STATUS'.
* SET TITLEBAR 'xxx'.
ENDMODULE. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Form SETTING_LAYOUT
*&---------------------------------------------------------------------*
FORM setting_layout CHANGING p_layout TYPE lvc_s_layo.
p_layout-cwidth_opt = 'X'. "칼럼 길이 자동조절
p_layout-grid_title = 'ALV Grid Edit Test'.
"타이틀 바
p_layout-sel_mode = 'B'. "선택모드 : 멀티 선택 가능
p_layout-zebra = 'X'. "Sripe 속성 지정
* p_layout-edit = 'X'.
ENDFORM. " setting_layout
*&---------------------------------------------------------------------*
*& Form SETTING_TOOLBAR
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM setting_toolbar .
DATA: l_exclude TYPE ui_func.
l_exclude = cl_gui_alv_grid=>mc_fc_save_variant.
APPEND l_exclude TO gt_toolbar.
l_exclude = cl_gui_alv_grid=>mc_fc_maintain_variant.
APPEND l_exclude TO gt_toolbar.
ENDFORM. " SETTING_TOOLBAR
*&---------------------------------------------------------------------*
*& Form SETTING_SORT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM setting_sort .
DATA : ls_sort TYPE lvc_s_sort.
ls_sort-spos = '1'.
ls_sort-fieldname = 'EMPCD'.
ls_sort-up = 'X'.
ls_sort-subtot = 'X'.
APPEND ls_sort TO gt_sort.
ENDFORM. " SETTING_SORT
*&---------------------------------------------------------------------*
*& Form SETTING_CATALOG
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM setting_catalog .
DATA : ls_fieldcat TYPE lvc_s_fcat.
LOOP AT gt_fieldcat INTO ls_fieldcat.
IF ls_fieldcat-fieldname EQ 'PSTION'.
ls_fieldcat-edit = 'X'.
MODIFY gt_fieldcat FROM ls_fieldcat.
ENDIF.
ENDLOOP.
ENDFORM. " SETTING_CATALOG
*&---------------------------------------------------------------------*
*& Form GETTING_CATALOG
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM getting_catalog .
DATA : lt_fieldcat TYPE kkblo_t_fieldcat.
CALL FUNCTION 'K_KKB_FIELDCAT_MERGE'
EXPORTING
i_callback_program = sy-repid
i_tabname = 'GT_EMPLIST'
i_inclname = sy-repid
CHANGING
ct_fieldcat = lt_fieldcat[].
IF sy-subrc EQ 0.
CALL FUNCTION 'LVC_TRANSFER_FROM_KKBLO'
EXPORTING
it_fieldcat_kkblo = lt_fieldcat[]
IMPORTING
et_fieldcat_lvc = gt_fieldcat[].
ENDIF.
ENDFORM. " GETTING_CATALO
*&---------------------------------------------------------------------*
*& Form UPDATE_DATABASE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM update_database .
MODIFY zemplist FROM TABLE gt_modified_rows.
IF sy-subrc EQ 0.
MESSAGE 'SAVE OK' TYPE 'I'.
ENDIF.
ENDFORM. " UPDATE_DATABASE
*REPORT z15_24.
*
*DATA : gt_sflight LIKE sflight OCCURS 0 with header line.
*
*DATA : con1_ref TYPE REF TO cl_gui_custom_container.
*DATA : g_grid TYPE REF TO cl_gui_alv_grid.
*DATA : gs_variant TYPE disvariant.
*DATA : gs_layout TYPE lvc_s_layo.
*DATA : gt_toolbar TYPE ui_functions.
*DATA : gt_sort TYPE lvc_t_sort.
*DATA : gt_modified_rows TYPE STANDARD TABLE OF sflight.
*DATA : gt_fieldcat TYPE lvc_t_fcat.
*DATA : ok_code TYPE sy-ucomm.
*
*TYPE-POOLS: icon.
**----------------------------------------------------------------------
**
** CLASS lcl_event_receiver DEFINITION
**----------------------------------------------------------------------
**
**
**----------------------------------------------------------------------
**
*CLASS lcl_event_receiver DEFINITION.
* PUBLIC SECTION.
* METHODS : handle_toolbar
* FOR EVENT toolbar OF cl_gui_alv_grid
* IMPORTING e_object e_interactive.
*
* METHODS : handle_command
* FOR EVENT user_command OF cl_gui_alv_grid
* IMPORTING e_ucomm.
*
* METHODS : handle_data_changed " 6번 클래스 정의 (for 이벤트 핸들러 메서드)
* FOR EVENT data_changed OF cl_gui_alv_grid
* IMPORTING er_data_changed.
*ENDCLASS. "lcl_event_receiver DEFINITION
*
**----------------------------------------------------------------------
**
** CLASS lcl_event_receiver IMPLEMENTATION
**----------------------------------------------------------------------
**
**
**----------------------------------------------------------------------
**
*CLASS lcl_event_receiver IMPLEMENTATION.
* METHOD handle_toolbar.
*
* DATA: ls_toolbar TYPE stb_button.
*
* CLEAR ls_toolbar.
* ls_toolbar-butn_type = 3.
* APPEND ls_toolbar TO e_object->mt_toolbar.
*
* CLEAR ls_toolbar.
* ls_toolbar-function = 'RESH'.
* ls_toolbar-icon = icon_refresh.
* ls_toolbar-quickinfo = 'Refresh'.
* ls_toolbar-text = ' '.
* ls_toolbar-disabled = ' '.
* APPEND ls_toolbar TO e_object->mt_toolbar.
*
* ENDMETHOD. "handle_toolbar
*
* METHOD handle_command.
* DATA : l_scroll TYPE lvc_s_stbl.
*
* CASE e_ucomm.
* WHEN 'RESH'.
* SELECT * FROM sflight INTO TABLE gt_sflight.
* l_scroll-row = 'X'.
* l_scroll-col = 'X'.
*
* CALL METHOD g_grid->refresh_table_display
* EXPORTING
* i_soft_refresh = ''
* is_stable = l_scroll.
* ENDCASE.
* ENDMETHOD. "handle_command
*
* METHOD handle_data_changed. "7번 클래스 구현
* DATA : ls_sflight TYPE sflight,
* ls_outtab LIKE LINE OF gt_sflight.
* FIELD-SYMBOLS : <fs> TYPE table.
* ASSIGN er_data_changed->mp_mod_rows->* TO <fs>.
* LOOP AT <fs> INTO ls_outtab.
* MOVE-CORRESPONDING ls_outtab TO ls_sflight.
* APPEND ls_sflight TO gt_modified_rows.
* ENDLOOP.
*
* ENDMETHOD. "handle_data_changed
*
*ENDCLASS. "lcl_event_receiver IMPLEMENTATION
*
*
*PARAMETERS: p_vari LIKE disvariant-variant.
*
*AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.
* gs_variant-report = sy-repid.
* CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
* EXPORTING
* is_variant = gs_variant
* i_save = 'A'
* IMPORTING
* es_variant = gs_variant
* EXCEPTIONS
* not_found = 1
* program_error = 2
* OTHERS = 3.
*
* IF sy-subrc EQ 0.
* p_vari = gs_variant-variant.
* ENDIF.
*
*START-OF-SELECTION.
*
* SELECT * FROM sflight
* INTO TABLE gt_sflight UP TO 100 ROWS.
*
* CALL SCREEN 100.
*
*
**&---------------------------------------------------------------------
**
**& Module INIT_CON OUTPUT
**&---------------------------------------------------------------------
**
** text
**----------------------------------------------------------------------
**
*MODULE init_con OUTPUT.
* IF con1_ref IS INITIAL.
* CREATE OBJECT con1_ref
* EXPORTING
* container_name = 'CON1'.
*
* CREATE OBJECT g_grid
* EXPORTING
* i_parent = con1_ref.
*
*
* ENDIF.
*
*
* gs_variant-report = sy-repid.
* gs_variant-username = sy-uname.
*
* PERFORM setting_layout CHANGING gs_layout.
* PERFORM setting_toolbar.
* PERFORM setting_sort.
* PERFORM getting_catalog.
* PERFORM setting_catalog.
*
*
* DATA : event_receiver TYPE REF TO lcl_event_receiver.
*
* CREATE OBJECT event_receiver.
*SET HANDLER event_receiver->handle_data_changed FOR g_grid. "8번 이벤트 핸들러
*메서드 등록
*
* CALL METHOD g_grid->register_edit_event "9번 이벤트 호출
* EXPORTING
* i_event_id = cl_gui_alv_grid=>mc_evt_modified.
*
* CALL METHOD g_grid->register_edit_event "9번 이벤트 호출
* EXPORTING
* i_event_id = cl_gui_alv_grid=>mc_evt_enter. "
*
*
* CALL METHOD g_grid->set_table_for_first_display
* EXPORTING
** i_structure_name = 'SFLIGHT'
* is_variant = gs_variant
* i_save = 'A'
* i_default = ''
* is_layout = gs_layout
* it_toolbar_excluding = gt_toolbar
* CHANGING
* it_outtab = gt_sflight[]
* it_fieldcatalog = gt_fieldcat
* it_sort = gt_sort.
*
*
*
*ENDMODULE. " INIT_CON OUTPUT
**&---------------------------------------------------------------------
**
**& Module USER_COMMAND_0100 INPUT
**&---------------------------------------------------------------------
**
** text
**----------------------------------------------------------------------
**
*MODULE user_command_0100 INPUT.
* CASE sy-ucomm..
* WHEN 'BACK' OR' EXIT' OR 'CANC'.
* LEAVE TO SCREEN 0.
* WHEN 'SAVE'.
* DATA: l_valid TYPE c.
* CALL METHOD g_grid->check_changed_data
* IMPORTING
* e_valid = l_valid.
*
* IF l_valid IS NOT INITIAL.
*
* PERFORM update_database.
*
* ENDIF.
*
* ENDCASE.
*ENDMODULE. " USER_COMMAND_0100 INPUT
**&---------------------------------------------------------------------
**
**& Module STATUS_0100 OUTPUT
**&---------------------------------------------------------------------
**
** text
**----------------------------------------------------------------------
**
*MODULE status_0100 OUTPUT.
* SET PF-STATUS '100_STATUS'.
** SET TITLEBAR 'xxx'.
*
*ENDMODULE. " STATUS_0100 OUTPUT
**&---------------------------------------------------------------------
**
**& Form SETTING_LAYOUT
**&---------------------------------------------------------------------
**
*FORM setting_layout CHANGING p_layout TYPE lvc_s_layo.
*
* p_layout-cwidth_opt = ''. "칼럼 길이 자동조절
*
* p_layout-grid_title = 'ALV Grid Edit Test'. "타이틀 바
*
* p_layout-sel_mode = 'B'. "선택모드 : 멀티 선택 가능
*
* p_layout-zebra = ''. "Sripe 속성 지정
*
** p_layout-edit = 'X'. "1번 레이아웃 설정 -> 필드 카탈로그 설정 시 주석처리 필요
*
*ENDFORM. " setting_layout
**&---------------------------------------------------------------------
**
**& Form SETTING_TOOLBAR
**&---------------------------------------------------------------------
**
** text
**----------------------------------------------------------------------
**
** --> p1 text
** <-- p2 text
**----------------------------------------------------------------------
**
*FORM setting_toolbar .
* DATA: l_exclude TYPE ui_func.
*
* l_exclude = cl_gui_alv_grid=>mc_fc_save_variant.
* APPEND l_exclude TO gt_toolbar.
*
* l_exclude = cl_gui_alv_grid=>mc_fc_maintain_variant.
* APPEND l_exclude TO gt_toolbar.
*
*ENDFORM. " SETTING_TOOLBAR
**&---------------------------------------------------------------------
**
**& Form SETTING_SORT
**&---------------------------------------------------------------------
**
** text
**----------------------------------------------------------------------
**
** --> p1 text
** <-- p2 text
**----------------------------------------------------------------------
**
*FORM setting_sort .
* DATA : ls_sort TYPE lvc_s_sort.
*
* ls_sort-spos = '1'.
* ls_sort-fieldname = 'CARRID'.
* ls_sort-up = 'X'.
* ls_sort-subtot = 'X'.
* APPEND ls_sort TO gt_sort.
*
*ENDFORM. " SETTING_SORT
**&---------------------------------------------------------------------
**
**& Form SETTING_CATALOG
**&---------------------------------------------------------------------
**
** text
**----------------------------------------------------------------------
**
** --> p1 text
** <-- p2 text
**----------------------------------------------------------------------
**
*FORM setting_catalog .
* DATA : ls_fieldcat TYPE lvc_s_fcat.
* ls_fieldcat-fieldname = 'PRICE'.
* ls_fieldcat-coltext = 'Airfare'.
* ls_fieldcat-just = 'R'.
* ls_fieldcat-key = ' '.
*ls_fieldcat-edit = 'X'. "2단계 필드 카탈로그 속성 -> PRICE 필드의 카탈로그에 EDIT 속성을
*설정하면 아래쪽 화면과 같이 해당 필드만 변경할 수 있도록 설정된다
* ls_fieldcat-outputlen = '15'.
* APPEND ls_fieldcat TO gt_fieldcat.
*ENDFORM. " SETTING_CATALOG
**&---------------------------------------------------------------------
**
**& Form GETTING_CATALOG
**&---------------------------------------------------------------------
**
** text
**----------------------------------------------------------------------
**
** --> p1 text
** <-- p2 text
**----------------------------------------------------------------------
**
*FORM getting_catalog .
*
* DATA : lt_fieldcat TYPE kkblo_t_fieldcat.
*
* CALL FUNCTION 'K_KKB_FIELDCAT_MERGE'
* EXPORTING
* i_callback_program = SY-REPID
* i_tabname = 'GT_SFLIGHT'
* i_inclname = SY-REPID
* CHANGING
* ct_fieldcat = lt_fieldcat[].
*
* IF sy-subrc EQ 0.
* CALL FUNCTION 'LVC_TRANSFER_FROM_KKBLO'
* EXPORTING
* it_fieldcat_kkblo = lt_fieldcat[]
* IMPORTING
* et_fieldcat_lvc = gt_fieldcat[].
* ENDIF.
*
*
*ENDFORM. " GETTING_CATALOG
*
**&---------------------------------------------------------------------
**
**& Form UPDATE_DATABASE
**&---------------------------------------------------------------------
**
** text
**----------------------------------------------------------------------
**
** --> p1 text
** <-- p2 text
**----------------------------------------------------------------------
**
*FORM update_database .
* MODIFY sflight FROM TABLE gt_modified_rows.
* IF sy-subrc EQ 0.
* MESSAGE 'SAVE OK' TYPE 'I'.
* ENDIF.
*ENDFORM. " UPDATE_DATABASE
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
463 | INCLUDE Z17_04_0100_PBOO01 | 가능 | 2025.09.22 | 0 |
462 | REPORT Z17_04 | 가능 | 2025.09.22 | 1 |
461 | REPORT Z17_03 | 가능 | 2025.09.22 | 0 |
460 | REPORT Z17_02 | 가능 | 2025.09.22 | 0 |
459 | REPORT Z17_01 | 가능 | 2025.09.22 | 0 |
458 | REPORT Z16_09 | 가능 | 2025.09.22 | 1 |
457 | REPORT Z16_08 | 가능 | 2025.09.22 | 0 |
456 | REPORT Z16_07 | 가능 | 2025.09.22 | 0 |
455 | REPORT Z16_06 | 가능 | 2025.09.22 | 0 |
454 | REPORT Z16_05 | 가능 | 2025.09.22 | 0 |
453 | REPORT Z16_04 | 가능 | 2025.09.22 | 1 |
452 | REPORT Z16_03 | 가능 | 2025.09.22 | 0 |
451 | REPORT z16_02 | 가능 | 2025.09.22 | 0 |
450 | REPORT z16_01 | 가능 | 2025.09.22 | 0 |
449 | REPORT Z15_28 | 가능 | 2025.09.22 | 1 |
448 | REPORT Z15_27 | 가능 | 2025.09.22 | 0 |
447 | REPORT Z15_26 | 가능 | 2025.09.22 | 0 |
446 | REPORT Z15_25 | 가능 | 2025.09.22 | 0 |
» | REPORT Z15_24 | 가능 | 2025.09.22 | 0 |
444 | REPORT Z15_23 | 가능 | 2025.09.22 | 0 |