搜索帮助在SAP GUI中应用非常广泛,在上一篇<ABAP系列-数据字典(搜索帮助)>中,我们介绍了系统标准搜索帮助的创建和使用方法。实际工作中,我们还经常会遇到一些特别的搜索要求,需要在标准搜索帮助的基础上做增强开发。这一篇我们通过一个简单的例子来看看如何实现搜索帮助的增强。

先回顾下上一篇数据字典搜索帮助的内容。首先,创建一个系统标准搜索帮助ZEMPNO_ESH1。


abap给标准表加索引_搜索

abap给标准表加索引_abap给标准表加索引_02

创建完成后,赋值给相关对象,比如数据元素ZE_EMPNO。激活生效后,我们看到屏幕上实际的使用效果是这样的。


abap给标准表加索引_abap给标准表加索引_03

abap给标准表加索引_abap给标准表加索引_04

现在有个小需求,需要将姓氏和名字合成一个字段<姓名>,该如何实现?可以使用搜索字段的增强来完成。我们新建一个搜索帮助ZEMPNO_ESH2,在之前ZEMPNO_ESH1的基础上,稍作改造。


abap给标准表加索引_字段_05

abap给标准表加索引_字段_06

步骤1:调整输出参数,去掉FNAME, LNAME, 新增一个字段NAME1。

步骤2:指定搜索帮助增强,(增强又称作出口)。系统有一个样例Function <F4IF_SHLP_EXIT_EXAMPLE> 可供参考,可将样例拷贝至ZF4IF_SHLP_EXIT_EMPNO, 通过事务码SE37查看,会看到有个变量CALLCONTROL-STEP,这代表了搜索帮助处理过程中的各个事件,包括SELONE,PRESEL,SELECT,DISP等,每一个事件在程序中都有详细的备注说明。我们可以在DISP事件中添加一段代码:


IF callcontrol-step = ‘DISP’.


  • PERFORM AUTHORITY_CHECK TABLES RECORD_TAB SHLP_TAB
CHANGING SHLP CALLCONTROL.
•  DATA ls_record LIKE LINE OF record_tab.
 DATA lv_name TYPE string.
 LOOP AT record_tab INTO ls_record.
 lv_name = ls_record-string+9(10).
 CONDENSE lv_name.
 lv_name = | { ls_record-string+9(10) }{ ls_record-string+19(10) } |.
 CONDENSE lv_name.
 ls_record-string+74(10) = lv_name.
 MODIFY record_tab FROM ls_record.
 ENDLOOP.
 EXIT.
 ENDIF.

这段代码主要是用于合并姓氏和名字,合并后更新回结果列表 recode_tab, 如果初学的朋友们对这些代码感到陌生,没关系,可以先大概了解,后面熟悉语法后再回头来看。

创建完搜索帮助ZEMPNO_ESH2,将其赋给数据元素ZE_EMPNO。我们看看屏幕上实际使用的效果。

可以看到,姓氏和名字已经合并成姓名字段了。增强完成,是不是很简单呢,各位如果还有疑问,可以加入群讨论。