您的位置:首页 > 其它

ALV OO:单击事件-双击事件-自定义按钮事件(示例)

2015-08-09 16:45 423 查看
程序运行效果:







1).新建100屏幕

PROCESSBEFOREOUTPUT.
MODULESTATUS_0100.
MODULEINIT_CON.
PROCESSAFTERINPUT.
MODULEUSER_EXIT_0100ATEXIT-COMMAND.


2).在100屏幕上画自定义控件,命名为CUS01

3).程序代码:

REPORTztest_sy09.
DATA:gs_dataTYPEspfli.
DATA:gt_dataLIKETABLEOFgs_data.
DATA:g_con01TYPEREFTOcl_gui_custom_container.
DATA:g_grid01TYPEREFTOcl_gui_alv_grid.
DATA:gs_fieldcatTYPElvc_s_fcat.
DATA:gt_fieldcatTYPElvc_t_fcat.
CONSTANTS:g_cus01TYPEscrfnameVALUE'CUS01'.
*----------------------------------------------------------------------*
*CLASScl_event_receiverDEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASScl_event_receiverDEFINITION.
PUBLICSECTION.
"声明单击事件的方法
METHODShandle_hotspot_click
FOREVENThotspot_clickOFcl_gui_alv_grid
IMPORTINGe_row_ide_column_id.
"声明双击事件方法
METHODShandle_double_click
FOREVENTdouble_clickOFcl_gui_alv_grid
IMPORTINGe_rowe_column.
"声明Toolbar事件方法
METHODShandle_toolbar
FOREVENTtoolbarOFcl_gui_alv_grid
IMPORTINGe_objecte_interactive.
"声明USER-COMMAND事件方法
METHODShandle_command
FOREVENTuser_commandOFcl_gui_alv_grid
IMPORTINGe_ucomm.
ENDCLASS."cl_event_receiverDEFINITION
*----------------------------------------------------------------------*
*CLASScl_event_receiverIMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASScl_event_receiverIMPLEMENTATION.
"单击事件方法的实现
METHODhandle_hotspot_click.
CONDENSEe_row_idNO-GAPS.
CONDENSEe_column_idNO-GAPS.
MESSAGEi001(00)WITH'单击事件->行号:'e_row_id'、列名:'e_column_id.
ENDMETHOD."handle_HOTSPOT_CLICK
"双击事件方法的实现
METHODhandle_double_click.
CONDENSEe_rowNO-GAPS.
CONDENSEe_columnNO-GAPS.
MESSAGEi001(00)WITH'双击事件->行号:'e_row'、列名:'e_column.
ENDMETHOD."handle_double_click
"实现Toolbar事件方法
METHODhandle_toolbar.
DATA:ls_toolbarTYPEstb_button.
CLEAR:ls_toolbar.
ls_toolbar-butn_type=3."分隔符
APPENDls_toolbarTOe_object->mt_toolbar.
CLEAR:ls_toolbar.
ls_toolbar-function='DISP'."功能码
ls_toolbar-icon=icon_display."图标名称
ls_toolbar-quickinfo='显示'."图标的提示信息
ls_toolbar-butn_type=0."0表示正常按钮
ls_toolbar-disabled=''."X表示灰色,不可用
ls_toolbar-text='按钮1'."按钮上显示的文本
APPENDls_toolbarTOe_object->mt_toolbar.
ENDMETHOD."handle_toolbar
"实现USER-COMMAND事件方法
METHODhandle_command.
CASEe_ucomm.
WHEN'DISP'.
MESSAGEi001(00)WITH'Toolbar事件+USER-COMMAND事件'.
ENDCASE.
ENDMETHOD."HANDLE_COMMAND
ENDCLASS."cl_event_receiverIMPLEMENTATION
DATA:event_receiverTYPEREFTOcl_event_receiver.
START-OF-SELECTION.
PERFORMget_data.
CALLSCREEN100.
*&---------------------------------------------------------------------*
*&FormGET_DATA
*&---------------------------------------------------------------------*
*text获取数据
*----------------------------------------------------------------------*
FORMget_data.
SELECT*
INTOCORRESPONDINGFIELDSOFTABLEgt_data
UPTO30ROWS
FROMspfli.
ENDFORM."GET_DATA
*&---------------------------------------------------------------------*
*&FormSET_FIELDCAT
*&---------------------------------------------------------------------*
*textALV显示字段文本
*----------------------------------------------------------------------*
FORMset_fieldcat.
CLEAR:gt_fieldcat[].
DEFINEmacro_fieldcat.
cleargs_fieldcat.
gs_fieldcat-fieldname=&1.
gs_fieldcat-coltext=&2.
gs_fieldcat-hotspot=&3.
appendgs_fieldcattogt_fieldcat.
END-OF-DEFINITION.
macro_fieldcat'CARRID''航线代码''X'.
macro_fieldcat'CONNID''航班连接Id'''.
macro_fieldcat'COUNTRYFR''起飞国家'''.
macro_fieldcat'CITYFROM''起飞城市'''.
macro_fieldcat'AIRPFROM''起飞机场'''.
macro_fieldcat'COUNTRYTO''目标国家'''.
macro_fieldcat'CITYTO''目标城市'''.
macro_fieldcat'AIRPTO''目标机场'''.
macro_fieldcat'FLTIME''航班时间'''.
macro_fieldcat'DEPTIME''启程时间'''.
macro_fieldcat'ARRTIME''到达时间'''.
macro_fieldcat'DISTANCE''距离'''.
ENDFORM."SET_FIELDCAT
*&---------------------------------------------------------------------*
*&FormSET_LAYOUT
*&---------------------------------------------------------------------*
*text布局
*----------------------------------------------------------------------*
*-->P_LAYOUTtext
*----------------------------------------------------------------------*
FORMset_layoutCHANGINGp_layoutTYPElvc_s_layo.
p_layout-cwidth_opt='X'."自动调节字段长度
p_layout-sel_mode='D'."选择模式,可选择多行
p_layout-zebra='X'."颜色交替显示
ENDFORM."SET_LAYOUT
*&---------------------------------------------------------------------*
*&ModuleINIT_CONOUTPUT
*&---------------------------------------------------------------------*
*text创建ALV
*----------------------------------------------------------------------*
MODULEinit_conOUTPUT.
DATA:ls_layoutTYPElvc_s_layo.
IFg_con01ISINITIAL.
PERFORMset_fieldcat.
PERFORMset_layoutCHANGINGls_layout.
"创建SAP容器实例
CREATEOBJECTg_con01
EXPORTING
container_name=g_cus01"自定义控件名称
EXCEPTIONS
cntl_error=1
cntl_system_error=2
create_error=3
lifetime_error=4
lifetime_dynpro_dynpro_link=5
OTHERS=6.
IFsy-subrc<>0.
MESSAGEIDsy-msgidTYPEsy-msgtyNUMBERsy-msgno
WITHsy-msgv1sy-msgv2sy-msgv3sy-msgv4.
ENDIF.
"创建GRID实例
CREATEOBJECTg_grid01
EXPORTING
i_parent=g_con01
EXCEPTIONS
error_cntl_create=1
error_cntl_init=2
error_cntl_link=3
error_dp_create=4
OTHERS=5.
IFsy-subrc<>0.
MESSAGEIDsy-msgidTYPEsy-msgtyNUMBERsy-msgno
WITHsy-msgv1sy-msgv2sy-msgv3sy-msgv4.
ENDIF.
CREATEOBJECTevent_receiver.
"注册事件handler方法
SETHANDLERevent_receiver->handle_hotspot_clickFORg_grid01.
SETHANDLERevent_receiver->handle_double_clickFORg_grid01.
SETHANDLERevent_receiver->handle_toolbarFORg_grid01.
SETHANDLERevent_receiver->handle_commandFORg_grid01.
"调用ALV显示方法
CALLMETHODg_grid01->set_table_for_first_display
EXPORTING
*i_structure_name='SPFLI'"参照表结构字段显示
is_layout=ls_layout"布局
CHANGING
it_fieldcatalog=gt_fieldcat"显示字段
it_outtab=gt_data[]
EXCEPTIONS
invalid_parameter_combination=1
program_error=2
too_many_lines=3
OTHERS=4.
IFsy-subrc<>0.
*Implementsuitableerrorhandlinghere
ENDIF.
ENDIF.
ENDMODULE."INIT_CONOUTPUT
*&---------------------------------------------------------------------*
*&ModuleSTATUS_0100OUTPUT
*&---------------------------------------------------------------------*
*text工具条
*----------------------------------------------------------------------*
MODULEstatus_0100OUTPUT.
SETPF-STATUS'STATUS_BAR'.
ENDMODULE."STATUS_0100OUTPUT
*&---------------------------------------------------------------------*
*&ModuleUSER_EXIT_0100INPUT
*&---------------------------------------------------------------------*
*text取消事件
*----------------------------------------------------------------------*
MODULEuser_exit_0100INPUT.
LEAVETOSCREEN0.
ENDMODULE."USER_EXIT_0100INPUT


注:如有疏漏之处,还请不吝赐教!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: