YXFIR749_MAIN
* 主程序逻辑
START-OF-SELECTION.
PERFORM frm_auth.
CALL SCREEN 100.
*&---------------------------------------------------------------------*
*& 包含 YXFIR749_FM01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
SET PF-STATUS 'MAIN100'.
SET TITLEBAR 'T100'.
**创建输出的ALV
IF go_alv IS INITIAL.
CREATE OBJECT go_alv
EXPORTING
i_parent = cl_gui_container=>screen0.
PERFORM frm_register_event."注册ALV事件
PERFORM prepare_fieldcat.
PERFORM load_data.
PERFORM frm_get_layout. "ALV 格式
PERFORM frm_exclude_fun." 排除ALV的功能按钮
PERFORM frm_list_alv."显示ALV
ELSE.
PERFORM frm_refresh_alv USING go_alv."刷新ALV
ENDIF.
ENDMODULE.
FORM frm_refresh_alv USING pr_alv TYPE REF TO cl_gui_alv_grid.
DATA: ls_stable TYPE lvc_s_stbl.
*刷新alv
CHECK pr_alv IS NOT INITIAL.
ls_stable-row = 'X'.
ls_stable-col = 'X'.
CALL METHOD pr_alv->refresh_table_display
EXPORTING
is_stable = ls_stable.
ENDFORM.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
DATA: lv_answer TYPE c.
CASE sy-ucomm.
WHEN 'BACK' OR 'EXIT' OR 'RW'.
IF gc_auth EQ 'X' AND ( gt_data[] IS NOT INITIAL OR gt_del[] IS NOT INITIAL ) AND gc_change EQ 'X'.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
titlebar = '确认弹窗'
text_question = '是否保存数据在退出?'
text_button_1 = '是'
text_button_2 = '否'
default_button = '2'
display_cancel_button = abap_false
IMPORTING
answer = lv_answer
EXCEPTIONS
text_not_found = 1
OTHERS = 2.
IF lv_answer EQ '1'.
PERFORM save_data.
ENDIF.
ENDIF.
LEAVE PROGRAM.
WHEN 'SAVE'.
PERFORM save_data.
WHEN 'ENTR'.
PERFORM char_data.
ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Form prepare_fieldcat
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM prepare_fieldcat .
DATA: ls_fieldcat TYPE lvc_s_fcat,
lv_edit TYPE char1.
REFRESH:gt_fieldcat.
DEFINE add_field.
ls_fieldcat-fieldname = &1.
ls_fieldcat-coltext = &2.
ls_fieldcat-col_opt = 'X'.
ls_fieldcat-ref_field = &3.
ls_fieldcat-ref_table = &4.
ls_fieldcat-edit = &5.
* ls_fieldcat-f4availabl = &6.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
END-OF-DEFINITION.
IF gc_auth EQ 'X'.
lv_edit = 'X'.
ENDIF.
add_field 'BUKRS' '公司代码' 'BUKRS' 'T001' lv_edit.
add_field 'BUTXT' '公司名称' 'BUTXT' 'YXFI_YJFGB' ' ' .
add_field 'FIKRS' '控制范围' 'FIKRS' 'T001' lv_edit.
add_field 'RCOMP' '贸易伙伴' 'RCOMP' 'YXFI_YJFGB' ' ' .
add_field 'YJRY' '月结人员' 'YJRY' 'YXFI_YJFGB' lv_edit.
add_field 'YHM' '用户名 ' 'YHM' 'YXFI_YJFGB' lv_edit.
add_field 'YJRYYX' '邮箱' 'YJRYYX' 'YXFI_YJFGB' lv_edit.
add_field 'SSSF' '所属省公司' 'SSSF' 'YXFI_YJFGB' lv_edit.
add_field 'SSXT' '系统' 'SSXT' 'YXFI_YJFGB' lv_edit.
add_field 'QYLXR' '企业联系人 ' 'QYLXR' 'YXFI_YJFGB' lv_edit.
add_field 'OPNAM' '操作人员' 'OPNAM' 'YXFI_YJFGB' ' ' .
add_field 'YRDAT' '创建/修改日期' 'YRDAT' 'YXFI_YJFGB' ' ' .
add_field 'YETIME' '创建/修改时间' 'YETIME' 'YXFI_YJFGB' ' ' .
ENDFORM.
* 加载数据
FORM load_data.
SELECT *
FROM yxfi_yjfgb
WHERE bukrs IN @s_bukrs
INTO CORRESPONDING FIELDS OF TABLE @gt_data.
ENDFORM.
* 添加新行
FORM add_row.
gc_change = 'X'.
gs_data-opnam = sy-uname.
gs_data-yrdat = sy-datum.
gs_data-yetime = sy-uzeit.
APPEND gs_data TO gt_data.
go_alv->refresh_table_display( ).
ENDFORM.
* 删除选中行
FORM delete_row.
DATA: lt_rows TYPE lvc_t_row.
gc_change = 'X'.
go_alv->get_selected_rows( IMPORTING et_index_rows = lt_rows ).
SORT lt_rows BY index DESCENDING.
LOOP AT lt_rows INTO DATA(ls_row).
READ TABLE gt_data INDEX ls_row-index INTO DATA(ls_data).
IF sy-subrc EQ 0.
MOVE-CORRESPONDING ls_data TO gs_del.
APPEND gs_del TO gt_del.
ENDIF.
DELETE gt_data INDEX ls_row-index.
ENDLOOP.
go_alv->refresh_table_display( ).
ENDFORM.
* 复制行
FORM copy_row.
DATA: lt_rows TYPE lvc_t_row.
go_alv->get_selected_rows( IMPORTING et_index_rows = lt_rows ).
CHECK lt_rows IS NOT INITIAL.
gc_change = 'X'.
READ TABLE gt_data INTO gs_data INDEX lt_rows[ 1 ]-index.
IF sy-subrc = 0.
gs_data-opnam = sy-uname.
gs_data-yrdat = sy-datum.
gs_data-yetime = sy-uzeit.
APPEND gs_data TO gt_data.
go_alv->refresh_table_display( ).
ENDIF.
ENDFORM.
* 保存数据
FORM save_data.
DATA(lt_data) = gt_data[].
SORT lt_data BY bukrs.
DELETE ADJACENT DUPLICATES FROM lt_data COMPARING bukrs.
DESCRIBE TABLE lt_data LINES DATA(lin1).
DESCRIBE TABLE gt_data LINES DATA(lin2).
IF lin1 NE lin2.
MESSAGE '公司代码是主键不能重复,请检查' TYPE 'S' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ELSE.
DATA:lt_yjfgb LIKE TABLE OF yxfi_yjfgb,
ls_yjfgb LIKE yxfi_yjfgb.
IF gt_del[] IS NOT INITIAL.
DELETE yxfi_yjfgb FROM TABLE gt_del.
IF sy-subrc EQ 0.
COMMIT WORK.
ENDIF.
ENDIF.
IF gt_data[] IS NOT INITIAL.
LOOP AT gt_data INTO DATA(ls_data).
MOVE-CORRESPONDING ls_data TO ls_yjfgb.
APPEND ls_yjfgb TO lt_yjfgb.
CLEAR:ls_yjfgb,ls_data.
ENDLOOP.
MODIFY yxfi_yjfgb FROM TABLE lt_yjfgb.
IF sy-subrc = 0.
CLEAR gc_change.
MESSAGE s398(00) WITH '数据保存成功'.
ELSE.
MESSAGE e398(00) WITH '数据保存失败'.
ENDIF.
ENDIF.
ENDIF.
ENDFORM.
* 导入模板
FORM import_template.
DATA:lt_intern TYPE TABLE OF zalsmex_tabline,
l_msg TYPE string.
DATA: p_file TYPE rlgrap-filename.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_path = 'D:/temp/'
mask = ',Microsoft Office Excel工作薄(*.xlsx),*.XLSX, Microsoft Office Excel工作薄(*.xls),*.XLS, 所有文件(*.*),*.*,'
title = 'Select File'(100)
IMPORTING
filename = p_file
EXCEPTIONS
inv_winsys = 1
no_batch = 2
selection_cancel = 3
selection_error = 4
OTHERS = 5.
IF sy-subrc <> 0 .
ENDIF.
IF p_file IS INITIAL.
MESSAGE '请选择上传文件' TYPE 'S' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
CALL FUNCTION 'ZALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = p_file
i_begin_col = 1
i_begin_row = 2
i_end_col = 8
i_end_row = 5000
TABLES
intern = lt_intern
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE 'Excel解析失败!' TYPE 'I' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
IF lt_intern IS INITIAL..
MESSAGE '导入数据为空,请检查' TYPE 'S' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
SORT lt_intern BY row col.
LOOP AT lt_intern INTO DATA(ls_initern).
ASSIGN COMPONENT ls_initern-col OF STRUCTURE gs_data TO FIELD-SYMBOL(<fs_data>).
IF sy-subrc EQ 0.
MOVE ls_initern-value TO <fs_data>.
AT END OF row.
IF gs_data-bukrs IS NOT INITIAL.
SELECT SINGLE butxt,rcomp FROM t001 WHERE bukrs EQ @gs_data-bukrs INTO ( @gs_data-butxt, @gs_data-rcomp ).
ENDIF.
gs_data-opnam = sy-uname.
gs_data-yrdat = sy-datum.
gs_data-yetime = sy-uzeit.
APPEND gs_data TO gt_data.
CLEAR: gs_data,<fs_data>.
ENDAT.
ENDIF.
ENDLOOP.
gc_change = 'X'.
go_alv->refresh_table_display( ).
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_register_event
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_register_event .
***注册ALV事件
CREATE OBJECT go_event_handler .
SET HANDLER go_event_handler->handle_toolbar FOR go_alv .
SET HANDLER go_event_handler->handle_user_command FOR go_alv .
SET HANDLER go_event_handler->handle_onf4_help FOR go_alv .
** SET HANDLER gr_event_handler->handle_double_click FOR gr_alv .
SET HANDLER go_event_handler->handle_data_changed FOR go_alv .
** SET HANDLER gr_event_handler->handle_hotspot_click FOR gr_alv .
** SET HANDLER gr_event_handler->handle_button_click FOR gr_alv .
CALL METHOD go_alv->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_modified. "修改,光标移除
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_get_layout
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_get_layout .
*定义alv的格式
CLEAR: gs_layout.
gs_layout-sel_mode = 'A'.
* gs_layout-stylefname = 'CELLSTYLE'.
* gs_layout-info_fname = 'ROWCOLOR'.
* gs_layout-no_rowmark = 'X'.
gs_layout-cwidth_opt = 'A'.
gs_layout-zebra = 'X'.
gs_layout-box_fname = 'SEL'.
gs_variant-report = sy-repid.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_list_alv
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_list_alv .
CALL METHOD go_alv->set_table_for_first_display
EXPORTING
is_variant = gs_variant
i_save = 'A'
is_layout = gs_layout
it_toolbar_excluding = gt_exclude
CHANGING
it_outtab = gt_data[]
it_fieldcatalog = gt_fieldcat[].
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_exclude_fun
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_exclude_fun .
*排除alv的功能按钮
DATA: lv_exclude TYPE ui_func .
lv_exclude = cl_gui_alv_grid=>mc_fc_loc_cut.
APPEND lv_exclude TO gt_exclude.
lv_exclude = cl_gui_alv_grid=>mc_fc_loc_delete_row.
APPEND lv_exclude TO gt_exclude.
lv_exclude = cl_gui_alv_grid=>mc_fc_loc_insert_row.
APPEND lv_exclude TO gt_exclude.
lv_exclude = cl_gui_alv_grid=>mc_fc_loc_paste.
APPEND lv_exclude TO gt_exclude.
lv_exclude = cl_gui_alv_grid=>mc_fc_loc_paste_new_row.
APPEND lv_exclude TO gt_exclude.
lv_exclude = cl_gui_alv_grid=>mc_fc_loc_copy.
APPEND lv_exclude TO gt_exclude.
lv_exclude = cl_gui_alv_grid=>mc_fc_loc_append_row.
APPEND lv_exclude TO gt_exclude.
lv_exclude = cl_gui_alv_grid=>mc_fc_loc_copy_row.
APPEND lv_exclude TO gt_exclude.
lv_exclude = cl_gui_alv_grid=>mc_fc_loc_undo.
APPEND lv_exclude TO gt_exclude.
lv_exclude = cl_gui_alv_grid=>mc_fc_refresh.
APPEND lv_exclude TO gt_exclude.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form export_template
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM export_template .
DATA: lw_objdata LIKE wwwdatatab,
lw_mime LIKE w3mime,
pv_objid TYPE w3objid,
"w_filename TYPE string,
lv_fullpath TYPE string VALUE 'C:/TEMP/',
lv_path TYPE string VALUE 'C:/TEMP/',
lv_destination LIKE rlgrap-filename,
lv_objnam TYPE string,
lv_rc LIKE sy-subrc,
lv_errtxt TYPE string,
lv_dest LIKE sapb-sappfad,
lv_action TYPE i.
DATA: pv_fname TYPE string.
"SMW0
pv_objid ='YXFIR749'.
pv_fname = '批量导入模板'.
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
window_title = '下载导入模板'
default_extension = 'XLS;XLSX'
default_file_name = pv_fname
file_filter = 'EXCEL文件|*.XLSX;*.XLS'
CHANGING
filename = pv_fname
path = lv_path
fullpath = lv_fullpath
user_action = lv_action
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
IF sy-subrc = 0 AND lv_action EQ 0.
lv_dest = lv_fullpath.
CONDENSE lv_objnam NO-GAPS.
SELECT SINGLE relid
objid
INTO CORRESPONDING FIELDS OF lw_objdata
FROM wwwdata
WHERE srtf2 = 0
AND relid = 'MI'
AND objid = pv_objid.
IF sy-subrc NE 0 OR lw_objdata-objid EQ space.
CONCATENATE '模板文件'
lv_objnam
'不存在'
INTO lv_errtxt.
MESSAGE lv_errtxt TYPE 'I'.
ENDIF.
lv_destination = lv_dest.
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
EXPORTING
key = lw_objdata
destination = lv_destination
IMPORTING
rc = lv_rc.
IF lv_rc NE 0.
CONCATENATE '模板文件:'
lv_objnam
'下载失败'
INTO lv_errtxt.
MESSAGE lv_errtxt TYPE 'E'.
ENDIF.
ENDIF.
ENDFORM.
FORM frm_handle_onf4_help USING u_fieldname TYPE lvc_fname
u_row_no TYPE lvc_s_roid
u_event_data TYPE REF TO cl_alv_event_data.
CASE u_fieldname.
WHEN ' '. "F4字段名称
* PERFORM frm_f4_get_value USING u_fieldname
* u_row_no
* u_event_data.
ENDCASE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form data_changed
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> ER_DATA_CHANGED
*&---------------------------------------------------------------------*
FORM data_changed USING p_er_data_changed TYPE REF TO cl_alv_changed_data_protocol.
“解决 excel复制数据直接拷贝到ALV页面里面,导致内表数据还是旧数据需要更新 begin
CALL FUNCTION:
'CONTROL_SETFUNCTIONCODE' EXPORTING fcode = 'ENTR',
'CONTROL_FLUSH'.
********************************************************************end
p_er_data_changed->refresh_protocol( ).
LOOP AT p_er_data_changed->mt_mod_cells INTO DATA(ls_cells).
READ TABLE gt_data ASSIGNING FIELD-SYMBOL(<f_data>) INDEX ls_cells-row_id.
IF sy-subrc EQ 0 .
CASE ls_cells-fieldname.
WHEN 'BUKRS'.
IF ls_cells-value IS NOT INITIAL.
SELECT SINGLE butxt,rcomp FROM t001 WHERE bukrs EQ @ls_cells-value INTO ( @<f_data>-butxt, @<f_data>-rcomp ).
ELSE.
CLEAR: <f_data>-butxt,<f_data>-rcomp.
ENDIF.
ENDCASE.
ENDIF.
ENDLOOP.
*
*** 刷新alv
PERFORM frm_refresh_alv USING go_alv."刷新ALV
* IF p_er_data_changed->mt_mod_cells IS NOT INITIAL.
* FIELD-SYMBOLS: <f_data> LIKE LINE OF gt_data.
* DATA : ls_modi TYPE lvc_s_modi .
* DATA: ls_mod_cell TYPE lvc_s_modi.
* DATA: li_row TYPE i,
* lc_value TYPE c,
* li_col TYPE i,
* ls_row_id TYPE lvc_s_row,
* ls_col_id TYPE lvc_s_col,
* ls_row_no TYPE lvc_s_roid.
*
* CALL METHOD go_alv->get_current_cell
* IMPORTING
* e_row = li_row
* e_value = lc_value
* e_col = li_col
* es_row_id = ls_row_id
* es_col_id = ls_col_id
* es_row_no = ls_row_no.
*
* LOOP AT p_er_data_changed->mt_mod_cells INTO ls_mod_cell.
* CASE ls_mod_cell-fieldname .
* WHEN 'BUKRS'. " 根据原因分析类型的变化提取对应的描述
* READ TABLE gt_data ASSIGNING <f_data> INDEX ls_mod_cell-row_id .
* IF sy-subrc = 0.
* IF ls_mod_cell-value EQ ''.
* <f_data>-butxt = ''.
* <f_data>-rcomp = ''.
* ELSE.
* SELECT SINGLE butxt,rcomp FROM t001 WHERE bukrs EQ @ls_mod_cell-value INTO ( @<f_data>-butxt, @<f_data>-rcomp ).
* ENDIF.
* ENDIF.
* ENDCASE.
* ENDLOOP.
*
* CALL METHOD go_alv->refresh_table_display
* EXPORTING
* i_soft_refresh = 'X'.
*
* CALL METHOD go_alv->set_current_cell_via_id
* EXPORTING
* is_row_id = ls_row_id
* is_column_id = ls_col_id
* is_row_no = ls_row_no.
* ENDIF.
ENDFORM. " data_changed
*&---------------------------------------------------------------------*
*& Form frm_auth
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_auth .
"2只有查看权限 1有新增、删除、修改等权限
CLEAR gc_auth.
AUTHORITY-CHECK OBJECT 'YFI_YJFGB'
ID 'ACTVT' FIELD '01'.
IF sy-subrc EQ 0.
gc_auth = 'X'. "新增、删除、修改等权限
ENDIF.
IF sy-uname EQ 'E_MAHAIQIANG'.
gc_auth = 'X'. "新增、删除、修改等权限
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form char_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM char_data .
LOOP AT gt_data ASSIGNING FIELD-SYMBOL(<fs_data>).
IF <fs_data>-bukrs IS NOT INITIAL.
SELECT SINGLE butxt,rcomp FROM t001 WHERE bukrs EQ @<fs_data>-bukrs INTO ( @<fs_data>-butxt, @<fs_data>-rcomp ).
ELSE.
CLEAR:<fs_data>-butxt, <fs_data>-rcomp.
ENDIF.
IF <fs_data>-opnam IS INITIAL.
<fs_data>-opnam = sy-uname.
<fs_data>-yrdat = sy-datum.
<fs_data>-yetime = sy-uzeit.
ENDIF.
ENDLOOP.
ENDFORM.
源代码如下:
top
*&---------------------------------------------------------------------*
*& 包含 YXFIR749_TOP
*&---------------------------------------------------------------------*
* 数据定义
TABLES: yxfi_yjfgb.
TYPES: BEGIN OF ty_data,
bukrs LIKE yxfi_yjfgb-bukrs,
fikrs LIKE yxfi_yjfgb-fikrs,
yjry LIKE yxfi_yjfgb-yjry,
yhm LIKE yxfi_yjfgb-yhm,
yjryyx LIKE yxfi_yjfgb-yjryyx,
sssf LIKE yxfi_yjfgb-sssf,
ssxt LIKE yxfi_yjfgb-ssxt,
qylxr LIKE yxfi_yjfgb-qylxr,
butxt LIKE yxfi_yjfgb-butxt,
rcomp LIKE yxfi_yjfgb-rcomp,
opnam LIKE yxfi_yjfgb-opnam,
yrdat LIKE yxfi_yjfgb-yrdat,
yetime LIKE yxfi_yjfgb-yetime,
END OF ty_data.
DATA: gt_data TYPE TABLE OF ty_data,
gs_data TYPE ty_data.
DATA: gt_del TYPE TABLE OF yxfi_yjfgb,
gs_del TYPE yxfi_yjfgb.
* ALV相关对象
DATA: go_container TYPE REF TO cl_gui_custom_container,
go_alv TYPE REF TO cl_gui_alv_grid,
gt_fieldcat TYPE lvc_t_fcat,
gs_variant TYPE disvariant,
gt_exclude TYPE ui_functions,
gs_layout TYPE lvc_s_layo.
"权限
DATA:gc_auth TYPE char1."2只有查看权限 1有新增、删除、修改等权限
DATA: gc_change TYPE char1.
CLASS lcl_event_handler DEFINITION DEFERRED.
* 事件处理类
CLASS lcl_event_handler DEFINITION.
PUBLIC SECTION.
METHODS:
handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING e_object e_interactive,
handle_user_command FOR EVENT user_command OF cl_gui_alv_grid
IMPORTING e_ucomm,
handle_data_changed FOR EVENT data_changed OF cl_gui_alv_grid
IMPORTING er_data_changed,
handle_onf4_help FOR EVENT onf4 OF cl_gui_alv_grid
IMPORTING e_fieldname
es_row_no
er_event_data.
ENDCLASS.
CLASS lcl_event_handler IMPLEMENTATION.
METHOD handle_toolbar.
" 添加自定义按钮
DATA: ls_button TYPE stb_button.
IF gc_auth EQ 'X'.
CLEAR ls_button.
ls_button-function = 'ADD'.
ls_button-icon = icon_insert_row.
ls_button-text = '新增'.
APPEND ls_button TO e_object->mt_toolbar.
ls_button-function = 'DELETE'.
ls_button-icon = icon_delete_row.
ls_button-text = '删除'.
APPEND ls_button TO e_object->mt_toolbar.
ls_button-function = 'COPY'.
ls_button-icon = icon_copy_object.
ls_button-text = '拷贝'.
APPEND ls_button TO e_object->mt_toolbar.
ls_button-function = 'IMPORT'.
ls_button-icon = icon_import.
ls_button-text = '导入'.
APPEND ls_button TO e_object->mt_toolbar.
ls_button-function = 'EXPORT'.
ls_button-icon = icon_export.
ls_button-text = '模板下载'.
APPEND ls_button TO e_object->mt_toolbar.
ENDIF.
ENDMETHOD.
METHOD handle_user_command.
CASE e_ucomm.
WHEN 'ADD'.
PERFORM add_row.
WHEN 'DELETE'.
PERFORM delete_row.
WHEN 'COPY'.
PERFORM copy_row.
WHEN 'IMPORT'.
PERFORM import_template.
WHEN 'EXPORT'.
PERFORM export_template.
ENDCASE.
ENDMETHOD.
METHOD handle_data_changed.
PERFORM data_changed USING er_data_changed.
ENDMETHOD. "handle_data_changed
*搜索帮助
METHOD handle_onf4_help.
PERFORM frm_handle_onf4_help USING e_fieldname
es_row_no
er_event_data.
er_event_data->m_event_handled = abap_true.
ENDMETHOD. "handle_on_f4 "handle_user_command
ENDCLASS.
DATA: go_event_handler TYPE REF TO lcl_event_handler.
"输入条件
SELECTION-SCREEN BEGIN OF BLOCK bk1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: s_bukrs FOR yxfi_yjfgb-bukrs.
SELECTION-SCREEN END OF BLOCK bk1.