热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

ALV通过F4事件,实现自定义搜索帮助F4

ALV通过参考可以直接获取表中搜索帮助,但是表中字段没有搜索帮助或者不合要求就需要通过F4事件完成了。1、定义OOALV类CLASSlcl_event_r

ALV通过参考可以直接获取表中搜索帮助,但是表中字段没有搜索帮助或者不合要求就需要通过F4事件完成了。

1、定义OOALV类
CLASS lcl_event_receiver DEFINITION DEFERRED.

DATA:gt_fieldcat   TYPE lvc_t_fcat,
     gs_fieldcat   TYPE lvc_s_fcat,
     go_grid       TYPE REF TO cl_gui_alv_grid,
     go_event_receiver    TYPE REF TO lcl_event_receiver.

*----------------------------------------------------------------------*
*       CLASS lcl_event_receiver DEFINITION
*----------------------------------------------------------------------*
CLASS lcl_event_receiver DEFINITION.
  PUBLIC SECTION.
    METHODS:
      handle_f4_help  FOR EVENT onf4 OF cl_gui_alv_grid
                         IMPORTING  e_fieldname
                                    es_row_no
                                    er_event_data
                                    et_bad_cells
                                    e_display.

ENDCLASS.                    "lcl_event_receiver DEFINITION
*----------------------------------------------------------------------*
*       CLASS lcl_event_receiver IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS lcl_event_receiver IMPLEMENTATION.
  METHOD handle_f4_help.
    FIELD-SYMBOLS: TYPE gs_alv.
    CASE e_fieldname.
      WHEN 'ARKTX'.
        READ TABLE git_alv ASSIGNING  INDEX es_row_no-row_id.
        IF sy-subrc = 0.
          PERFORM frm_get_arktx_f4 CHANGING -arktx.
        ENDIF.
*      WHEN .
      WHEN OTHERS.
    ENDCASE.
    CALL METHOD go_grid->refresh_table_display.
  ENDMETHOD.

ENDCLASS.               "lcl_event_receiver
2、定义alv-fieldcat属性

gs_fieldcat-f4availabl = 'X'.
gs_fieldcat-edit = 'X'.

3、将F4事件注册到ALV对象中

DATA:lt_f4             TYPE lvc_t_f4,
     ls_f4             TYPE lvc_s_f4.

CALL METHOD go_grid->set_table_for_first_display
  EXPORTING
    it_toolbar_excluding = lt_exclude
  CHANGING
    it_fieldcatalog      = git_fieldcat
    it_outtab            = git_alv[].


CLEAR:ls_f4.
ls_f4-fieldname  = 'ARKTX'.
ls_f4-register   = 'X'.
ls_f4-getbefore  = 'X'.
ls_f4-chngeafter = ''.
ls_f4-internal   = ''.
INSERT ls_f4 INTO TABLE lt_f4.

CALL METHOD go_grid->register_f4_for_fields
  EXPORTING
    it_f4 = lt_f4.

CREATE OBJECT go_event_receiver.
SET HANDLER go_event_receiver->handle_f4_help FOR go_grid .

4、自定义F4,获取数据

*&---------------------------------------------------------------------*
*&      Form  FRM_GET_ARKTX_F4
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P__ARKTX  text
*----------------------------------------------------------------------*
FORM frm_get_arktx_f4  USING    pc_matnr TYPE vbrp-matnr
                       CHANGING pc_arktx TYPE zfit005-maktx.
  DATA:BEGIN OF lt_zfit029 OCCURS 0,
        sub_type_m TYPE zfit029-sub_type_m,
        sub_name_m TYPE zfit029-sub_name_m,
      END OF lt_zfit029.
  DATA:lt_ret_tab TYPE TABLE OF ddshretval WITH HEADER LINE.
  DATA:lv_matnr TYPE zfit028-matnr.

  lv_matnr = pc_matnr.

  SELECT sub_type_m
         sub_name_m
  INTO TABLE lt_zfit029
  FROM zfit028
  INNER JOIN zfit029 ON zfit028~type_m = zfit029~type_m
  WHERE zfit028~matnr = lv_matnr.

  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      retfield        = 'SUB_NAME_M'
      value_org       = 'S'
    TABLES
      value_tab       = lt_zfit029
      return_tab      = lt_ret_tab
    EXCEPTIONS
      parameter_error = 1
      no_values_found = 2
      OTHERS          = 3.
  IF sy-subrc = 0.
    READ TABLE lt_ret_tab INDEX 1.
    IF sy-subrc = 0  AND lt_ret_tab-fieldval IS NOT INITIAL.
      pc_arktx = lt_ret_tab-fieldval.
    ENDIF.
  ENDIF.

