ALV刷新方式

这篇文章展示了如何在SAPABAP中设置和处理ALVGUISTATUS的自定义事件,包括USERCOMMAND事件(如保存和检查)以及CALLER_EXIT事件,用于注册编辑事件和数据验证。代码示例涉及到事件触发后的函数调用和业务逻辑处理。

FORM frm_set_events .

** 设置自定义的ALV GUI STATUS

APPEND INITIAL LINE TO gt_events ASSIGNING FIELD-SYMBOL(<fs_pf_status_set>).

<fs_pf_status_set>-name = slis_ev_pf_status_set.

<fs_pf_status_set>-form = 'FRM_PF_STATUS_SET'.

** 设置用户事件USER COMMAND

APPEND INITIAL LINE TO gt_events ASSIGNING FIELD-SYMBOL(<fs_user_command>).

<fs_user_command>-name = slis_ev_user_command.

<fs_user_command>-form = 'FRM_USER_COMMAND'.

** 设置ALV执行控制

APPEND INITIAL LINE TO gt_events ASSIGNING FIELD-SYMBOL(<fs_caller_exit>).

<fs_caller_exit>-name = slis_ev_caller_exit_at_start.

<fs_caller_exit>-form = 'FRM_CALLER_EXIT'.

ENDFORM.

FORM frm_user_command USING uv_ucomm TYPE sy-ucomm

us_selfield TYPE slis_selfield.

CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'

IMPORTING

e_grid = go_alvgrid.

CALL METHOD go_alvgrid->check_changed_data.

CASE uv_ucomm.

** 保存

WHEN c_submit.

PERFORM frm_create_pre USING cs_submit.

PERFORM frm_handle_data_submission2 USING cs_submit .

PERFORM frm_refresh_outtab_display.

WHEN c_check.

PERFORM frm_create_pre USING cs_check.

PERFORM frm_handle_data_submission2 USING cs_check.

PERFORM frm_refresh_outtab_display.

WHEN '&IC1' .

READ TABLE gt_out INDEX us_selfield-tabindex INTO gs_out.

us_selfield-fieldname = to_upper( us_selfield-fieldname ).

CASE us_selfield-fieldname.

WHEN 'LIGHT'.

PERFORM c14z_messages_show_as_popup

TABLES

gs_out-t_msg.

WHEN 'BELNR' OR 'GJAHR' OR 'BUKRS'.

CHECK gs_out-belnr IS NOT INITIAL .

CALL FUNCTION 'TRCA_FI_DOCUMENT_DISPLAY'

EXPORTING

companycode = gs_out-bukrs

document = gs_out-belnr

year = gs_out-gjahr.

WHEN OTHERS.

ENDCASE.

WHEN OTHERS.

ENDCASE.

ENDFORM.

FORM frm_caller_exit USING is_exit TYPE slis_data_caller_exit.

CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'

IMPORTING

e_grid = go_alvgrid.

CALL METHOD go_alvgrid->register_edit_event

EXPORTING

i_event_id = cl_gui_alv_grid=>mc_evt_enter

EXCEPTIONS

error = 1

OTHERS = 2.

IF sy-subrc NE 0.

MESSAGE ID sy-msgid TYPE c_succs NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 DISPLAY LIKE c_error.

LEAVE LIST-PROCESSING.

ENDIF.

CALL METHOD go_alvgrid->set_ready_for_input

EXPORTING

i_ready_for_input = 1.

CALL METHOD go_alvgrid->register_edit_event

EXPORTING

i_event_id = cl_gui_alv_grid=>mc_evt_modified

EXCEPTIONS

error = 1

OTHERS = 2.

IF sy-subrc NE 0.

MESSAGE ID sy-msgid TYPE c_succs NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 DISPLAY LIKE c_error.

LEAVE LIST-PROCESSING.

ENDIF.

ENDFORM.

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值