Estructura del Programa Principal
REPORT zdemo_alv_template.
INCLUDE zdemo_alv_template_definitions. INCLUDE zdemo_alv_template_data. INCLUDE zdemo_alv_template_selection. INCLUDE zdemo_alv_template_forms. INCLUDE zdemo_alv_template_pbo. INCLUDE zdemo_alv_template_pai.
START-OF-SELECTION. PERFORM retrieve_data.
END-OF-SELECTION. CALL SCREEN 100.
Definición de Clase de Eventos
*&---------------------------------------------------------------------*
*& Definición de la clase para manejo de eventos
*&---------------------------------------------------------------------*
CLASS lcl_event_handler DEFINITION.
PUBLIC SECTION.
ENDCLASS.
*&---------------------------------------------------------------------*
*& Implementación de la clase de eventos
*&---------------------------------------------------------------------*
CLASS lcl_event_handler IMPLEMENTATION.
ENDCLASS.
Declaraicones Globales de Dattos
TABLES: sflight.
*& Tabla global para almacenar datos
DATA: gt_flight_data TYPE TABLE OF sflight.
*& Variables globales de control
DATA: gv_user_command TYPE sy-ucomm,
gv_column_index TYPE i.
*& Variables globales para ALV Grid
DATA: go_alv_grid TYPE REF TO cl_gui_alv_grid,
go_container TYPE REF TO cl_gui_docking_container,
gs_layout_config TYPE lvc_s_layo,
gt_field_catalog TYPE lvc_t_fcat,
gs_field_catalog TYPE lvc_s_fcat,
gt_hidden_buttons TYPE ui_functions.
DATA: gs_display_variant TYPE disvariant.
*& Macro para agregar campos al catálogo
DEFINE add_field_to_catalog.
CLEAR gs_field_catalog.
gv_column_index = gv_column_index + 1.
gs_field_catalog-col_pos = gv_column_index.
gs_field_catalog-fieldname = &1.
gs_field_catalog-reptext = &2.
gs_field_catalog-outputlen = &3.
gs_field_catalog-no_zero = &4.
gs_field_catalog-decimals = &5.
gs_field_catalog-just = &6.
gs_field_catalog-hotspot = &7.
gs_field_catalog-ref_table = &8.
gs_field_catalog-ref_field = &9.
APPEND gs_field_catalog TO gt_field_catalog.
END-OF-DEFINITION.
Pantalla de Selección
SELECTION-SCREEN BEGIN OF BLOCK selection_block WITH FRAME TITLE text-001.
PARAMETERS: p_airline_code TYPE sflight-carrid.
SELECTION-SCREEN END OF BLOCK selection_block.
Subrutinas y Formularios
*&---------------------------------------------------------------------*
*& Form retrieve_data
*&---------------------------------------------------------------------*
*& Obtención de datos de la tabla SFLIGHT
*&---------------------------------------------------------------------*
FORM retrieve_data .
" Lógica para consultar y llenar gt_flight_data
ENDFORM.
*&---------------------------------------------------------------------*
*& Form build_field_catalog
*&---------------------------------------------------------------------*
*& Construcción del catálogo de campos para ALV
*&---------------------------------------------------------------------*
FORM build_field_catalog .
CLEAR: gv_column_index, gs_field_catalog, gt_field_catalog.
gv_column_index = 1.
add_field_to_catalog: 'CARRID' 'Código Aerolínea' '5' '' '' 'L' '' '' '',
'CONNID' 'Número Conexión' '8' '' '' 'L' '' '' '',
'FLDATE' 'Fecha Vuelo' '10' '' '' 'C' '' '' '',
'PRICE' 'Tarifa' '10' '' '' 'R' '' 'SFLIGHT' 'PRICE' ,
'CURRENCY' 'Moneda' '5' '' '' 'C' '' 'SFLIGHT' 'CURRENCY'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form configure_layout
*&---------------------------------------------------------------------*
*& Configuración del diseño de visualización ALV
*&---------------------------------------------------------------------*
FORM configure_layout .
CLEAR: gs_layout_config.
gs_layout_config-zebra = 'X'.
gs_layout_config-cwidth_opt = 'X'.
gs_layout_config-sel_mode = 'A'.
CLEAR: gs_display_variant.
gs_display_variant-report = sy-repid.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form exclude_toolbar_buttons
*&---------------------------------------------------------------------*
*& Exclusión de botones específicos de la barra de herramientas ALV
*&---------------------------------------------------------------------*
FORM exclude_toolbar_buttons TABLES pt_exclude TYPE ui_functions .
DATA: ls_exclude_button TYPE ui_func.
ls_exclude_button = cl_gui_alv_grid=>mc_fc_print.
APPEND ls_exclude_button TO pt_exclude.
ls_exclude_button = cl_gui_alv_grid=>mc_fc_loc_append_row.
APPEND ls_exclude_button TO pt_exclude.
ls_exclude_button = cl_gui_alv_grid=>mc_fc_loc_copy_row.
APPEND ls_exclude_button TO pt_exclude.
ls_exclude_button = cl_gui_alv_grid=>mc_fc_loc_cut.
APPEND ls_exclude_button TO pt_exclude.
ls_exclude_button = cl_gui_alv_grid=>mc_fc_loc_delete_row.
APPEND ls_exclude_button TO pt_exclude.
ls_exclude_button = cl_gui_alv_grid=>mc_fc_loc_insert_row.
APPEND ls_exclude_button TO pt_exclude.
ls_exclude_button = cl_gui_alv_grid=>mc_fc_loc_move_row.
APPEND ls_exclude_button TO pt_exclude.
ls_exclude_button = cl_gui_alv_grid=>mc_fc_loc_paste.
APPEND ls_exclude_button TO pt_exclude.
ls_exclude_button = cl_gui_alv_grid=>mc_fc_loc_paste_new_row.
APPEND ls_exclude_button TO pt_exclude.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form display_alv_grid
*&---------------------------------------------------------------------*
*& Visualización del Grid ALV con datos y configuración
*&---------------------------------------------------------------------*
FORM display_alv_grid .
DATA: lo_event_handler TYPE REF TO lcl_event_handler.
FIELD-SYMBOLS: <lfs_output_table> TYPE STANDARD TABLE.
ASSIGN gt_flight_data TO <lfs_output_table>.
CHECK <lfs_output_table> IS ASSIGNED.
CREATE OBJECT go_container
EXPORTING
repid = sy-repid
dynnr = sy-dynnr
side = cl_gui_docking_container=>dock_at_bottom
extension = 500.
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_alv_grid
EXPORTING
i_parent = go_container.
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_alv_grid->set_table_for_first_display
EXPORTING
i_save = 'A'
is_layout = gs_layout_config
it_toolbar_excluding = gt_hidden_buttons
is_variant = gs_display_variant
CHANGING
it_outtab = <lfs_output_table>
it_fieldcatalog = gt_field_catalog.
CREATE OBJECT lo_event_handler.
ENDFORM.
FORM refresh_alv_display USING po_grid TYPE REF TO cl_gui_alv_grid.
DATA: ls_stable_refresh TYPE lvc_s_stbl.
ls_stable-refresh = 'X'.
ls_stable-col = 'X'.
CALL METHOD po_grid->set_frontend_layout
EXPORTING
is_layout = gs_layout_config.
CALL METHOD po_grid->refresh_table_display
EXPORTING
is_stable = ls_stable_refresh.
ENDFORM.</lfs_output_table></lfs_output_table></lfs_output_table></lfs_output_table>
Módulos de Proceso de Pantalla (PBO)
*&---------------------------------------------------------------------*
*& Module set_status OUTPUT
*&---------------------------------------------------------------------*
MODULE set_status OUTPUT.
SET PF-STATUS 'STATUS_0100'.
SET TITLEBAR 'TITLE_0100'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module initialize_alv OUTPUT
*&---------------------------------------------------------------------*
MODULE initialize_alv OUTPUT.
IF go_container IS NOT BOUND.
PERFORM build_field_catalog.
PERFORM configure_layout.
PERFORM exclude_toolbar_buttons TABLES gt_hidden_buttons.
PERFORM display_alv_grid.
ELSE.
PERFORM refresh_alv_display USING go_alv_grid.
ENDIF.
ENDMODULE.
Módulos de Proceso de Pantalla (PAI)
*&---------------------------------------------------------------------*
*& Module handle_exit_command INPUT
*&---------------------------------------------------------------------*
MODULE handle_exit_command INPUT.
DATA: lv_command TYPE sy-ucomm.
lv_command = gv_user_command.
CLEAR: gv_user_command.
CASE lv_command.
WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.
LEAVE TO SCREEN 0.
ENDCASE.
ENDMODULE.