ENDFORM.                    " FRM_GET_ARKTX_F4

5、效果



推荐阅读
  • 纠正网上的错误:自定义一个类叫java.lang.System/String的方法
    本文纠正了网上关于自定义一个类叫java.lang.System/String的错误答案,并详细解释了为什么这种方法是错误的。作者指出,虽然双亲委托机制确实可以阻止自定义的System类被加载,但通过自定义一个特殊的类加载器,可以绕过双亲委托机制,达到自定义System类的目的。作者呼吁读者对网上的内容持怀疑态度,并带着问题来阅读文章。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • Ihavethefollowingonhtml我在html上有以下内容<html><head><scriptsrc..3003_Tes ... [详细]
  • 本文介绍了MVP架构模式及其在国庆技术博客中的应用。MVP架构模式是一种演变自MVC架构的新模式,其中View和Model之间的通信通过Presenter进行。相比MVC架构,MVP架构将交互逻辑放在Presenter内部,而View直接从Model中读取数据而不是通过Controller。本文还探讨了MVP架构在国庆技术博客中的具体应用。 ... [详细]
  • 本文总结了解决python文件读写乱码问题的方法。其中包括错误的打开方式和正确的打开方式,并提供了相应的代码示例。建议在进行写入操作后先将文件关闭,然后再打开,最后再读取文件。若文件编码是utf-8,则需要在读取文件时添加decode('utf-8')。这样操作可以避免在打开记事本时出现乱码问题。 ... [详细]
  • 本文介绍了解决java开源项目apache commons email简单使用报错的方法,包括使用正确的JAR包和正确的代码配置,以及相关参数的设置。详细介绍了如何使用apache commons email发送邮件。 ... [详细]
  • POCOCLibraies属于功能广泛、轻量级别的开源框架库,它拥有媲美Boost库的功能以及较小的体积广泛应用在物联网平台、工业自动化等领域。POCOCLibrai ... [详细]
  • 华为和阿里VPN
    阿里云创建VPN1、 创建VPN网关2、 填写名称,选择对应的VPC,不指定交换机,选择带宽3、购买的是IPSEC-VPN不开启SSLVPN,点击立即购买 4、 创建客户网关  ... [详细]
  • 现在比较流行使用静态网站生成器来搭建网站,博客产品着陆页微信转发页面等。但每次都需要对服务器进行配置,也是一个重复但繁琐的工作。使用DockerWeb,只需5分钟就能搭建一个基于D ... [详细]
  • centos6.8 下nginx1.10 安装 ... [详细]
  • 精讲代理设计模式
    代理设计模式为其他对象提供一种代理以控制对这个对象的访问。代理模式实现原理代理模式主要包含三个角色,即抽象主题角色(Subject)、委托类角色(被代理角色ÿ ... [详细]
  • 初识java关于JDK、JRE、JVM 了解一下 ... [详细]
  • php7 curl_init(),php7.3curl_init获取301、302跳转后的数据
    最近在做一个蜘蛛项目,发现在抓取数据时,有时会碰到301的页面,原本写的curl_init函数php7-远程获取api接口或网页内容&#x ... [详细]
  • 解决浏览器打开网页后提示“dns_probe_possible 怎么解决”的方法
    在使用浏览器进行网上冲浪的时候遇到故障是一件很常见的事情,很多用户都遇到过系统提示:dns_probe_possible。从提示中可以看出和DNS是有一定的关系的,经过小编测试之后 ... [详细]
  • 【技术分享】一个 ELF 蠕虫分析
    【技术分享】一个 ELF 蠕虫分析 ... [详细]
author-avatar
捕风的丶阿兹猫-在北京
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有