ABAP F4 搜索帮助的两种实现方式

举报
雨绸缪 发表于 2023/05/29 16:49:07 2023/05/29
【摘要】 Search Help 搜索帮助是 ABAP Dictionary 的另一个存储库对象,用于以列表的形式显示字段的所有可能值。此列表也称为命中列表。搜索帮助是用于向屏幕字段提供输入帮助(F4 帮助)的对象。您可以从 F4 的列表中选择要在字段中输入的值,而不是手动输入值,让用户手动输入极其容易出错。我们可以创建两种类型的搜索帮助。基本搜索帮助集合搜索帮助在 ABAP 报表程序中,F4 帮助可...

image.png

Search Help 搜索帮助是 ABAP Dictionary 的另一个存储库对象,用于以列表的形式显示字段的所有可能值。此列表也称为命中列表。搜索帮助是用于向屏幕字段提供输入帮助(F4 帮助)的对象。

您可以从 F4 的列表中选择要在字段中输入的值,而不是手动输入值,让用户手动输入极其容易出错。

我们可以创建两种类型的搜索帮助。

  • 基本搜索帮助
  • 集合搜索帮助

在 ABAP 报表程序中,F4 帮助可以添加到选择标准中:

  • 自动方式:如果选择条件的数据类型有关联的输入帮助,选择界面会自动显示 F4 帮助
  • 编程方式:如果选择标准的数据类型不存在输入帮助,则可以通过程序代码提供 F4 帮助

自动方式:创建基本搜索帮助

  1. 转到事务码 SE11。选择搜索帮助的单选按钮。输入要创建的搜索帮助的名称。让我们输入名称 ZBKK_F4_COUNTRY_BANKKEYS。单击创建按钮。

image.png

  1. 系统将提示创建搜索帮助类型。选择基本搜索帮助,这是默认的。出现如下屏幕截图所示的创建基本搜索帮助的屏幕。

image.png

  1. 在选择方法中,我们需要指明我们的数据源是数据库表还是视图。在我们的例子中,它恰好是一张表格。该表是 bnka 。它是从选择列表中选择的。

image.png

  1. 输入选择方法后,下一个字段是对话框类型。这控制限制性对话框的外观。有一个包含三个选项的下拉列表。让我们选择“根据值集合的对话”选项。

image.png

  1. 接下来是参数区。对于每个搜索帮助参数或字段,必须根据要求输入这些列字段。

image.png

  • 搜索帮助参数:这是来自数据源的字段。表中的字段列在选择列表中。将输入参与搜索帮助的字段,每行一个字段。上图中有三个字段:BANKLBANKSBANKA

  • IMP:是 Import 的缩写,此字段是一个复选框,用于指示搜索帮助参数是否为一个导入参数。导出或导入参考搜索帮助。

  • EXP:是 Export 的缩写,这个字段是一个复选框,用于指示搜索帮助参数是否是一个导出参数。导出将是将字段值从选择列表转移到屏幕字段。

  • LPos:列位置,它的值控制搜索帮助参数或字段在选择列表中的物理位置。如果输入值 1,该字段将出现在选择列表的第一个位置,依此类推。

  • SPos:选择位置,它控制搜索帮助参数或字段在限制性对话框中的物理位置。如果输入值 1,该字段将出现在限制性对话框的第一个位置,依此类推。

  • 数据元素:默认情况下,每个搜索帮助参数或字段都分配了一个数据元素,该数据元素是在数据源(表或视图)中分配给它的。该数据元素名称出现在显示模式中。

  1. 执行一致性检查并激活搜索帮助。按 F8 执行。出现“测试搜索帮助 ZBKK_F4_COUNTRY_BANKKEYS”屏幕,如以下屏幕截图所示。然后输入 US000001 的银行代码和 US 国家,按下回车,可以看到如下的一条结果:

image.png

  1. 然后,我们就在自定义报表选择屏幕中使用这个搜索帮助,使用如下的代码:
SELECT-OPTIONS:
  s_banks   FOR bnka-banks, " bank country
  s_bankl   FOR bnka-bankl MATCHCODE OBJECT zbkk_f4_country_bankkeys, " bank key
  s_erdat   FOR bnka-erdat.

成功之后,搜索帮助弹出如图:

image.png

编程方式:调用 F4IF_INT_TABLE_VALUE_REQUEST 功能模块

我们可以使用 AT SELECTION-SCREEN ON VALUE-REQUEST FOR field 事件中的使用功能模块 F4IF_INT_TABLE_VALUE_REQUEST 为选择屏幕上的任何输入字段提供自定义 F4 帮助。

image.png

*&---------------------------------------------------------------------*  
*&      Form  FRM_GET_CHANNEL  
*&---------------------------------------------------------------------*  
*       text  
*----------------------------------------------------------------------*  
*  -->  p1        text  
*  <--  p2        text  
*----------------------------------------------------------------------*  
FORM frm_get_channel USING s_kdgrp CHANGING s_channel t_channel.  
  
  DATA: BEGIN OF ls_zsdt040,  
          channel              TYPE zsdt040-channel,  
          zchannel_description TYPE zsdt040-zchannel_description,  
        END OF ls_zsdt040,  
        lt_zsdt040 LIKE TABLE OF ls_zsdt040 WITH HEADER LINE.  
  
  SELECT channel zchannel_description FROM zsdt040 INTO CORRESPONDING FIELDS OF TABLE lt_zsdt040  
    WHERE customer_group = s_kdgrp.  
  
  SORT lt_zsdt040 BY channel.  
  DELETE lt_zsdt040 WHERE channel IS INITIAL.  
  DELETE ADJACENT DUPLICATES FROM lt_zsdt040 COMPARING customer_group.  
  
  CLEAR: gs_ddshretval.  
  REFRESH: gt_ddshretval.  
  
  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' "调用函数  
    EXPORTING  
      retfield         = 'CHANNEL'  "搜索帮助内表要输出的的帮助字段名,注:要大写  
      dynpprog         = sy-repid  
      dynpnr           = sy-dynnr  
      value_org        = 'S'  
      dynprofield      = 'CHANNEL' "指定屏幕参数的名称  
      callback_program = sy-repid  
    TABLES  
      value_tab        = lt_zsdt040 "存储搜索帮助内容的内表  
      return_tab       = gt_ddshretval  
    EXCEPTIONS  
      parameter_error  = 1  
      no_values_found  = 2  
      OTHERS           = 3.  
  IF sy-subrc = 0 .  
  
    READ TABLE gt_ddshretval INTO gs_ddshretval INDEX 1.  
    IF gs_ddshretval-fieldval IS NOT INITIAL.  
      s_channel = gs_ddshretval-fieldval.  
  
      READ TABLE lt_zsdt040 INTO ls_zsdt040 WITH KEY channel = s_channel.  
      IF sy-subrc = 0.  
        t_channel = ls_zsdt040-zchannel_description.  
      ENDIF.  
    ENDIF.  
  ENDIF.  
ENDFORM.

参考链接:

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。