翻遍REUSE_ALV_GRID_DISPLAY_LVC这个函数我们可以发现,这个函数里预定义了一些事件类型。

不过也缺少了一些类型,看看SLIS这个类型池就可以发现,ONF4事件是没有的。

为了把这个函数做出通用和简易的,复制这个函数所在的函数组SLVC_FULLSCREEN到ZSLVC_FULLSCREEN.

然后我们在这个新函数组里,定义F4事件:

LZSLVC_FULLSCREENTOP中定义grid的时候加上F4:

LZSLVC_FULLSCREENTOP中定义本地类lcl_event_receiver的时候加上F4方法:

METHODS handle_onf4
FOR EVENT onf4 OF cl_gui_alv_grid
IMPORTING e_fieldname
e_fieldvalue
es_row_no
er_event_data
et_bad_cells
e_display.

LZSLVC_FULLSCREENTOP中实现本地类lcl_event_receiver的时候加上F4处理:

FORM method_onf4 USING        pa_fieldname      TYPE  lvc_fname
pa_fieldvalue TYPE lvc_value
pa_row_no TYPE lvc_s_roid
pa_r_event_data TYPE REF TO cl_alv_event_data
pa_t_bad_cells TYPE lvc_t_modi
pa_display.
IF NOT gt_grid-i_callback_onf4 IS INITIAL AND
NOT i_callback_program IS INITIAL.
PERFORM (gt_grid-i_callback_onf4)
IN PROGRAM (i_callback_program) USING pa_fieldname
pa_fieldvalue
pa_row_no
pa_r_event_data
pa_t_bad_cells
pa_display.
ENDIF. ENDFORM. " METHOD_DATA_CHANGED

LZSLVC_FULLSCREENF02中定义grid对象注册事件里加上ONF4

LZSLVC_FULLSCREENF01中分配回调对象:

因为SLIS里没有ONF4的对象,所以event get 里只能写固定值:

基本逻辑就是:定义ONF4事件,类里实现ONF4事件,实现方法里执行回调函数对应的程序和FORM。

这样我们就可以调ALV函数的时候加上一句简单的ONF4事件和对应的处理form里可以了。

