ABAP 辨析ON INPUT|REQUEST|CHAIN-INPUT|CHAIN-REQUEST
1、逻辑流
在屏幕开发中,存在如下逻辑流:
PBO(Process Before Output):屏幕输出之前触发
PAI(Process After Input):用户在屏幕中执行操作触发
POH(Process On Help-Request):查看帮助信息触发(F1)
POV(Process On Value-Request):查询搜索帮助触发(F4)
其中PBO为输出流,PAI为输入流,POH和POV可笼统理解为输入流
2、语句控制传递FIELD
在屏幕开发中,系统会自动将屏幕的值传递到程序中与之同名的全局字段中。
但是如果使用语句控制语法FIELD,则FIELD指定的字段的值,将会出现赋值延迟,数据不是自动同步到ABAP程序,而是在执行FIELD语句时,对应的字段值会传递到程序中。
例如:在屏幕中添加物料和物料描述两个字段
逻辑流如下:
PROCESS BEFORE OUTPUT.
MODULE status_9000. PROCESS AFTER INPUT.
MODULE get_text."获取物料描述
FIELD makt-matnr.
MODULE get_text."获取物料描述
GET_TEXT
MODULE get_text INPUT.
IF makt-matnr IS NOT INITIAL.
SELECT SINGLE
maktx
FROM makt
INTO makt-maktx
WHERE matnr = makt-matnr
AND spras = sy-langu.
ELSE.
CLEAR:makt-maktx.
ENDIF.
ENDMODULE.
使用FIELD,导致屏幕中MAKT-MATNR必须执行到FIELD makt-matnr.时,makt-matnr才有值。第一个get_text查询不到物料描述,第二个get_text才能查到。
3、模块条件调用语法
3.1 单一字段条件调用
3.1.1 ON INPUT
FIELD makt-matnr MODULE get_text ON INPUT.
2.用户将字段值改为初始值,则不触发MOD
例如把物料号置空,并没有执行清空物料描述的逻辑
3.如果用户不输入,而是直接在代码中为物料赋值,也等同于改变了初始值,则会触发MOD
makt-matnr = '000000010000000002'.
CALL SCREEN '9000'.
3.1.2 ON REQUEST
FIELD makt-matnr MODULE get_text ON REQUEST.
1.只有当用户输入值时,才调用MOD。任何形式手工输入,都可以触发;
系统按照如下方式设置字段,也被视为手工输入:
- 通过SET PARAMETER字段输入(手工和自动)
- 通过HOLD DATA功能设置字段输入(System→User Profile→Hold data中设定)
- 用于事务调用时的参数输入(CALL TRANSACTION...USING)
- 用于整个定制系统的全局字段
例如输入物料号,则会调用MOD查询到物料描述
2.如果清空物料号,也等同输入操作,则执行了清空物料描述的逻辑
3.如果用户不输入,而是直接在代码中为物料赋值,则不会触发MOD
makt-matnr = '000000010000000002'.
CALL SCREEN '9000'.
3.2 组合字段条件调用
3.2.1 ON CHAIN-INPUT|REQUEST
PROCESS AFTER INPUT. CHAIN.
FIELD:marc-werks,makt-matnr.
MODULE check_matnr ON CHAIN-INPUT.
MODULE get_text.
ENDCHAIN. MODULE user_command_9000.
检查物料在工厂下是否存在
MODULE check_matnr INPUT.
SELECT SINGLE
*
FROM marc
INTO @DATA(ls_marc)
WHERE werks = @marc-werks
AND matnr = @makt-matnr. IF ls_marc IS INITIAL.
MESSAGE '物料在工厂下不存在' TYPE 'E'.
ENDIF.
ENDMODULE.
其中使用的ON CHAIN-INPUT 和 ON CHAIN-REQUEST的使用与ON INPUT和ON REQUEST几乎相同。
但是在CHAIN语句中,同样可以只使用ON INPUT将条件的触发,限制在特定的字段中,
例如如下代码:此时输入工厂,并不会触发get_text,只有输入物料,才会触发get_text。
CHAIN.
FIELD:marc-werks.
FIELD:makt-matnr MODULE get_text ON INPUT.
ENDCHAIN.
而下列代码:使用ON CHAIN-INPUT无论输入工厂还是物料,都会触发get_text。这就是ON INPUT|REQUEST 和 ON CHAIN-INPUT|REQUEST的区别
CHAIN.
FIELD:marc-werks.
FIELD:makt-matnr MODULE get_text ON CHAIN-INPUT.
ENDCHAIN.
ABAP 辨析ON INPUT|REQUEST|CHAIN-INPUT|CHAIN-REQUEST的更多相关文章
- 高效开发之SASS篇 灵异留白事件——图片下方无故留白 你会用::before、::after吗 link 与 @import之对比 学习前端前必知的——HTTP协议详解 深入了解——CSS3新增属性 菜鸟进阶——grunt $(#form :input)与$(#form input)的区别
高效开发之SASS篇 作为通往前端大神之路的普通的一只学鸟,最近接触了一样稍微高逼格一点的神器,特与大家分享~ 他是谁? 作为前端开发人员,你肯定对css很熟悉,但是你知道css可以自定义吗?大家 ...
- :input 匹配所有 input, textarea, select 和 button 元素
描述: 查找所有的input元素,下面这些元素都会被匹配到. HTML 代码: <form> <input type="button" value="I ...
- input[type='submit']input[type='button']button等按钮在低版本的IE下面,去掉黑色边框的问题
今天做一个tabs效果的时候,发现上面的button在低版本下会出现黑色的边框,很难看,于是我整理了下几个去掉黑色边框的办法: 1.在button的外层嵌套一个div,设置button的border: ...
- jquery中选择器input:hidden和input[type=hidden]的区别
关于选择器:hidden的说明,在jquery说明文档中是这样说的:匹配所有不可见元素,或者type为hidden的元素.而[type=hidden]是查找所有type属性等于hidden的元素.两者 ...
- clear & file input & reset & file input
clear & file input & reset & file input Clear <input type="file"> docume ...
- iphone中点击input不能选中input中的内容
点击一个input,通过它的click事件选中这个input框中的内容,这个用jquery挺好实现的,但是有一个问题,在PC端和android手机上都可以让功能正常实现,在iphone上就没有效果了, ...
- JAVA基础知识(三):input.nextLine() 和input.next()
next()方法在读取内容时,会过滤掉有效字符前面的无效字符,对输入有效字符之前遇到的空格键.Tab键或Enter键等结束符,next()方法会自动将其过滤掉:只有在读取到有效字符之后,next()方 ...
- input子系统四 input事件处理【转】
转自:https://blog.csdn.net/qwaszx523/article/details/54139897 转自http://blog.csdn.net/coldsnow33/articl ...
- input系统——android input系统
AndroidInput系统--JNI NativeInputManager InputManger InputReader AndroidInput系统--InputReader AndroidIn ...
- String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";作用!!!!!
<%String path = request.getContextPath();String basePath = request.getScheme()+"://"+re ...
随机推荐
- 【深入浅出 Yarn 架构与实现】4-1 ResourceManager 功能概述
前面几篇文章对 Yarn 基本架构.程序基础库.应用设计方法等进行了介绍.之后几篇将开始对 Yarn 核心组件进行剖析. ResourceManager(RM)是 Yarn 的核心管理服务,负责集群管 ...
- java集合类 collection接口,List集合
java集合类:collection接口,List集合 在java.util包中提供了一些集合类,集合类又被称为容器,常用的有List集合,Set集合,Map集合.下面将介绍collection接口和 ...
- 处理get请求中文乱码tomcat请求
修改tomcat中server配置:添加 URIEncoding="UTF-8" <Connector port="8090" protocol=&quo ...
- pyftpdlib中文乱码问题解决方案
python实现简易的FTP服务器 from pyftpdlib.authorizers import DummyAuthorizer from pyftpdlib.handlers import F ...
- 【大数据-课程】高途-天翼云侯圣文-Day3-实时计算原理解析
〇.老师及课程介绍 一.今日内容 二.实时计算理论解析 1.什么是实时计算 微批处理.流式处理.实时计算 水流和车流的例子 spark streaming就是一种微批处理,水满了才处理,进入下一个地方 ...
- angr_ctf——从0学习angr(三):Hook与路径爆炸
路径爆炸 之前说过,angr在处理分支时,采取统统收集的策略,因此每当遇见一个分支,angr的路径数量就会乘2,这是一种指数增长,也就是所说的路径爆炸. 以下是路径爆炸的一个例子: char buff ...
- MySQL事务(四大特性)-存储过程
目录 一:事务 1.四大特性(ACID) 2.事物存在的必要性(真实比喻) 3.如何使用事务 4.开启事务-回滚-确认 二:事务案例实战 1.模拟消费 2.创建 3.插入数据 4.开启事务 5.修改操 ...
- 【JVM故障问题排查心得】「内存诊断系列」Docker容器经常被kill掉,k8s中该节点的pod也被驱赶,怎么分析?
背景介绍 最近的docker容器经常被kill掉,k8s中该节点的pod也被驱赶. 我有一个在主机中运行的Docker容器(也有在同一主机中运行的其他容器).该Docker容器中的应用程序将会计算数据 ...
- 模型驱动设计的构造块(上)——DDD
为了保证软件实践得简洁并且与模型保持一致,不管实际情况如何复杂,必须运用建模和设计的实践. 某些设计决策能够使模型和程序紧密结合在一起,互相促进对方的效用.这种结合要求我们注意每个元素的细节,对细节问 ...
- 论文解读(CAN)《Contrastive Adaptation Network for Unsupervised Domain Adaptation》
论文信息 论文标题:Contrastive Adaptation Network for Unsupervised Domain Adaptation论文作者:Guoliang Kang, Lu Ji ...