Input field有与其data type相关的输入检查。Input field可以有possible value help。可以通过screen table修改input/output field的下列属性:
l Size dynamic
l Dialog behavior input field output field required
l Bright
l Invisible
l 2 dimension
激活所有的attributes基本上是不可能的,比如说对于char类型field你不可能激活其leading zero属性,因为这个属性是针对numeric field的。
可以通过两种方式创建input/output fields:
l 直接在layout editor中输入,通过在text attribute中输入下划线的数量来决定field的大小。对于数据类型的变量,可以输入comma作为分隔符,period作为decimal point。在最后通过V作为+,-符号的placeholder。
l 通过ABAP Dictionary作为template
只有在ABAP程序中通过DATA或TABLES声明同名的全局变量来access input/output field中的内容。可以通过parameter ID把值存储在SAP memory中。这些值与terminal session与user相关,可以在所有的internal session和external session中使用。Set parameter在PAI processing block中把字段中的内容copy到sap memory中。在PBO结束时GET PARAMETER从sap memory中取得值填入到field中,前提条件是该field在PBO代码中没有被填充值,即它的value为initial。可以通过ABAP DICTIONARY把input/output field同SAP memory中的一块区域链接起来。如果使用ABAP Dictionary定义input/output field,parameter ID就会显示在screen painter的dictionary attribute的parameter ID中。SET PARAMETER GET PARAMETER允许你单独激活SPA或GPA。你可以在表TPARA中定义parameter ID。在PAI module处理之前,系统会自动检查screen上输入的数据。首先会检查所有的required field是否输入值,然后根据field的data type进行format check,如果field是abap dictionary中的domain定义,并且定义了fixed values那么就会进行fixed value check。如果有check table那么就会进行foreign key check。前提条件是field element的foreign key check属性被激活。可以在PAI EVENT中写自己的input check逻辑,可以通过语句FIELD。。。MODULE。。。来实现。这个语句表示module中只处理跟这个field的相关的。如果在这个module中报出error或warning message,系统会重新显示这个screen,并不会执行screen的PBO。只有FIELD指定的field处于ready input状态。注意FIELD语句用来保证指定的field处于ready for input状态。如果不是FIELD语句中的module报的message,就不会有这样的效果。为了实现多个field在error dialog之后处于ready for input状态,可以使用:CHAIN FIELD: fld1, fld2, fld3.
MODULE input_check. ENDCHAIN语句。FIELD语句不仅实现了使field处于ready for input状态。而且还保证了当前的处理中,这些field修改后的内容是可见的。Error或warning message报了之后,field所指定的字段处于ready for input状态,输入新值后,并不会重新处理所有的PAI过程,系统会检测那个field的内容被更改了并继续执行相应的第一个field statement。如果你只是confirm了一个warning message,那么就会执行MESSAGE语句之后的程序。Dialog message的类型:
l Termination (A,X):程序终止,用户必须重新启动事务。X:会出现dump
l Error process(E):程序中断,用户必须更正输入
l Warning processing(W):程序中断,用户可以更正输入也可以忽略继续运行
l Information processing(I):程序中断,通过enter confirm继续执行
l Success Information(S):在下个screen中显示信息
FIELD STATEMENT和DATA TRANSPORT的顺序
PROCESS AFTER INPUT.
MODULE first.
FIELD A MODULE check_a.
FIELD B MODULE check_b.
MODULE last.
1. ENTER
2. 除了A和B,所有的字段都从SCREEN传到了ABAP程序
3. 执行module first
4. A的内容从屏幕传到程序
5. 执行check_a
6. B的内容从屏幕传到程序
7. 执行check_b
8. 执行module last
如果field表达式的某个module发出了error或warning message,CHAIN structure中所有fields的值都回被重新传回到screen fields中。Field value check通常需要访问数据库,所以为了提高performance,有时候需要避免它。有时候用户误进入了某个屏幕,他也不知道如何输入正确的值,这时需要给他机会能够退出屏幕。为了避免由于事务退出屏幕,需要保护屏幕中已输入的值。如果你在FIELD STATEMENT的MODULE STATEMENT后面加上ON INPUT,MODUEL只在FIELD的initial value被改变时才调用。对于CHAIN block可以使用ON CHAIN-INPUT,只要其中的一个字段从initial value被改变就会被调用。只有在FIELD STATEMENT中的module才可以使用ON INPUT addition。如果使用的是ON REQUEST addition,只有输入新值时才能执行其module,同理还有ON CHAIN-REQUEST。如果MODULE有 ON EXIT-COMMAND addition,那么他会在automatically input check之前执行。每个screen只能有一个ON EXIT-COMMAND MODULE。其不能使用到FIELD STATEMENT中。如果在module中你没有离开screen,就会接着执行automatically input check,并在这之后执行PAI中的其他module。Back和cancel function应当使logical level回退,同一level的screen应当回到initial screen。对于detailed information screen应当回到调用它的screen。Cancel和back在dialog behavior方面有所不同。Exit就会退回到调用这个processing unit的地方。对于initial screen三个功能back cancel exit都会退回到调用这个程序的地方。对于单屏幕的transaction,Back离开当前事务并退回到调用它的program,Exit同back,Exit和back在dialog behavior方面有所不同,主要在是否允许丢失输入数据。Cancel重新回到screen并初始化所有的data field。
可以通过dropdown list为用户提供input help。F4 HELP是标准功能,input help通常定义在ABAP Dictionary中。Drop down box不允许用户直接输入值,只能从下拉框中选择值。为input field建立drop down box的步骤:
l Set the drop down attribute to List box
l Change the Visible length attribute to the displayed length of the descriptive text
l Set the value list attribute to ‘’ to use value help from the ABAP Dictionary
l 如果需要的话:set the function code for the selection,同menu entry一样,这个function code也会激活PAI event。
Visible length决定了field和selection list的宽度(包括button)。对于ABAP Dictionary field下拉表的值会用search help自动填充,要求这个field必须有一个两个字段的search help或者是fixed values。Radio buttons只能从一组中选择一个,check boxes可以选择多个,radio button遵循的是one selection rules out all other options。Check boxes和radio buttons必须attach a name。除了input/output field你还可以为他显示text和icon。文本可以通过text attribute来显示,Icon可以通过icon name attribute来显示,可以动态改变Input和Invisible属性。通过screen painter的full screen editor可以创建checkbox,必须给checkbox指定一个name,在ABAP PROGRAM中要定义一个同名的长度为1类型为C的全局变量。可以同通过这个变量的名称来确定这个checkbox是否被选中,可以给check box分配一个function code和function type。当用户选中它是,便会激活PAI event,function code便会传给command field。同样也是通过screen painter来创建radio button的。其步骤如下:
l 创建每一个radio button,必须为每一个button分配一个Name。然后在ABAP PROGRAM中定义同名的长度为1的类型为char的全局变量。
l 定义radio button group,选中多个radio button,选怎edit->grouping->radio button group->define。
在ABAP PROGRAM中,通过同名的全局变量来确认radio button是否被选中。可以为radio button group分配function code和function type,选中radio button group中的任一一个radio button都会触发PAI事件,相应的function code也会被传送到command field中。
Push button是command field的input field。通过鼠标用户就会得到跟单个screen上的一些元素或者一组screen上的一些元素相关的function。在data area中的push button可以hide或show一些信息。应该让pushbutton尽量靠近与其相关的元素。当鼠标点击了Pushbutton,就会执行相应的PAI processing block。Pushbutton可以有text或icon,你可以静态指定icon也可以通过ICON_CREATE动态指定。可以通过screen table动态设置visible length,output field和invisible属性。你也可以动态设置pushbutton的text,需要设置output field属性,并在ABAP PROGRAM中定义一个同名的全局变量。创建push button的步骤:
l 在screen painter中创建,需要给pushbutton分配一个name,可以在text属性中输入static text,可以在function code属性中输入function code。Function code可以自动传送到OK
_CODE中。
l 激活command field,你必须在screen painter中给这个field一个name,然后在ABAP PROGRAM中定义一个同名的类型为sy-ucomm的全局变量。如果用户点击function type为‘’的pushbutton就会激活PAI event,如果function type为E,就会执行AT EXIT-COMMAND MODULE。