REPORT zly_f4.
TYPE-POOLS:slis. *CLASS lcl_event_receiver DEFINITION DEFERRED.
DATA: gt_fcat TYPE lvc_t_fcat,
gs_fcat TYPE lvc_s_fcat,
gt_f4 TYPE lvc_t_f4,
gs_f4 TYPE lvc_s_f4,
gs_event TYPE slis_alv_event,
gt_event TYPE slis_t_event,
gs_layout TYPE lvc_s_layo,
gs_glay TYPE lvc_s_glay. DATA: "event_receiver TYPE REF TO lcl_event_receiver,
go_grid TYPE REF TO cl_gui_alv_grid. DATA: BEGIN OF gs_data ,
pernr TYPE char10,
nachn TYPE nachn,
gesch TYPE gesch,
END OF gs_data,
gt_data LIKE TABLE OF gs_data. DATA: BEGIN OF gs_f4value,
gesch TYPE gesch,
ztext TYPE text,
END OF gs_f4value,
gt_f4value LIKE TABLE OF gs_f4value. START-OF-SELECTION.
PERFORM f_get_data.
PERFORM f_show_data. FORM f_get_data .
SELECT partner AS pernr name_last AS nachn FROM but000 INTO CORRESPONDING FIELDS OF TABLE gt_data UP TO 10 ROWS.
* WHERE begda LE sy-datum AND endda GE sy-datum. ENDFORM. FORM f_show_data .
DEFINE %%fcat.
CLEAR GS_FCAT.
GS_FCAT-FIELDNAME = &1.
GS_FCAT-SCRTEXT_L = &2.
IF &1 = 'GESCH'.
GS_FCAT-EDIT = 'X'.
GS_FCAT-F4AVAILABL = 'X'.
ENDIF.
APPEND GS_FCAT TO GT_FCAT.
END-OF-DEFINITION.
%%fcat: 'PERNR' '人员编号',
'NACHN' '姓名',
'GESCH' '性别'. gs_event-name = 'ONF4'.
gs_event-form = 'F_F4_HELP'.
APPEND gs_event TO gt_event.
gs_glay-edt_cll_cb = 'X'.
CALL FUNCTION 'ZREUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-cprog
i_callback_pf_status_set = 'PF_STATUS_SET'
it_fieldcat_lvc = gt_fcat
it_events = gt_event
i_grid_settings = gs_glay
TABLES
t_outtab = gt_data.
ENDFORM. FORM f_f4_help USING e_fieldname TYPE lvc_fname
p_fieldvalue TYPE lvc_value
es_row_no TYPE lvc_s_roid
p_r_event_data TYPE REF TO cl_alv_event_data
p_t_bad_cells TYPE lvc_t_modi
p_display.
DATA: lt_ddshretval TYPE STANDARD TABLE OF ddshretval,
ls_ddshretval TYPE ddshretval.
CLEAR gs_f4value.
gs_f4value-gesch = 1.
gs_f4value-ztext = '男'.
APPEND gs_f4value TO gt_f4value.
CLEAR gs_f4value.
gs_f4value-gesch = 2.
gs_f4value-ztext = '女'.
APPEND gs_f4value TO gt_f4value.
CLEAR gs_f4value.
gs_f4value-gesch = 3.
gs_f4value-ztext = '中'.
APPEND gs_f4value TO gt_f4value. CHECK e_fieldname = 'GESCH'.
REFRESH lt_ddshretval. CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'GESCH' "
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'GESCH'
value_org = 'S'
callback_program = sy-repid
callback_form = 'FM_CB_FORM'
TABLES
value_tab = gt_f4value
return_tab = lt_ddshretval
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3. IF sy-subrc = 0 AND lt_ddshretval IS NOT INITIAL .
CLEAR ls_ddshretval.
READ TABLE lt_ddshretval INTO ls_ddshretval INDEX 1.
IF ls_ddshretval-fieldval IS NOT INITIAL.
CLEAR gs_data.
READ TABLE gt_data INTO gs_data INDEX es_row_no-row_id.
gs_data-gesch = ls_ddshretval-fieldval.
MODIFY gt_data FROM gs_data INDEX es_row_no-row_id
TRANSPORTING gesch.
ENDIF.
ENDIF.
ENDFORM. FORM refresh_table_alv .
DATA: ls_stbl TYPE lvc_s_stbl.
ls_stbl-row = 'X'."
ls_stbl-col = 'X'.
CALL METHOD go_grid->refresh_table_display
EXPORTING
is_stable = ls_stbl.
ENDFORM. FORM pf_status_set USING rt_extab TYPE slis_t_extab.
SET PF-STATUS 'STATUS_ALV'. gs_f4-fieldname = 'GESCH'.
gs_f4-register = 'X'.
gs_f4-getbefore = 'X'.
* gs_f4-chngeafter = 'X'.
INSERT gs_f4 INTO TABLE gt_f4.
CALL FUNCTION 'ZGET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = go_grid.
CALL METHOD go_grid->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_modified. CALL METHOD go_grid->register_f4_for_fields
EXPORTING
it_f4 = gt_f4[].
ENDFORM.
*&---------------------------------------------------------------------*
*& FORM FM_CB_FORM
*&---------------------------------------------------------------------*
FORM fm_cb_form TABLES record_tab STRUCTURE seahlpres
CHANGING shlp TYPE shlp_descr_t
callcontrol LIKE ddshf4ctrl.
DATA: interface LIKE LINE OF shlp-interface.
READ TABLE shlp-interface INTO interface INDEX 1.
interface-shlpfield+4(1) = '1'.
interface-valfield = 'DOC_LAYOUT'.
APPEND interface TO shlp-interface.
DELETE shlp-interface INDEX 1.
ENDFORM. "BO_CALLBACK_FORM

