ABAP 中的搜索帮助

2024-06-12 09:58
文章标签 abap 搜索 帮助

本文主要是介绍ABAP 中的搜索帮助,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一.简介:在abap中,用到的搜索帮助个人遇到的情况如下,进行简要总结进行记录:
1.选中屏幕中的搜索帮助
(1).选择屏幕中的搜索帮助个人理解是指选择屏幕中的字段可以提供用户选择功能。有些字段,例如公司,日期等可以自动带出搜索帮助,这些都是基于数据元素或者数据域等的搜索帮助,如图:

(2).有些字段我们就需要自己实现搜索帮助了,常用的如:在我们上传excel等数据的时候得到文件路径的选择帮助,主要使用的代码如下:

"选择屏幕字段PARAMETERS :P_FILE LIKE RLGRAP-FILENAME MODIF ID M1.     "文件目录*&--------------------------------------------------------*
*&    触发选择屏幕中自定义事件                                 
*&--------------------------------------------------------*
AT SELECTION-SCREEN.*&---文件路径搜索帮助AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.CALL FUNCTION 'F4_FILENAME'EXPORTINGPROGRAM_NAME = ''            " 输入的路劲IMPORTINGFILE_NAME    = P_FILE.       " 输出路径

(3).非上传路径字段的选择帮助,主要用到的代码片段如下:

"屏幕事件中
*&--------------------------------------------------------*
*&    实现搜索帮助                                           
*&--------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_SAKNR.CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'EXPORTINGRETFIELD    = 'SAKNR'  "搜索帮助内表要输出的帮助字段名DYNPPROG    = SY-REPIDDYNPNR      = SY-DYNNRDYNPROFIELD = 'P_SAKNR'VALUE_ORG   = 'S'TABLESVALUE_TAB   = IT_SKAT. "存储搜索帮助内容的内表IF SY-SUBRC <> 0.MESSAGE '没有相关搜索帮助' TYPE 'I'.ENDIF.

2.ALV中的选择帮助(例子使用OOALV)
(1).如果ALV中的需要搜索帮助的字段所在的表有提供搜索帮助,例如:MKAL-MATNR,其中的搜索帮助是参考MARA表的MATNR,而且还带有自动检查编码是否合法的功能,那么我们就可以在设置fieldecat的时候针对字段设置:

   WA_FIELDCAT-REF_FIELD = 'MKAL'.WA_FIELDCAT-REF_TABLE = 'MATNR'.

这样就自动实现了搜索帮助功能。
(2).如果标准的搜索帮助满足不了需求,并且有自己的自建表用到了这个字段,那么我们可以自己创建一个搜索帮助提供给自定义的数据元素,步骤如下:
1).SE11-创建搜索帮助,如图:

点击创建之后,简单的我们就创建‘基本索引搜索帮助’,‘集合搜索帮助’是用多个基本或者集合搜索帮助创建的,这里不做介绍:

接下来,在如下图中输入:描述(自定义),选择方法(字段参考的表名如果有文本表会自动带出,就可以在选择帮助中使用描述等),对话类型、快捷键根据自己的需要选择,搜索帮助出口是自己创建的一个function,实现搜索帮助的增强(必须参考F4IF_SHLP_EXIT_EXAMPLEH函数接口,可以复制出来然后修改),最后填入你要在搜索帮助中出现的字段(参数输入输出,输出坐标等)

输入好以上内容后,保存激活,就可以在自建表中使用此搜索帮助了,如下图:在对应的数据元素上添加搜索帮助:

然后在需要实现搜索帮助的alv字段的fieldcat中依然要添加如下代码:

   WA_FIELDCAT-REF_FIELD = '自建表名'.WA_FIELDCAT-REF_TABLE = '参考字段'.

(3).有的时候,SE11创建的搜索帮助也不能完全适用所有情况,比如上面的例子中CRHD表并没有对应的文本表,所以带不出工作中心的描述,如果业务要求搜索帮助的时候一定要有描述出来,那么我们可以使用下面的方法实现:为alv创建搜索帮助事件,然后注册事件,最后实现事件,步骤如下:

"1.定义搜索帮助展示的内表TYPES : BEGIN OF T_CRHD,WERKS   LIKE CRHD-WERKS,VERWE   LIKE CRHD-VERWE,ARBPL   LIKE CRHD-ARBPL,KTEXT   LIKE CRTX-KTEXT,
END OF T_CRHD.DATA : IT_CRHD    TYPE TABLE OF T_CRHD,WA_CRHD    LIKE LINE OF  IT_CRHD."2.获得数据用于搜索帮助
"得到工作中心搜索帮助所需内表SELECTA~WERKSA~VERWEA~ARBPLB~KTEXTINTO CORRESPONDING FIELDS OF TABLE IT_CRHDFROM CRHD AS AJOIN CRTX AS B ON B~OBJTY = A~OBJTY AND B~OBJID = A~OBJIDWHERE A~ARBPL LIKE 'ZRP%' AND B~SPRAS = SY-LANGU."3.定义响应事件
*&--------------------------------------------------------*
*&      CLASS LCL_EVENT_HANDLER DEFINITION
*&--------------------------------------------------------*
*       TEXT alv事件定义
*---------------------------------------------------------*
CLASS LCL_EVENT_HANDLER DEFINITION.PUBLIC SECTION.METHODS:*--工作中心搜索帮助HANDLE_ON_F4_HELP_9000FOR EVENT ONF4 OF CL_GUI_ALV_GRIDIMPORTING E_FIELDNAME ES_ROW_NO ER_EVENT_DATA.
ENDCLASS.*&--------------------------------------------------------*
*&      CLASS LCL_EVENT_HANDLER IMPLEMENTATION
*&--------------------------------------------------------*
*       TEXT ALV事件实现
*---------------------------------------------------------*
CLASS LCL_EVENT_HANDLER IMPLEMENTATION.
*--工作中心搜索帮助METHOD HANDLE_ON_F4_HELP_9000.PERFORM HANDLE_ON_F4_HELP_9000 USING E_FIELDNAME ES_ROW_NOER_EVENT_DATA .ENDMETHOD.
ENDCLASS."4.实现具体form
*&--------------------------------------------------------*
*&      Form  HANDLE_ON_F4_HELP
*&--------------------------------------------------------*
*       text 工作中心搜索帮助
*---------------------------------------------------------*
FORM HANDLE_ON_F4_HELP_9000  USING E_FIELDNAMEES_ROW_NO TYPE LVC_S_ROIDER_EVENT_DATA.DATA : E_INDEX TYPE I,E_MDV01 LIKE ZTPP_CONF_ITEM07-MDV01,LT_RET_TAB TYPE TABLE OF DDSHRETVAL WITH HEADER LINE.IF E_FIELDNAME = 'MDV01'. "我们自定义搜索的字段名E_INDEX = ES_ROW_NO-ROW_ID.READ TABLE IT_SHOW INTO WA_SHOW INDEX E_INDEX.CHECK SY-SUBRC = 0."调用functionCALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'EXPORTINGRETFIELD        = 'ARBPL' "返回字段VALUE_ORG       = 'S'TABLESVALUE_TAB       = IT_CRHDRETURN_TAB      = LT_RET_TABEXCEPTIONSPARAMETER_ERROR = 1NO_VALUES_FOUND = 2OTHERS          = 3.IF SY-SUBRC = 0."更新内表READ TABLE LT_RET_TAB INDEX 1.IF LT_RET_TAB-FIELDVAL <> ''."增加前导零CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'EXPORTINGINPUT  = LT_RET_TAB-FIELDVALIMPORTINGOUTPUT = E_MDV01 .WA_SHOW-MDV01 = E_MDV01.ENDIF.MODIFY IT_SHOW FROM WA_SHOW INDEX E_INDEX.ENDIF."刷新ALVPERFORM REFRESH_TABLE_DISPLAY USING PP_ALV_GRID.ENDIF.
ENDFORM.                    " HANDLE_ON_F4_HELP"5.设置fieldcatWA_FIELDCAT-F4AVAILABL = 'X'."6.注册事件"工作中心F4帮助DATA: LT_F4 TYPE LVC_T_F4 WITH HEADER LINE.CLEAR LT_F4.LT_F4-FIELDNAME  = 'MDV01'.LT_F4-REGISTER   = 'X'.LT_F4-CHNGEAFTER = 'X'.
*  LT_F4-GETBEFORE = 'X'.
*  LT_F4-INTERNAL   = 'X'.APPEND LT_F4.CALL METHOD PP_ALV_GRID->REGISTER_F4_FOR_FIELDSEXPORTINGIT_F4 = LT_F4[].SET HANDLER GR_EVENT_HANDLER->HANDLE_ON_F4_HELP_9000FOR PP_ALV_GRID.

