复制REUSE_ALV_GRID_DISPLAY_LVC,给函数添加简易的F4处理能力
翻遍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处理能力的更多相关文章
- 孤荷凌寒自学python第四十八天通用同一数据库中复制数据表函数最终完成
孤荷凌寒自学python第四十八天通用同一数据库中复制数据表函数最终完成 (完整学习过程屏幕记录视频地址在文末) 今天继续建构自感觉用起来顺手些的自定义模块和类的代码. 今天经过反复折腾,最终基本上算 ...
- 孤荷凌寒自学python第四十七天通用跨数据库同一数据库中复制数据表函数
孤荷凌寒自学python第四十七天通用跨数据库同一数据库中复制数据表函数 (完整学习过程屏幕记录视频地址在文末) 今天继续建构自感觉用起来顺手些的自定义模块和类的代码. 今天打算完成的是通用的(至少目 ...
- SQLServer 事务复制中使用脚本添加某个对象的发布
原文:SQLServer 事务复制中使用脚本添加某个对象的发布 -- use [发布库] --添加表:创建项目并将其添加到发布中 exec sp_addarticle @publication = N ...
- 使用VAssistX给文件和函数添加注释-2015.12.31
在Visual Studio使用VAssistX助手可以非常方便的给文件和函数添加注释,增加更多的记录信息,从而方便在时间久后,对代码阅读理解的提示,以及别人后续对代码的维护和BUG修改. 添加头文件 ...
- AppendMenu函数添加菜单
这个函数添加新项目到指定菜单的末尾.你可以使用appendmenu指定内容,外观,和菜单项行为. BOOL AppendMenu( HMENU hMenu, UINT uFlags, UINT uID ...
- python cookbook第三版学习笔记十九:未包装的函数添加参数
比如有下面如下的代码,每个函数都需要判断debug的是否为True,而默认的debug为False def a(x,debug=False): if debug: print('calling a') ...
- jquery06 jQuery.extend 给jQuery函数添加、继承 静态方法
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...
- C语言怎么给函数添加形参的默认值
以下内容为本人的著作,如需要转载,请声明原文链接微信公众号「englyf」https://www.cnblogs.com/englyf/p/16637890.html 如果不是机缘巧合,当年转到C++ ...
- 给setTimeout和setIntreval函数添加回调参数
setTimeout和setInterval是两个很常见的计时函数.在以前,他们只接收两个参数,我们无法直接向他们的回调函数中添加参数,如果需要实现添加多个参数,可以在外层多嵌一层来实现类似的功能.现 ...
- C#部分---函数添加基本格式;
格式1:没有参数,没有返回值 (无参无返) 添加函数: /// <summary> /// 累加求和的方法,没有参数,没有返回值 /// </summary> public v ...
随机推荐
- PIL或Pillow学习1
PIL( Python Imaging Library)是 Python 的第三方图像处理库,由于其功能丰富,API 简洁易用,因此深受好评. 自 2011 年以来,由于 PIL 库更新缓慢,目前仅支 ...
- JDK 24 发布,新特性解读!
真快啊!Java 24 这两天已经正式发布啦!这是自 Java 21 以来的第三个非长期支持版本,和 Java 22.Java 23一样. 下一个长期支持版是 Java 25,预计今年 9 月份发布. ...
- Centos 安装 nload (流量监控)
QQ交流群:646559931.系统安装基本工具[root@localhost ~]# yum install -y gcc gcc-c++ make flex byacc libpcap ncurs ...
- linux查看分区命令和根分区扩容方法
df 查看文件系统磁盘空间的使用情况df [选项].[FILE]...当我们指定文件参数FILE时,将会显示该文件所在系统的信息-a 显示出所有的文件系统,包括大小只有0 blocks的文件系统:-h ...
- HackTheBox-Linux-Brainfuck
brainfuck 一.攻击流程: 使用nmap进行探测开放端口和服务. sudo nmap --min-rate=1000 -sT -sC -sV [target] 通过上图可以看出,有22端口的s ...
- 《机器人SLAM导航核心技术与实战》第1季:第1章_ROS入门必备知识
<机器人SLAM导航核心技术与实战>第1季:第1章_ROS入门必备知识 视频讲解 [第1季]1.第1章_ROS入门必备知识-视频讲解 [第1季]1.1.第1章_ROS入门必备知识-ROS简 ...
- Codeforces Round 952 (Div. 4)
知识点模块 1.一个正方体x,y,z里面可以放多少个边长为a,b,c的长方体 ans=(x-a+1)*(y-b+1)*(z-c+1) 题解模块 A.Creating Words 交换两个字母的首字母即 ...
- ElasticStack从入门到精通
什么是ElasticStack ElasticStack早期名称为elk elk代表了三个组件 ElasticSearch 负责数据存储和检索. Logstash 负责数据的采集,将源数据采集到Ela ...
- java 实现发送邮件功能
最近工作项目中需要使用到邮件功能,参考网上的文章,实现了一个基于java的邮件发送功能:直接上代码: 1.依赖 <dependency> <groupId>org.spring ...
- journalctl -u docker 查看日志
转载注明出处: 1. 查看 Docker 服务的最新日志(实时滚动) sudo journalctl -u docker -f -f 参数表示 跟随(follow),会持续输出最新日志(类似 tail ...