复制REUSE_ALV_GRID_DISPLAY_LVC,给函数添加简易的F4处理能力的更多相关文章

  1. 孤荷凌寒自学python第四十八天通用同一数据库中复制数据表函数最终完成

    孤荷凌寒自学python第四十八天通用同一数据库中复制数据表函数最终完成 (完整学习过程屏幕记录视频地址在文末) 今天继续建构自感觉用起来顺手些的自定义模块和类的代码. 今天经过反复折腾,最终基本上算 ...

  2. 孤荷凌寒自学python第四十七天通用跨数据库同一数据库中复制数据表函数

    孤荷凌寒自学python第四十七天通用跨数据库同一数据库中复制数据表函数 (完整学习过程屏幕记录视频地址在文末) 今天继续建构自感觉用起来顺手些的自定义模块和类的代码. 今天打算完成的是通用的(至少目 ...

  3. SQLServer 事务复制中使用脚本添加某个对象的发布

    原文:SQLServer 事务复制中使用脚本添加某个对象的发布 -- use [发布库] --添加表:创建项目并将其添加到发布中 exec sp_addarticle @publication = N ...

  4. 使用VAssistX给文件和函数添加注释-2015.12.31

    在Visual Studio使用VAssistX助手可以非常方便的给文件和函数添加注释,增加更多的记录信息,从而方便在时间久后,对代码阅读理解的提示,以及别人后续对代码的维护和BUG修改. 添加头文件 ...

  5. AppendMenu函数添加菜单

    这个函数添加新项目到指定菜单的末尾.你可以使用appendmenu指定内容,外观,和菜单项行为. BOOL AppendMenu( HMENU hMenu, UINT uFlags, UINT uID ...

  6. python cookbook第三版学习笔记十九:未包装的函数添加参数

    比如有下面如下的代码,每个函数都需要判断debug的是否为True,而默认的debug为False def a(x,debug=False): if debug: print('calling a') ...

  7. jquery06 jQuery.extend 给jQuery函数添加、继承 静态方法

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...

  8. C语言怎么给函数添加形参的默认值

    以下内容为本人的著作,如需要转载,请声明原文链接微信公众号「englyf」https://www.cnblogs.com/englyf/p/16637890.html 如果不是机缘巧合,当年转到C++ ...

  9. 给setTimeout和setIntreval函数添加回调参数

    setTimeout和setInterval是两个很常见的计时函数.在以前,他们只接收两个参数,我们无法直接向他们的回调函数中添加参数,如果需要实现添加多个参数,可以在外层多嵌一层来实现类似的功能.现 ...

  10. C#部分---函数添加基本格式;

    格式1:没有参数,没有返回值 (无参无返) 添加函数: /// <summary> /// 累加求和的方法,没有参数,没有返回值 /// </summary> public v ...

随机推荐

  1. HTTP压缩的过程

      1. 浏览器发送Http request 给Web服务器,  request 中有Accept-Encoding: gzip, deflate.(告诉服务器浏览器支持gzip压缩) 2. Web服 ...

  2. 网络编程-Netty-writeAndFlush方法原理分析 以及 close以后是否还能写入数据?

    前言 在上一讲网络编程-关闭连接(2)-Java的NIO在关闭socket时,究竟用了哪个系统调用函数?中,我们做了个实验,研究了java nio的close函数究竟调用了哪个系统调用,答案是clos ...

  3. verilog实现十进制正数与ASCII码互转

    verilog实现十进制正数与ASCII码互转 1.小位宽数实现转ASCII码 1.小整数十进制转BCD码(8421码) 十进制数 0 1 2 3 4 5 6 7 8 9 8421码 0000 000 ...

  4. Apollo批量给新创建的用户授可编辑权限

    背景: 我们要在Apollo中批量给新创建的用户授可编辑权限 apollo系统版本: java-2.1.0 管理员账号:Apollo 可编辑账号:guoyabin 过程: 在没写这段代码的时候从网上搜 ...

  5. 【SpringMVC】处理模型数据

    处理模型数据 Spring MVC 提供了以下几种途径输出模型数据: ModelAndView: 处理方法返回值类型为 ModelAndView时, 方法体即可通过该对象添加模型数据 Map 及 Mo ...

  6. 【Win32】通过多线程自动关闭对话框的方法

    零.需求 希望在Windows开机后自动弹出个对话框提示一下,过8秒后自动关闭 一.解决 1.建项目和源文件 在VC6.0中新建Win32项目 新建C++源文件 2.编写代码 基础结构 #includ ...

  7. JMeter用例数据分离

    1.编写接口用例文件 新建csv文件,以查询用户财富值和时长接口为例 参数说明: ${caseSeq}:用例编号 ${apiType}:api类型 ${apiSeq}:api版本号 ${apiName ...

  8. DPDI(Dispatch PDI)kettle调度管理平台升级预告

    亲爱的DPDI用户们,久等了!Dispatch PDI全新升级,焕然一新的UI页面计划于2025.03.23正式上线.这一次,我们精心打磨每一个细节,只为给您带来前所未有的丝滑体验,让每一次浏览都成为 ...

  9. 异步编程与Tortoise-ORM框架

    title: 异步编程与Tortoise-ORM框架 date: 2025/04/19 00:13:05 updated: 2025/04/19 00:13:05 author: cmdragon e ...

  10. SpringBoot3启动报错 java.lang.ClassNotFoundException: java.text.ListFormat

    问题 在使用SpringBoot3创建web项目的时候日志报错java.lang.ClassNotFoundException: java.text.ListFormat. 具体报错如下: java. ...