ABAP F4 搜索帮助的两种实现方式
Search Help 搜索帮助是 ABAP Dictionary 的另一个存储库对象,用于以列表的形式显示字段的所有可能值。此列表也称为命中列表。搜索帮助是用于向屏幕字段提供输入帮助(F4 帮助)的对象。
您可以从 F4 的列表中选择要在字段中输入的值,而不是手动输入值,让用户手动输入极其容易出错。
我们可以创建两种类型的搜索帮助。
- 基本搜索帮助
- 集合搜索帮助
在 ABAP 报表程序中,F4 帮助可以添加到选择标准中:
- 自动方式:如果选择条件的数据类型有关联的输入帮助,选择界面会自动显示 F4 帮助
- 编程方式:如果选择标准的数据类型不存在输入帮助,则可以通过程序代码提供 F4 帮助
自动方式:创建基本搜索帮助
- 转到事务码 SE11。选择搜索帮助的单选按钮。输入要创建的搜索帮助的名称。让我们输入名称
ZBKK_F4_COUNTRY_BANKKEYS
。单击创建按钮。
- 系统将提示创建搜索帮助类型。选择基本搜索帮助,这是默认的。出现如下屏幕截图所示的创建基本搜索帮助的屏幕。
- 在选择方法中,我们需要指明我们的数据源是数据库表还是视图。在我们的例子中,它恰好是一张表格。该表是
bnka
。它是从选择列表中选择的。
- 输入选择方法后,下一个字段是对话框类型。这控制限制性对话框的外观。有一个包含三个选项的下拉列表。让我们选择“根据值集合的对话”选项。
- 接下来是参数区。对于每个搜索帮助参数或字段,必须根据要求输入这些列字段。
搜索帮助参数:这是来自数据源的字段。表中的字段列在选择列表中。将输入参与搜索帮助的字段,每行一个字段。上图中有三个字段:
BANKL
、BANKS
和BANKA
。IMP:是 Import 的缩写,此字段是一个复选框,用于指示搜索帮助参数是否为一个导入参数。导出或导入参考搜索帮助。
EXP:是 Export 的缩写,这个字段是一个复选框,用于指示搜索帮助参数是否是一个导出参数。导出将是将字段值从选择列表转移到屏幕字段。
LPos:列位置,它的值控制搜索帮助参数或字段在选择列表中的物理位置。如果输入值 1,该字段将出现在选择列表的第一个位置,依此类推。
SPos:选择位置,它控制搜索帮助参数或字段在限制性对话框中的物理位置。如果输入值 1,该字段将出现在限制性对话框的第一个位置,依此类推。
数据元素:默认情况下,每个搜索帮助参数或字段都分配了一个数据元素,该数据元素是在数据源(表或视图)中分配给它的。该数据元素名称出现在显示模式中。
- 执行一致性检查并激活搜索帮助。按 F8 执行。出现“测试搜索帮助 ZBKK_F4_COUNTRY_BANKKEYS”屏幕,如以下屏幕截图所示。然后输入 US000001 的银行代码和 US 国家,按下回车,可以看到如下的一条结果:
- 然后,我们就在自定义报表选择屏幕中使用这个搜索帮助,使用如下的代码:
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.
成功之后,搜索帮助弹出如图:
编程方式:调用 F4IF_INT_TABLE_VALUE_REQUEST
功能模块
我们可以使用 AT SELECTION-SCREEN ON VALUE-REQUEST FOR field
事件中的使用功能模块 F4IF_INT_TABLE_VALUE_REQUEST
为选择屏幕上的任何输入字段提供自定义 F4 帮助。
*&---------------------------------------------------------------------*
*& 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.
参考链接:
- 点赞
- 收藏
- 关注作者
评论(0)