SAP: 创建ALV GRID容器
SAP 创建ALV GRID容器
1、主程序
*&---------------------------------------------------------------------*
*& Report Z15_12
*& 可执行程序
*&---------------------------------------------------------------------*
*&
*& 创建 ALV GRID 容器
*& 注意每个程序都需要激活方可执行
*&---------------------------------------------------------------------*
REPORT Z15_12.
DATA: CON1_REF TYPE REF TO CL_GUI_CUSTOM_CONTAINER. " 定义容器, 参照 自定义控件"其中自定义控件命名为CON1
DATA: G_GRID TYPE REF TO CL_GUI_ALV_GRID. "定义ALV变量,参照 CL_GUI_ALV_GRID类"
DATA: GS_VARIANT like DISVARIANT, "" 列表变量
gs_cs_variant like disvariant.
DATA: GT_SFLIGHT TYPE TABLE OF SFLIGHT. " 要显示在屏幕上的内表
DATA: gs_layout type lvc_s_layo .
DATA: gt_toolbar TYPE ui_functions .
DATA: gt_sort TYPE lvc_t_sort. " 排序
PARAMETERS: p_var like disvariant-variant. " 参数变量
*& 设置GRID布局
PERFORM setting_layout CHANGING gs_layout .
*& 根据用户显示或隐藏布局按钮
PERFORM setting_toolbar.
*& 排序
PERFORM setting_sort.
*& 显示检索帮助
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_var.
*&
gs_variant-report = sy-repid.
CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
EXPORTING
IS_VARIANT = gs_variant
* I_TABNAME_HEADER =
* I_TABNAME_ITEM =
* IT_DEFAULT_FIELDCAT =
I_SAVE = 'A'
* I_DISPLAY_VIA_GRID = ' '
IMPORTING
* E_EXIT =
ES_VARIANT = gs_variant
EXCEPTIONS
NOT_FOUND = 1
PROGRAM_ERROR = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
p_var = gs_variant-variant .
ENDIF.
FORM setting_layout CHANGING p_layout type lvc_s_layo.
p_layout-cwidth_opt = 'X' . "自动调节长度
p_layout-grid_title = 'get_current_cell Method TEST'. "标题栏"
p_layout-sel_mode = 'D'. " 选择模式:可选择多行"
p_layout-zebra = 'X'. "指定条纹(STRIPE)属性"
ENDFORM. " setting_layout.
*& 根据用户显示或隐藏布局按钮
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.
DATA: ls_sort TYPE lvc_s_sort.
ls_sort-spos = '1'. " 排序顺序 ,整形数字
ls_sort-fieldname = 'CARRID'. " 排序字段名称
ls_sort-up = 'X' . " 升序 或 LS_SORT-DOWN = 'X' "降序
ls_sort-subtot = 'X' . " 显示合计
APPEND ls_sort to gt_sort .
ENDFORM. " setting_sort.
CLASS lcl_event_receiver DEFINITION.
PUBLIC SECTION.
" 声明双击事件方法
METHODS: handle_double_click
FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID
IMPORTING e_row e_column.
ENDCLASS.
CLASS lcl_event_receiver IMPLEMENTATION.
METHOD handle_double_click. "双击事件方法的实现"
LEAVE TO SCREEN 0 .
ENDMETHOD.
ENDCLASS. " LCL_event_receiver.
DATA: event_receiver type ref to lcl_event_receiver .
*CREATE OBJECT event_receiver.
* 注册事件Handler方法
*SET HANDLER event_receiver->handle_double_click FOR g_grid .
*&
*& 查询数据,然后调用屏幕100.
START-OF-SELECTION.
SELECT * FROM SFLIGHT
INTO TABLE GT_SFLIGHT UP TO 25 ROWS.
CALL SCREEN 100.
gs_variant-report = sy-repid.
gs_variant-username = sy-uname.
*&
*& 创建 AVL控件
INCLUDE Z15_12_PBO.
*INCLUDE Z15_11_PBO.
* INCLUDE Z15_10_PBO.
*
MODULE user_command_0100 INPUT.
DATA: l_row type i,
l_value type c,
l_col type i,
ls_row type lvc_s_row,
ls_col type lvc_s_col,
ls_roid type lvc_s_roid.
DATA: ls_scroll type lvc_s_stbl.
ls_scroll-row = 'X'.
ls_scroll-col = 'X'.
*& 模式-> 选择:ABAP对象模式 ,(继续)-> 调用方法, 在接口栏=G_GRID, 类/接口栏= CL_GUI_ALV_GRID, 方法栏= get_current_cell
CALL METHOD G_GRID->GET_CURRENT_CELL
IMPORTING
E_ROW = l_row
E_VALUE = l_value
E_COL = l_col
ES_ROW_ID = ls_row
ES_COL_ID = ls_col
ES_ROW_NO = ls_roid.
*& 重新查询已经显示在ALV的输出表时使用的方法。
CALL METHOD G_GRID->REFRESH_TABLE_DISPLAY
EXPORTING
IS_STABLE = ls_scroll
I_SOFT_REFRESH = 'X'
* EXCEPTIONS
* FINISHED = 1
* others = 2
.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
ENDMODULE. " user_command_0100.
2、 创建 PBO 子程序
命名为 Z15_12_PBO
*----------------------------------------------------------------------*
***INCLUDE Z15_12_PBO.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module INIT_CON OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE INIT_CON OUTPUT.
*& 1、创建容器对象
IF CON1_REF IS INITIAL. " 如果容器是空的,创建容器对象"
CREATE OBJECT CON1_REF
EXPORTING
CONTAINER_NAME = 'CON1'.
*& 2、创建 ALV GRID 控件 对象
CREATE OBJECT G_GRID
EXPORTING
I_PARENT = CON1_REF .
* EXCEPTIONS
* error_cnt1_create = 1
* error_cnt1_init = 2
* error_cnt1_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.
ENDIF. " CON1_REF"
CREATE OBJECT event_receiver.
* 注册事件Handler方法
SET HANDLER event_receiver->handle_double_click FOR g_grid .
*&
*& 模式-> 选择:ABAP对象模式 ,(继续)-> 调用方法, 在接口栏=G_GRID, 类/接口栏= CL_GUI_ALV_GRID, 方法栏= SET_TABLE_FOR_FIRST_DISPLAY
*& 3、 ALV GRID显示数据方法
CALL METHOD g_grid->set_table_for_first_display
EXPORTING
I_STRUCTURE_NAME = 'SFLIGHT'
i_save = 'A'
is_variant = gs_variant
i_default = ' '
is_layout = gs_layout
it_toolbar_excluding = gt_toolbar
CHANGING
It_OUTTAB = GT_SFLIGHT
it_sort = gt_sort.
ENDMODULE. " INIT_CON OUTPUT
3、屏幕逻辑流程序
PROCESS BEFORE OUTPUT. * MODULE STATUS_0100. MODULE init_con. * PROCESS AFTER INPUT. MODULE USER_COMMAND_0100.
优质生活从拆开始
浙公网安备 33010602011771号