FPM五:拆解前面的四——OVP做查询和结果
说明:前面的例子是将list和search放到一个Feeder Class里的,这里来做拆解分步说明。
1.创建SEARCH的结构

2.创建RESULT的结构

表类型(不用表类型的话,需要自己在class里定义个内表,这里为了方便截图定义出来)

3.定义Search的feeder class.
3.1添加接口类:GUIBB (并激活所有method,默认是inactive的)

3.2重定义GET_DEFINITION方法:
method IF_FPM_GUIBB_SEARCH~GET_DEFINITION.
EO_FIELD_CATALOG_ATTR ?= CL_ABAP_STRUCTDESCR=>DESCRIBE_BY_NAME( 'ZLY_SEARCH01' )."获取查询参数结构
endmethod.
3.3重定义PROCESS_EVENT方法:将查询条件raise给result的feeder class。
METHOD IF_FPM_GUIBB_SEARCH~PROCESS_EVENT.
DATA:LR_FPM TYPE REF TO IF_FPM,
LR_EVENT_DATA TYPE REF TO CL_FPM_PARAMETER. IF IO_EVENT->MV_EVENT_ID = IF_FPM_GUIBB_SEARCH=>FPM_EXECUTE_SEARCH. LR_FPM = CL_FPM_FACTORY=>GET_INSTANCE( )."创建FPM 实例 CREATE OBJECT LR_EVENT_DATA."创建参数对象 LR_EVENT_DATA->IF_FPM_PARAMETER~SET_VALUE("将查询参数添加对参数对象里
IV_KEY = 'SEL_TAB'
IV_VALUE = IT_FPM_SEARCH_CRITERIA ). LR_EVENT_DATA->IF_FPM_PARAMETER~SET_VALUE("将查询参数添加对参数对象里
IV_KEY = 'MAX_NUM'
IV_VALUE = IV_MAX_NUM_RESULTS ). LR_FPM->RAISE_EVENT_BY_ID("将参数对象抛到LIST的事件中处理
IV_EVENT_ID = IF_FPM_GUIBB_LIST=>GC_EVENT_LIST_FILTER
IO_EVENT_DATA = LR_EVENT_DATA ). ENDIF.
ENDMETHOD.
4.创建RESULT的Feeder class:挨个激活method

4.1将前面创建的查询结果表类型添加到属性中:

4.2查询逻辑处理。
METHOD IF_FPM_GUIBB_LIST~PROCESS_EVENT.
DATA:GT_FPM_SEARCH_CRITERIA TYPE FPMGB_T_SEARCH_CRITERIA,
GV_MAX_NUM TYPE I,
GT_WHERE TYPE RSDS_WHERE_TAB. CASE IO_EVENT->MV_EVENT_ID.
WHEN IF_FPM_GUIBB_LIST=>GC_EVENT_LIST_FILTER.
IO_EVENT->MO_EVENT_DATA->GET_VALUE(
EXPORTING
IV_KEY = 'SEL_TAB'
IMPORTING
EV_VALUE = GT_FPM_SEARCH_CRITERIA ). IO_EVENT->MO_EVENT_DATA->GET_VALUE(
EXPORTING
IV_KEY = 'MAX_NUM'
IMPORTING
EV_VALUE = GV_MAX_NUM ). TRY .
CALL METHOD CL_FPM_GUIBB_SEARCH_CONVERSION=>TO_ABAP_SELECT_WHERE_TAB
EXPORTING
IT_FPM_SEARCH_CRITERIA = GT_FPM_SEARCH_CRITERIA
IV_TABLE_NAME = 'ZLY_SEARCH01'
* IO_FIELD_CATALOG = MO_CATALOG
IMPORTING
ET_ABAP_SELECT_TABLE = GT_WHERE.
SELECT GUID
OBJECT_ID
DESCRIPTION
PROCESS_TYPE
POSTING_DATE
SALES_ORG
PROVIDER
END_USER
RETAILER
STAT_USER
TXT30
PRODUCT_ID
ZZCHARG_TYPE
INTO TABLE GT_RESULT
FROM ZHSB_ORDER_INDEX
UP TO GV_MAX_NUM ROWS WHERE (GT_WHERE).
CATCH CX_FPMGB.
ENDTRY.
WHEN ''.
WHEN OTHERS.
ENDCASE.
ENDMETHOD.
5.重新以GET_DATA,展示结果集:
method IF_FPM_GUIBB_LIST~GET_DATA.
IF IV_EVENTID->MV_EVENT_ID = IF_FPM_GUIBB_LIST=>GC_EVENT_LIST_FILTER.
CT_DATA = GT_RESULT.
EV_DATA_CHANGED = ABAP_TRUE.
ENDIF.
endmethod.
6.数据目录设置:
method IF_FPM_GUIBB_LIST~GET_DEFINITION.
EO_FIELD_CATALOG ?= CL_ABAP_STRUCTDESCR=>DESCRIBE_BY_NAME( 'ZLY_RESULT01T' )."获取查询参数结构
endmethod.
到这里,Feeder class的事情基本完成了。下面就是去配置页面了。
7.创建OVP页面配置:
7.1T-CODE:FPM_WB
新建空组件,选择OVP

选择包,保存。

7.2点击编辑配置:进入配置主页面

7.3添加Search组件:

7.4配置UIBB。输入配置ID,点击配置UIBB。

7.5回到FPM_WB里选择Edit configuration

输入上面的FPM_SEARCH_UIBB和对应的配置ID,然后输入Feeder class进入配置页面:

点击下面添加搜索条件:

保存结束。
8.几乎相同方式,配置结果页面:
8.1FPM_WB通过Edit configuration进入,输入组件和配置ID,点击新建:

8.2输入Feeder class后进入配置页面:

8.3点击点击列:

点击保存。回到前面的配置页面,输入刚才配置的ID,保存。

到这里基本的配置已经完成,来看看效果。
说明:因为是通过FPM_WB工作台创建的,所以FPM_OVP_COMPONENT组件下会自动生成application,复制链接,直接运行即可:

效果如图:

FPM五:拆解前面的四——OVP做查询和结果的更多相关文章
- FPM四:用OVP做查询跳转到明细
前面做了查询的UIBB配置,在这边可以直接复用,查询的feeder class也就自动复用了. 1.给查询的feeder class添加接口,继续继承form的接口. 2.挨个实现每个方法,即使是用不 ...
- WDA-FPM-4-用OVP做查询跳转到明细
转载:https://www.cnblogs.com/sapSB/p/10100697.html FPM四:用OVP做查询跳转到明细 前面做了查询的UIBB配置,在这边可以直接复用,查询的feed ...
- liaoliao的四连做第二弹
liaoliao四连做第一弹 1.bzoj3211: 花神游历各国 由于$10^9$以内的数最多只会被开方$10$次,所以我们可以用线段树维护然后剪枝.. #include <cstdio> ...
- Python练习笔记——利用递归求年龄,第五个比第四个大2岁...
现在有五个人, 第五个人比第四个人大两岁,18 第四个人比第三个人大两岁,16 第三个人比第二个人大两岁,14 第二个人比第一个人大两岁,12 第一个人现10岁, 10 ...
- 第五章、Django之多表查询进阶与事务
目录 第五章.Django之多表查询 一.聚合查询 二.分组查询 三.F与Q查询 四.查询优化 五.Django开启事务 六.自定义char字段 七.ORM常用字段 第五章.Django之多表查询 一 ...
- MYSQL的全表扫描,主键索引(聚集索引、第一索引),非主键索引(非聚集索引、第二索引),覆盖索引四种不同查询的分析
文章出处:http://inter12.iteye.com/blog/1430144 MYSQL的全表扫描,主键索引(聚集索引.第一索引),非主键索引(非聚集索引.第二索引),覆盖索引四种不同查询的分 ...
- JDBC最原始的代码做查询操作
首先编写一个User类. public class User { private String username; private String password; public String get ...
- 第87讲:scala中使用For表达式做查询
今天我们来学习下如何用for表达式在scala中做查询. 先来看看示例代码 case class Book(title:String,authors:List[String]) object text ...
- Spring Data Jpa (四)注解式查询方法
详细讲解声明式的查询方法 1 @Query详解 使用命名查询为实体声明查询是一种有效的方法,对于少量查询很有效.一般只需要关心@Query里面的value和nativeQuery的值.使用声明式JPQ ...
随机推荐
- laravel application 容器app
vendor/laravel/framework/src/Illuminate/Foundation/Application.php Application是laravel的核心容器,几乎处理所有东西 ...
- python中sorted()和set()去重,排序
前言 在看一个聊天机器人的神经网络模型训练前准备训练数据,需要对训练材料做处理(转化成张量)需要先提炼词干,然后对词干做去重和排序 words = sorted(list(set(words))) 对 ...
- typeHandler
package com.cainiao.aeye.chdir.manager.tddl.Handler; import com.cainiao.aeye.chdir.core.enums.AudioF ...
- 移动端js调试工具:eruda
通常写前端页面都在Chrome浏览器的开发模式下进行调试,但是写放在移动端的H5页面时,有时候会遇到在Chrome上调试没有问题,但是在手机的浏览器上有问题的情况:或者有些功能只能在特定的容器中才能其 ...
- C# RSA加解密与验签,AES加解密,以及与JAVA平台的密文加解密
前言: RSA算法是利用公钥与密钥对数据进行加密验证的一种算法.一般是拿私钥对数据进行签名,公钥发给友商,将数据及签名一同发给友商,友商利用公钥对签名进行验证.也可以使用公钥对数据加密,然后用私钥对数 ...
- postgresql开启网络连接
默认情况下,postgresql是只允许localhost连接的,如果需要使用远程连接,需要修改两个配置文件. postgresql.conf 和 pg_hba.conf 在postgresql.co ...
- 谷歌浏览器导出excel失败问题解决(网上都没解决)
java poi导出excel报了网络错误,信息已经写回到chrome浏览器(IE/FF均无此问题).如下所示: 从chrome的network大小部分也可以看出是正确的. 网上很多答案说将file. ...
- 线程池如何复用一个线程-- ThreadPoolExecutor的实现(未完)
任务是一组逻辑工作单元,而线程则是使任务异步执行的机制.在Java中,Runnable对象代表一个任务,Thread对象负责创建一个线程执行这个任务. 前提:1. 程序需要处理大量任务 2. 任务的执 ...
- 动态令牌验证遇到的问题(判断用户长按backspace键)
因为最近负责泰康项目的前端工作,他们的登录需要进行安全验证,也就是所谓的双因素验证,即在OA平台登录过后,还需要安全部门发送安全令牌进行验证.令牌验证效果如下: 主要功能有:1.默认第一项focus. ...
- FL Studio里的常规设置介绍
上期我们介绍了FL Studio中的项目设置,今天我们来介绍FL Studio中的常规设置.要打开常规设置,我们需要在主菜单中选择选项>常规选项,当然也可以直接按快捷键F10. “常规设置”页面 ...