这篇关于ABAP 中的搜索帮助的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1053893

相关文章

ABAP怎么把传入的参数刷新到内表里面呢?

1.在执行相关的功能操作之前,优先执行这一段代码,把输入的数据更新入内表里面 DATA: lo_guid TYPE REF TO cl_gui_alv_grid.CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'IMPORTINGe_grid = lo_guid.CALL METHOD lo_guid->check_changed_data.CALL M

【文末附gpt升级秘笈】腾讯元宝AI搜索解析能力升级:千万字超长文处理的新里程碑

腾讯元宝AI搜索解析能力升级:千万字超长文处理的新里程碑 一、引言 随着人工智能技术的飞速发展,自然语言处理(NLP)和机器学习(ML)在各行各业的应用日益广泛。其中,AI搜索解析能力作为信息检索和知识抽取的核心技术,受到了广泛的关注和研究。腾讯作为互联网行业的领军企业,其在AI领域的探索和创新一直走在前列。近日,腾讯旗下的AI大模型应用——腾讯元宝,迎来了1.1.7版本的升级,新版本在AI搜

代码随想录算法训练营第三十九天|62.不同路径 63. 不同路径 II 343.整数拆分 96.不同的二叉搜索树

LeetCode 62.不同路径 题目链接:62.不同路径 踩坑:二维的vector数组需要初始化,否则会报错访问空指针 思路: 确定动态数组的含义:dp[i][j]:到达(i,j)有多少条路经递推公式:dp[i][j] = dp[i-1][j] + dp[i][j-1]初始化动态数组:dp[0][0] = 1遍历顺序:从左到右,从上到下 代码: class Solution {pu

leetcode刷题(45)——35. 二叉搜索树的最近公共祖先

给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。” 例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5] 示例 1: 输入: root = [

【智能优化算法改进策略之局部搜索算子(五)—自适应Rosenbrock坐标轮换法】

1、原理介绍 作为一种有效的直接搜索技术,Rosenbrock坐标轮换法[1,2]是根据Rosenbrock著名的“香蕉函数”的特点量身定制的,该函数的最小值位于曲线狭窄的山谷中。此外,该方法是一种典型的基于自适应搜索方向集的无导数局部搜索技术。此法于1960年由Rosenbrock提出,它与Hooke-Jeeves模式搜索法有些类似,但比模式搜索更为有效。每次迭代运算分为两部分[3]: 1)

Day59 代码随想录打卡|二叉树篇---把二叉搜索树转换为累加树

题目(leecode T538): 给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。 提醒一下,二叉搜索树满足下列约束条件: 节点的左子树仅包含键 小于 节点键的节点。节点的右子树仅包含键 大于 节点键的节点。左右子树也必须是二叉搜索树。 方法:本题

智能优化算法改进策略之局部搜索算子(六)--进化梯度搜索

1、原理介绍     进化梯度搜索(Evolutionary Gradient Search, EGS)[1]是兼顾进化计算与梯度搜索的一种混合算法,具有较强的局部搜索能力。在每次迭代过程中,EGS方法首先用受进化启发的形式估计梯度方向,然后以最陡下降的方式执行实际的迭代步骤,其中还包括步长的自适应,这一过程的总体方案如下图所示:     文献[1]

漂亮的多选属性控件 画?调出帮助功能

转自:http://www.cocoachina.com/applenews/devnews/2014/0108/7677.html 漂亮的多选属性控件-SAMultisectorControl  SAMultisectorControl可以圆形实现控制多个属性的功能,设计精美。滑动圆形滑块即可方便地调整属性数值范围。SAMultisectorControl使用了CoreGraph

yii2 模糊搜索,使索引生效

$str1 = ‘名称’; $str2 = ‘描述’; Course::find() // %这样放,可以使name索引(设置了索引的话。同时false不能删掉,否则索引失效)生效 ->where([‘LIKE’, ‘name’, $str1.’%’, false]) ->andWhere([‘status’=>1]) // %这样放,可以使desc索引(设置了索引的话。同时false不能删掉,否

[SAP ABAP] 读取内表数据

1.读取单条数据 1.1 索引查找 语法格式 READ TABLE <itab> INTO <wa> INDEX <idx>. <itab>:代表内表 <wa>:代表工作区 <idx>:代表索引值 示例1 结果显示: 1.2 关键字查找 READ TABLE <itab> INTO <wa> WITH KEY k1 = f1 k2 = f2 ... kn = fn.