在屏幕开发中,存在如下逻辑流:
PBO(Process Before Output):屏幕输出之前触发
PAI(Process After Input):用户在屏幕中执行操作触发
POH(Process On Help-Request):查看帮助信息触发(F1)
POV(Process On Value-Request):查询搜索帮助触发(F4)
其中PBO为输出流,PAI为输入流,POH和POV可笼统理解为输入流
在屏幕开发中,系统会自动将屏幕的值传递到程序中与之同名的全局字段中。
但是如果使用语句控制语法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才能查到。
FIELD makt-matnr MODULE get_text ON INPUT.
2.用户将字段值改为初始值,则不触发MOD
例如把物料号置空,并没有执行清空物料描述的逻辑

3.如果用户不输入,而是直接在代码中为物料赋值,也等同于改变了初始值,则会触发MOD
makt-matnr = '000000010000000002'.
CALL SCREEN '9000'.

FIELD makt-matnr MODULE get_text ON REQUEST.
1.只有当用户输入值时,才调用MOD。任何形式手工输入,都可以触发;
系统按照如下方式设置字段,也被视为手工输入:
例如输入物料号,则会调用MOD查询到物料描述

2.如果清空物料号,也等同输入操作,则执行了清空物料描述的逻辑

3.如果用户不输入,而是直接在代码中为物料赋值,则不会触发MOD
makt-matnr = '000000010000000002'.
CALL SCREEN '9000'.

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.
1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里
request.cookies和RubyonRails中的cookies对象有区别吗?我目前正在尝试将带有cookie的请求从我的node.js服务器发送到我的ROR4应用程序。似乎在ROR应用程序中,request.cookies包含我发送的cookie,但是cookies对象(现有逻辑所基于的对象)没有它。我已经搜索了文档,但找不到任何相关内容。我错过了什么吗?感谢您的帮助。 最佳答案 理想情况下,request.cookies和cookies应该相同。但是,在POST(创建操作)请求中,rails会验证XSRFtoken。如果
我的Ruby-on-Rails项目中有以下文件结构,用于规范:/spec/msd/serviceservice_spec.rb/support/my_modulerequests_stubs.rb我的request_stubs.rb有:moduleMyModule::RequestsStubsmodule_functiondeflist_clientsurl="dummysite.com/clients"stub_request(:get,url).to_return(status:200,body:"clientsbody")endend在我的service_spec.rb我有:re
如何将自己的字段类型添加到formtastic中?例如,我需要一个自定义的日期时间输入,我想要这样的东西::my_date%>这显然是行不通的,因为formtastic不知道:my_date(只有:boolean、:string、:datetime等等...)但是我怎样才能添加额外的输入类型呢? 最佳答案 您需要添加自定义输入法:classMyCustomFormtasticFormBuilder这非常适合新的HTML5输入类型。你可以这样使用它:MyCustomFormtasticFormBuilderdo|f|%>:my_dat
我正在尝试根据RyanBatesscreencastonsubdomains在Rails3中设置子域.但是它对我不起作用。我有以下设置:#routes.rbconstraints(Subdomain)doget'devices'=>'devices#all'end#lib/subdomain.rbclassSubdomaindefself.matches?(request)#binding.pryrequest.subdomain.present?&&request.subdomain=="admin"endend加载urladmin.localhost:3000/devices应该将
是否有chrome开关来抑制“外部协议(protocol)请求”?我正在使用selenium-ruby-watirwebdriver自动化应用程序。我在网上搜索了绕过此窗口和对话的解决方案:http://productforums.google.com/forum/#!topic/chrome/K22hXwRy6zQ概述了我们如何手动执行此操作。但是对于Selenium-Chrome-Ruby,我需要通过可能设置一个chrome开关(chorme开关列表:=http://src.chromium.org/svn/trunk/src/chrome/common/chrome_swit
我想在请求期间动态更改ActiveRecord模型类的表名。例如,有许多具有相似结构(列)的表:mydb:sample_data_12222sample_data_12223sample_data_12224sample_data_12225...所以,我想做的是..._1。定义基本模型类,如:classSampleData_2。在请求期间更改目标表,例如:defaction_methodSampleData.set_table_name"sample_data_#{params[:id]}"@rows=SampleData.all如果在非线程环境(如Passenger/mod_rai
我正在尝试使用RubygemRestClient为我的一个FusionTables更新样式。这是我的代码:require'rest_client'tableId=''styleId=''key=''table_url="https://www.googleapis.com/fusiontables/v1/tables/#{tableId}/styles/#{styleId}?key=#{key}"update='{"polygonOptions":{"strokeColor":"#ffffff"}}'token='STRINGCONTAININGAUTHORIZATIONTOKEN'R
ifRails.env.development?@current_location_geo=Geocoder.search(request.remote_ip).firstelse@current_location_geo=request.locationendif!@current_location_geo.nil?&&@current_location_geo.ip=="127.0.0.1"@departure_currency_code="AUD"@departure_currency_name=["AustralianDollar(AUD$)","AUD"]else@count
我在更改正在构建的SOAPxml的命名空间时遇到问题。我不确定如何将“xmlns:env=”更改为“xmlns:soapenv=”,将“xmlns:tns=”更改为“xmlns:web=”我要构建的内容:100degreeCelsiusdegreeFahrenheit我目前得到的100degreeCelsiusdegreeFahrenheit我的代码:client=Savon.client(wsdl:"http://www.webservicex.net/ConvertTemperature.asmx?WSDL")message={temperature:'100',FromUnit: