ABAP 选择屏幕 自定义搜索帮助

物料号为例

如图展示的物料,是不经过自定义搜索帮助处理的,如果我只需要物料描述和物料号,且只限定20开头的物料,就需要用到自定义搜索帮助了

当使用自定义帮助后 效果如下:

代码详解

构建选择屏幕

SELECTION-SCREEN BEGIN OF BLOCK blk1.
PARAMETERS:
p_matnr TYPE makt-matnr.
SELECTION-SCREEN END OF BLOCK blk1.

构建自定义帮助

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_matnr. "
PERFORM frm_create_matnr_help. " 创建自定义帮助的例程

处理帮助字段

"在屏幕初始化前 构建用户自定义帮助的例程
INITIALIZATION .
PERFORM frm_get_matnr_f4. "创建例程 例程里面是 需要的字段 也就啊是 20 开头的物料以及 物料描述

帮助字段的程逻辑

" 构建全局变量内表
TYPES:BEGIN OF ty_f4,
matnr TYPE mara-matnr,
maktx TYPE makt-maktx,
END OF ty_f4. DATA : gt_f4 TYPE STANDARD TABLE OF ty_f4. "获取数据的例程
FORM frm_get_matnr_f4.
SELECT
from makt
FIELDS
makt~matnr,
makt~maktx
WHERE right( makt~matnr,8 ) LIKE '20%'
AND makt~spras eq @sy-langu
INTO CORRESPONDING FIELDS OF TABLE @gt_f4. "此处取数逻辑按自己的业务需求来 ENDFORM.

创建自定义帮助

FORM frm_create_matnr_help .
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'MATNR' " 参考的表字段
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'P_MATNR' " 用于选择屏幕上的哪一个
value_org = 'S'
TABLES
value_tab = gt_f4 " 自定义的表 需要全局变量 一般来说也是通过例程处理的 frm_get_matnr_f4
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
ENDFORM.

自定义表头描述

例程代码如下

FORM frm_create_matnr_help .

  DATA: lt_dfies    TYPE TABLE OF dfies,
lr_tabdescr TYPE REF TO cl_abap_structdescr,
lv_offset TYPE DOFFSET. READ TABLE gt_f4 INTO DATA(gs_f4) INDEX 1.
IF sy-subrc EQ 0. lr_tabdescr ?= cl_abap_structdescr=>describe_by_data( gs_f4 ). " ?= 显示向下转换
lt_dfies = cl_salv_data_descr=>read_structdescr( lr_tabdescr ). " 获取结构 LOOP AT lt_dfies ASSIGNING FIELD-SYMBOL(<fs_dfies>). " 填入相关描述
<fs_dfies>-lfieldname = <fs_dfies>-fieldname.
<fs_dfies>-offset = lv_offset.
IF <fs_dfies>-fieldname = 'MATNR'.
<fs_dfies>-scrtext_l = '测试修改表头描述'.
<fs_dfies>-scrtext_m = '测试修改表头描述'.
<fs_dfies>-scrtext_s = '测试修改表头描述'.
<fs_dfies>-reptext = '测试修改表头描述'.
ELSEIF <fs_dfies>-fieldname = 'MAKTX'.
<fs_dfies>-scrtext_l = '测试'.
<fs_dfies>-scrtext_m = '测试'.
<fs_dfies>-scrtext_s = '测试'.
<fs_dfies>-reptext = '测试'.
ENDIF.
lv_offset = lv_offset + <fs_dfies>-intlen.
ENDLOOP.
ENDIF. CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'MATNR' " 参考的表字段
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'P_MATNR' " 用于选择屏幕上的哪一个
value_org = 'S'
TABLES
value_tab = gt_f4 " 自定义的表 需要全局变量 一般来说也是通过例程处理的 frm_get_matnr_f4
field_tab = lt_dfies " 表头描述
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
ENDFORM.

样例展示

abap 自定义搜索帮助的更多相关文章

  1. Qt之自定义搜索框

    简述 关于搜索框,大家都经常接触.例如:浏览器搜索.Windows资源管理器搜索等. 当然,这些对于Qt实现来说毫无压力,只要思路清晰,分分钟搞定. 方案一:调用QLineEdit现有接口 void ...

  2. 【Qt】Qt之自定义搜索框【转】

    简述 关于搜索框,大家都经常接触.例如:浏览器搜索.Windows资源管理器搜索等. 当然,这些对于Qt实现来说毫无压力,只要思路清晰,分分钟搞定. 简述 效果 细节分析 Coding 源码下载 效果 ...

  3. Android自定义View——自定义搜索框(SearchView)

    Android自定义View——自定义搜索框(SearchView) http://www.apkbus.com/android-142064-1-1.html

  4. bootStrap-table服务器端后台分页的使用,以及自定义搜索框的实现,前端代码到数据查询超详细讲解

    关于分页,之前一直纯手写js代码来实现,最近又需要用到分页,找了好多最终确定bootstrap-table,正好前端页面用的是bootstrap. 首先下载BootStrap-table的js和CSS ...

  5. FastAdmin Bootstrap-Table 自定义搜索的重写提示

    Bootstrap-Table 自定义搜索的重写提示 群友询问:这个搜索能自己写么? [群主]Karson-深圳(请勿@) "★找大神-山西 10:59:32 查看原文 [图片] 这个搜索能 ...

  6. Angular4.x 自定义搜索组件

    Angular4 随笔(三)  ——自定义搜索组件 1.简介 本组件主要是实现了搜索功能,主要是通过父子组件传值实现. 基本逻辑: 1.创建一个搜索组件,如:ng g component  searc ...

  7. iOS开发UI篇 -- UISearchBar 属性、方法详解及应用(自定义搜索框样式)

    很多APP都会涉及到搜索框,苹果也为我们提供了默认的搜索框UISearchBar.但实际项目中我们通常需要更改系统默认搜索框的样式.为了实现这一目标,我们需要先搞懂 UISearchBar 的属性及方 ...

  8. element-UI中el-select下拉框可搜索时候,filter-method自定义搜索方法

    使用element-UI框架的使用,我们经常使用el-select下拉框,很多时候还需要使用可搜索的下拉框,然后elementUI官网的实例中只是提了一下filter-method可以自定义搜索方法, ...

  9. Qt之自定义搜索框——QLineEdit里增加一个Layout,还不影响正常输入文字(好像是一种比较通吃的方法)

    简述 关于搜索框,大家都经常接触.例如:浏览器搜索.Windows资源管理器搜索等. 当然,这些对于Qt实现来说毫无压力,只要思路清晰,分分钟搞定. 方案一:调用QLineEdit现有接口 void ...

  10. iOS商城demo、音乐播放器、视频通话、自定义搜索、转场动画等源码

    iOS精选源码 微信自定义搜索框实现 一个商城Demo,持续更新中 在Object-C中学习数据结构与算法之排序算法 iOS 音乐播放器之锁屏歌词+歌词解析+锁屏效果 XLsn0wPushTimePi ...

随机推荐

  1. Java中Set里remove详解

    例如 1 HashSet set = new HashSet(); 2 Person p1 = new Person(1001,"AA"); 3 Person p2 = new P ...

  2. python自动化-取消"Chrome正受到自动软件的控制"提示

    chrome浏览器V78及以上版本解决做法,代码如下: from selenium import webdriver chrome_options = webdriver.ChromeOptions( ...

  3. java中的Filter(过滤器)和Intercepter(拦截器)的认知

    一.过滤器的配置 首先,从认知方面看,如果自己真的对Filter和Intercepter 不熟悉或者忘记的话可以自己在IDEA中编写Demo进行查看两个的区别,这也是自己动手去认知的过程.首先从Fil ...

  4. python常用的六个字符串处理方法

    1.upper(将小写字母转换为大写) 语法: str.upper() 参数: NA 实例: a = 'abc' b = a.upper() print(b) 结果: ABC 2.lower(将小写字 ...

  5. ipvsadm DR模型的实现方式

    DR模型的lvs ----在实现DR模型的时候所有RS都要屏蔽掉ARP请求的响应 实现方法:1.可以用路由器绑定静态VIP:MAC(DVIP)2.可以使用arptables3.可以使用 kernel ...

  6. .Net最小工作线程对应用程序性能的影响

    这要从Asp.Net建立连接的机制说起,Asp.Net建立连接依赖于.Net线程池,线程池的大小决定了应用程序最多可以同时执行的请求数量.maxWorkerThreads最大工作线程,决定单个处理器最 ...

  7. Task :app:lintVitalRelease FAILED

    错误信息:Task :app:lintVitalRelease FAILED 问题原因:dl.google.com 无法连接 解决办法: 修改hosts(推荐)通过在线查询ip网站,找到dl.goog ...

  8. python 删除大于超过一定时间文件

    import os from datetime import datetime, timedelta path = "." if __name__ == '__main__': f ...

  9. MATLAB基础—基础认识

    数建-MATLAB(基础认识) 一些基本使用 clear all :清除Workspace中的所有变量 clc: 清除Command Window中的所有命令 注释:%%(空空格)多行注释 或 % 单 ...

  10. API对象--Ingress(chrono《kubernetes入门实战课》笔记整理)

    [概念说明] Service 的功能和运行机制,主要由 kube-proxy 控制的四层负载均衡,即根据IP.PORT来做负载均衡.而很多应用都是在7层做均衡更为合理,比如根据主机名.URI.请求头. ...