*&---------------------------------------------------------------------*
*& Report ZTEST025
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZTEST025.
TABLES:spfli.
***"可编辑
****----------------------------------------------------------------------*
**** Define the Local class inheriting from the CL_SALV_MODEL_LIST
**** to get an access of the model, controller and adapter which inturn
**** provides the Grid Object
****----------------------------------------------------------------------*
***CLASS lcl_salv_model DEFINITION INHERITING FROM cl_salv_model_list.
***
*** PUBLIC SECTION.
*** DATA: o_control TYPE REF TO cl_salv_controller_model,
*** o_adapter TYPE REF TO cl_salv_adapter.
***
*** METHODS:
*** grabe_model
*** IMPORTING
*** io_model TYPE REF TO cl_salv_model,
***
*** grabe_controller,
***
*** grabe_adapter.
***
***
*** PRIVATE SECTION.
*** DATA: lo_model TYPE REF TO cl_salv_model.
***
***ENDCLASS. "LCL_SALV_MODEL DEFINITION
****----------------------------------------------------------------------*
**** LCL_SALV_MODEL implementation
****----------------------------------------------------------------------*
***CLASS lcl_salv_model IMPLEMENTATION.
***
*** METHOD grabe_model.
***
**** save the model
*** lo_model = io_model.
***
*** ENDMETHOD. "grabe_model
***
*** METHOD grabe_controller.
***
**** save the controller
*** o_control = lo_model->r_controller.
***
*** ENDMETHOD. "grabe_controller
***
*** METHOD grabe_adapter.
***
**** save the adapter from controller
*** o_adapter ?= lo_model->r_controller->r_adapter.
***
*** ENDMETHOD. "grabe_adapter
***
***ENDCLASS. "LCL_SALV_MODEL IMPLEMENTATION
CLASS l_cl_handle_events DEFINITION.
PUBLIC SECTION.
METHODS: on_user_command FOR EVENT added_function OF cl_salv_events_table"新加按钮
IMPORTING e_salv_function.
METHODS: on_after_func FOR EVENT AFTER_SALV_FUNCTION OF CL_SALV_EVENTS_TABLE"标准按钮操作后
IMPORTING e_salv_function.
METHODS: on_double_click FOR EVENT double_click OF cl_salv_events_table"双击
IMPORTING
row "事件触发所在的行号
column."事件触发所在的列名
ENDCLASS.
CLASS l_cl_handle_events IMPLEMENTATION.
METHOD on_user_command.
PERFORM handle_user_command USING e_salv_function.
ENDMETHOD.
METHOD on_after_func.
PERFORM handle_after_func USING e_salv_function.
ENDMETHOD.
METHOD on_double_click.
PERFORM dbclick_user_command USING row column.
ENDMETHOD.
ENDCLASS.
DATA: gt_itab like TABLE OF spfli WITH HEADER LINE.
DATA: gt_table type REF TO cl_salv_table,
gr_function type REF TO CL_SALV_FUNCTIONS_LIST,
gr_display TYPE REF TO cl_salv_display_settings,
gr_layout TYPE REF TO cl_salv_layout,
gs_program TYPE salv_s_layout_key,"该结构包含了布局变式所属程序名
gr_columns TYPE REF TO CL_SALV_COLUMNS_TABLE,
gr_column TYPE REF TO CL_SALV_COLUMN,
gr_selection TYPE REF TO cl_salv_selections,
lr_events TYPE REF TO CL_SALV_EVENTS_TABLE.
***"可编辑
***DATA: o_salv_model TYPE REF TO lcl_salv_model.
PARAMETERS : l_CONNID LIKE spfli-connid.
START-OF-SELECTION.
if l_CONNID = space.
SELECT
* FROM spfli
INTO CORRESPONDING FIELDS OF TABLE gt_itab.
else.
SELECT
* FROM spfli
INTO CORRESPONDING FIELDS OF TABLE gt_itab
WHERE connid = l_connid.
endif.
"全屏ALV
cl_salv_table=>factory( IMPORTING R_SALV_TABLE = gt_table
CHANGING t_table = gt_itab[] ).
gr_function = gt_table->get_functions( )."使用所有按钮function
gr_function->set_all( 'X' ).
"
gt_table->set_screen_status(
EXPORTING
REPORT = sy-repid
PFSTATUS = 'ZTEST025' "GUI状态,添加了ZTEST按钮
SET_FUNCTIONS = gt_table->c_functions_all )."显示所有通用的预设按钮
"set_functions = gt_table->c_functions_default )."显示基本默认选择性的预设按钮
"set_functions = gt_table->c_functions_none )."所有预设按钮都将不会显示
gr_display = gt_table->get_display_settings( ).
gr_display->set_striped_pattern( cl_salv_display_settings=>true ).
gr_display->set_list_header('Header Test').
gr_layout = gt_table->get_layout( ).
gs_program-report = sy-repid.
gr_layout->set_key( gs_program )."设置布局保存为变式时,这些变式应属性此Key(本程序名)
gr_layout->set_save_restriction( cl_salv_layout=>restrict_none )."允许保存布局为变式
"=====获取事件对象
DATA: lr_event TYPE REF TO cl_salv_events_table.
lr_event = gt_table->get_event( ).
* lr_event->RAISE_AFTER_SALV_FUNCTION( '&OAD' ).
"=====事件注册
DATA: lr_handle_event TYPE REF TO l_cl_handle_events.
CREATE OBJECT lr_handle_event.
SET HANDLER lr_handle_event->on_user_command FOR lr_event."新按钮
SET HANDLER lr_handle_event->on_double_click FOR lr_event."标准按钮操作后
SET HANDLER lr_handle_event->on_after_func FOR lr_event."双击
* gr_function->add_function(
* name = 'PRING'
* TEXT = '打印'
* TOOLTIP = 'haha'
* POSITION = if_salv_c_function_position=>right_of_salv_functions )."只适用与可控模式
* gt_table->set_screen_popup( "以弹出框显示SALV 可控模式(利用控制器的模式)的SALV是不能以弹出框来显示的
* start_column = 1
* end_column = 500
* start_line = 1
* end_line = 50 ).
gr_columns = gt_table->GET_COLUMNS( )."字段标签
gr_columns->set_optimize( 'X' ).
gr_column ?= gr_columns->get_column( 'CONNID' ).
gr_column->set_long_text( '列名222').
"SALV行列选择模式
gr_selection = gt_table->get_selections( ).
gr_selection->set_selection_mode( if_salv_c_selection_mode=>row_column )."可以以行、列的方式进行选择
***"可编辑
****...Get Model Object ...............................................
*** DATA: lo_alv_mod TYPE REF TO cl_salv_model.
***
**** Narrow casting
*** lo_alv_mod ?= gt_table.
***
**** object for the local inherited class from the CL_SALV_MODEL_LIST
*** CREATE OBJECT o_salv_model.
***
**** grabe model to use it later
*** CALL METHOD o_salv_model->grabe_model
*** EXPORTING
*** io_model = lo_alv_mod.
gt_table->display( ).
*&---------------------------------------------------------------------*
*& Form HANDLE_USER_COMMAND
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_E_SALV_FUNCTION text
*----------------------------------------------------------------------*
FORM HANDLE_USER_COMMAND USING P_E_SALV_FUNCTION.
case P_E_SALV_FUNCTION.
when 'ZTEST'.
message '按钮测试i' type 'I'.
endcase.
GT_TABLE->REFRESH( ).
ENDFORM. " HANDLE_USER_COMMAND
*&---------------------------------------------------------------------*
*& Form HANDLE_AFTER_FUNC
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_E_SALV_FUNCTION text
*----------------------------------------------------------------------*
FORM HANDLE_AFTER_FUNC USING P_E_SALV_FUNCTION.
case P_E_SALV_FUNCTION.
when '&OAD'.
message '按钮测试i' type 'I'.
endcase.
ENDFORM. " HANDLE_AFTER_FUNC
*&---------------------------------------------------------------------*
*& Form DBCLICK_USER_COMMAND
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_E_SALV_FUNCTION text
*----------------------------------------------------------------------*
FORM DBCLICK_USER_COMMAND USING p_row TYPE i
p_column TYPE lvc_fname.
DATA: l_row TYPE char10,
p_text type string.
WRITE p_row TO l_row LEFT-JUSTIFIED.
CONCATENATE l_row '行,' '列名:' p_column p_text INTO p_text SEPARATED BY space.
MESSAGE p_text type 'I'.
*** "可编辑
*** DATA: lo_grid TYPE REF TO cl_gui_alv_grid,
*** lo_full_adap TYPE REF TO cl_salv_fullscreen_adapter.
***
*** DATA: ls_layout TYPE lvc_s_layo.
***
**** Contorller
**** CALL METHOD lo_report->
*** o_salv_model->grabe_controller( ).
***
**** Adapter
**** CALL METHOD lo_report->
*** o_salv_model->grabe_adapter( ).
***
**** Fullscreen Adapter (Down Casting)
*** lo_full_adap ?= o_salv_model->o_adapter.
***
**** Get the Grid
*** lo_grid = lo_full_adap->get_grid( ).
***
**** Got the Grid .. ?
*** IF lo_grid IS BOUND.
***
**** Editable ALV
*** ls_layout-edit = 'X'.
***
**** Set the front layout of ALV
*** CALL METHOD lo_grid->set_frontend_layout
*** EXPORTING
*** is_layout = ls_layout.
***
**** refresh the table
*** CALL METHOD lo_grid->refresh_table_display.
***
*** ENDIF.
ENDFORM. " DBCLICK_USER_COMMAND
OO:CL_SALV_TABLE练习
最新推荐文章于 2024-11-12 15:52:54 发布