This sample show how we use cl_gui_alv_grid protected events... When you execute this example
you can sort your data when you single click on column header...
P.S. Please refer this site when you are using my examples. Thanks
*&---------------------------------------------------------------------*
*& Report ZUS_SDN_ALV_SINGLE_COL_HEADER
*&
*&---------------------------------------------------------------------*
*& Thread: cl_gui_alv_grid protected events
*& https://forums.sdn.sap.com/thread.jspa?threadID=914943&tstart=0
*&---------------------------------------------------------------------*
REPORT ZUS_SDN_ALV_SINGLE_COL_HEADER.
TYPE-POOLS: abap, cntb, icon.
TYPES: BEGIN OF ty_s_outtab.
INCLUDE TYPE vbak AS vbak.
TYPES: celltab TYPE lvc_t_styl.
TYPES: END OF ty_s_outtab.
TYPES: ty_t_outtab TYPE STANDARD TABLE OF ty_s_outtab
WITH DEFAULT KEY.
DATA: gt_outtab TYPE ty_t_outtab.
DATA:
gd_okcode TYPE ui_func,
gd_repid TYPE syrepid,
gt_fcat TYPE lvc_t_fcat,
gs_layout TYPE lvc_s_layo,
gs_variant TYPE disvariant,
*
go_docking TYPE REF TO cl_gui_docking_container,
go_grid TYPE REF TO cl_gui_alv_grid.
*----------------------------------------------------------------------*
* CLASS lcl_eventhandler DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_eventhandler DEFINITION.
public section.
class-methods:
handle_user_command
for EVENT user_command of cl_gui_alv_grid
importing
e_ucomm
sender.
ENDCLASS. "lcl_eventhandler DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_eventhandler IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_eventhandler IMPLEMENTATION.
method handle_user_command.
break-point.
endmethod.
ENDCLASS. "lcl_eventhandler IMPLEMENTATION
PARAMETER:
p_active as CHECKBOX.
START-OF-SELECTION.
PERFORM init_controls.
PERFORM build_fieldcatalog.
PERFORM set_layout_and_variant.
PERFORM build_outtab.
PERFORM display_outtab.
** set handler:
** lcl_eventhandler=>handle_user_command for go_grid.
gd_repid = syst-repid.
CALL METHOD go_docking->link
EXPORTING
repid = gd_repid
dynnr = '0100'
* CONTAINER =
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
lifetime_dynpro_dynpro_link = 3
OTHERS = 4.
IF sy-subrc 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL SCREEN '0100'.
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
SET PF-STATUS 'MAIN_0100'.
* SET TITLEBAR 'xxx'.
CALL METHOD go_grid->refresh_table_display
* EXPORTING
* IS_STABLE =
* I_SOFT_REFRESH =
EXCEPTIONS
finished = 1
OTHERS = 2.
IF sy-subrc 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDMODULE. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
TRANSLATE gd_okcode TO UPPER CASE.
CASE gd_okcode.
WHEN 'BACK' OR
'EXIT' OR
'CANC'.
SET SCREEN 0. LEAVE SCREEN.
WHEN 'APPEND'.
PERFORM append_row.
WHEN 'EDIT'.
PERFORM edit_row.
WHEN OTHERS.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
*& Form INIT_CONTROLS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM init_controls .
CREATE OBJECT go_docking
EXPORTING
parent = cl_gui_container=>screen0
* REPID =
* DYNNR =
* SIDE = DOCK_AT_LEFT
* EXTENSION = 50
* STYLE =
* LIFETIME = lifetime_default
* CAPTION =
* METRIC = 0
ratio = 90
* NO_AUTODEF_PROGID_DYNNR =
* NAME =
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link = 5
OTHERS = 6.
IF sy-subrc 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL METHOD go_docking->set_extension
EXPORTING
extension = 99999
EXCEPTIONS
cntl_error = 1
OTHERS = 2.
IF sy-subrc 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CREATE OBJECT go_grid
EXPORTING
* I_SHELLSTYLE = 0
* I_LIFETIME =
i_parent = go_docking
* I_APPL_EVENTS = space
* I_PARENTDBG =
* I_APPLOGPARENT =
* I_GRAPHICSPARENT =
* I_NAME =
* I_FCAT_COMPLETE = SPACE
EXCEPTIONS
error_cntl_create = 1
error_cntl_init = 2
error_cntl_link = 3
error_dp_create = 4
OTHERS = 5.
IF sy-subrc 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " INIT_CONTROLS
*&---------------------------------------------------------------------*
*& Form build_fieldcatalog
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM build_fieldcatalog .
REFRESH: gt_fcat.
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
* I_BUFFER_ACTIVE =
i_structure_name = 'VBAK'
* I_CLIENT_NEVER_DISPLAY = 'X'
* I_BYPASSING_BUFFER =
* I_INTERNAL_TABNAME =
CHANGING
ct_fieldcat = gt_fcat
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
IF sy-subrc 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " build_fieldcatalog
*&---------------------------------------------------------------------*
*& Form set_layout_and_variant
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM set_layout_and_variant .
CLEAR: gs_layout,
gs_variant.
gs_layout-zebra = abap_true.
gs_layout-cwidth_opt = abap_true.
gs_layout-edit = abap_true. " Grid editable
gs_layout-stylefname = 'CELLTAB'. " set editable/non-editable
gs_layout-sgl_clk_hd = p_active. " Single click in (col) header
ENDFORM. " set_layout_and_variant
*&---------------------------------------------------------------------*
*& Form BUILD_OUTTAB
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM build_outtab .
* define local data
DATA: ls_outtab TYPE ty_s_outtab,
ls_fcat TYPE lvc_s_fcat,
ls_celltab TYPE lvc_s_styl.
SELECT * FROM vbak INTO CORRESPONDING FIELDS OF TABLE gt_outtab
UP TO 100 ROWS.
" Editability of the initially displayed rows is inactivated
CLEAR: ls_outtab.
LOOP AT gt_fcat INTO ls_fcat.
ls_celltab-fieldname = ls_fcat-fieldname.
ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
INSERT ls_celltab INTO TABLE ls_outtab-celltab. " sorted itab !!!
ENDLOOP.
MODIFY gt_outtab FROM ls_outtab
TRANSPORTING celltab
WHERE ( table_line IS NOT INITIAL ).
ENDFORM. " BUILD_OUTTAB
*&---------------------------------------------------------------------*
*& Form APPEND_ROW
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM append_row .
* define local data
DATA: ls_outtab TYPE ty_s_outtab,
ls_fcat TYPE lvc_s_fcat,
ls_celltab TYPE lvc_s_styl.
" Editability of the initially displayed rows is inactivated
CLEAR: ls_outtab.
LOOP AT gt_fcat INTO ls_fcat.
ls_celltab-fieldname = ls_fcat-fieldname.
ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
INSERT ls_celltab INTO TABLE ls_outtab-celltab. " sorted itab !!!
ENDLOOP.
APPEND ls_outtab TO gt_outtab.
ENDFORM. " APPEND_ROW
*&---------------------------------------------------------------------*
*& Form EDIT_ROW
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM edit_row .
* define local data
DATA: ls_outtab TYPE ty_s_outtab,
ls_row TYPE lvc_s_row,
lt_rows TYPE lvc_t_row.
CALL METHOD go_grid->get_selected_rows
IMPORTING
et_index_rows = lt_rows
* ET_ROW_NO =
.
IF ( lt_rows IS INITIAL ).
MESSAGE 'Select at least a single row' TYPE 'S'.
RETURN.
ENDIF.
REFRESH: ls_outtab-celltab.
LOOP AT lt_rows INTO ls_row.
MODIFY gt_outtab FROM ls_outtab INDEX ls_row-index
TRANSPORTING celltab.
ENDLOOP.
ENDFORM. " EDIT_ROW
*&---------------------------------------------------------------------*
*& Form DISPLAY_OUTTAB
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM display_outtab .
CALL METHOD go_grid->set_table_for_first_display
EXPORTING
* I_BUFFER_ACTIVE =
* I_BYPASSING_BUFFER =
* I_CONSISTENCY_CHECK =
* I_STRUCTURE_NAME =
is_variant = gs_variant
i_save = 'A'
* I_DEFAULT = 'X'
is_layout = gs_layout
* IS_PRINT =
* IT_SPECIAL_GROUPS =
* IT_TOOLBAR_EXCLUDING =
* IT_HYPERLINK =
* IT_ALV_GRAPHICS =
* IT_EXCEPT_QINFO =
* IR_SALV_ADAPTER =
CHANGING
it_outtab = gt_outtab
it_fieldcatalog = gt_fcat
* IT_SORT =
* IT_FILTER =
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4.
IF sy-subrc 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " DISPLAY_OUTTAB
No comments yet
Comments feed for this article