ABAP SCREEN BASIC

SAP programming model

Single-screen transaction

l         Input screen and data screen组合在一个window

l         Create, changedisplay模式自由切换

l         Direct access to each object

l         System retains context after saving

ABAP program types:

l         Executable program(type 1)可以通过ABAP EDITOR直接运行,一个processing blocks set按照预先定义好的顺序执行。可以使用标准的selection screen。主要用来显示list

l         Module pool(type M)为了使module pool可以被执行你必须至少定义一个transaction code用来指定initial screen。可以通过screen attributes来静态指定screen的调用顺序或者通过程序代码来动态指定screen的调用顺序

还有一些类型的程序并不能够被直接执行,它们用来作为modularization units的容器,被其他可执行程序调用。只要你调用这些程序中的任一module,系统都会把整个主程序调用到当前的internal session中。

l         Function Group(Type F)包括function moduleslocal data declarationsscreens

l         Include Program(Type I)可以包括任何ABAP Statements

l         Interface Pool (Type J)包括global interfaceslocal data declarations

l         Class Pool(Type K)包括global classeslocal data declarations

为了使程序更容易被理解并提高代码的可复用性,建议在程序中使用include programScreen用来输入和显示数据,它能够很好的与data dictionary结合在一块儿,可以进行输入数据的一致性检查,screen中又很多组件可以为用户提供友好的交互界面,比如push buttons, tabstrip controls, table controls等等。Screen中的以下动作都会触发screenPAI,比如:entering data, choosing a menu entry or clicking a pushbutton等。所有的screen elements: text filed, input/output field, status icon, group box, radio button, checkboxpushbutton都具有general attributes, Dictionary attributes, program attributesdisplay attributes。对于element: subscreen , tabstrip controltable control具有general attributes和跟它们本身相关的special attributes。可以把一个screenattributes分为以下几类:

l         Statically definable cannot be changed dynamically本能被动态改变的属性

l         Statically definable can be changed dynamically 可以被动态改变的属性

l         Can only be defined dynamically只能被动态改变的属性

Screen是用户和ABAP program交互的途径。

Screen包括screen image和他的flow logic。严格来说它是控制screen image处理的程序。Screen有四个组件:screen maskscreen attributeselement listflow logicFlow logic包含flow logic代码但不是abap语句。Screen是其他screen elements的容器。大于9000screen number是为sap system customer保留的。Screen number 10001010是为dictionary tablemaintenance screenselection screen of executable准备的。Screen type决定了screen的使用目的,其他的一些特殊attributescomponents是由这个attribute决定的。Next screen attribute决定了screen执行的固定顺序。

Screen attributes:

l         Admin

Program Screen no Short desc. Screen group Changes Generation Status Original lang. Dev Class

l         Type

Norma Sub screen Modal dialog box Selection screen

l         Size

Static Maintained occupied

Dynamic: Starting at size

l         Sequence

Next screen

l         Settings

Cursor position Hold data Fixed font Runtime compression Context menu form

创建screen的步骤

l         Set the general screen attributes

l         Design the screen layout

l         Set the field attributes

l         Write the flow logic

创建screen的途径:

l         object navigator中通过右键,选择Create->screen

l         abap editor写入代码call screen <num>然后双击<num>

可以在next screen field中设置next screenscreen number。如果你把next screenscreen number设为0,当这个screen完成处理后其又会被重新调用。

通常使用ABAP Dictionary中的field description来定义screen element,也可以使用程序中的field description来定义,当然前提条件是这个程序已经创建。你可以把key word textstemplates结合在一起使用或者单独使用。Screen elements的属性在screen painter中有六个视图用来维护。在screen painter中你使用的是external data types。他们与dictionary中的data type相对应,系统在format column中显示external data type。对于没有ABAP dictionary referenceelements必须手工设置external data typeExternal data typeABAP internal data type的对应关系:

http://help.sap.com/saphelp_47x200/helpdata/en/d1/801b50454211d189710000e8322d00/frameset.htm

screenPBOPAI事件中有自己的keywords。可以在一个屏幕中调用多个module,通过SY-DYNNR来判断当前的screen numberPBOmodule必须在MODULE…OUTPUT中定义,PAImodule必须在MODULE INPUT中定义。在screen processing程序中有不同的system processorsABAP processor控制module中的program flowDYNP processor控制screenflow logic并负责准备要在screen上显示的数据。在处理过程中,通过TABLESDATA定义的数据是可以见的。系统通过screenelement list来识别,取得数据显示在屏幕上并把用户修改后的数据传回去。数据的copy是必需的,因为screenprogram是两个不同的processor。一个system program用来专门完成copy过程。在处理过程中ABAPDYNP同名的字段会被比较。为了使screen和它的program能进行信息交互,他们必须举用相同名字的变量。在所有PBO processing blocks结束后,程序中的字段内容并会被copy到屏幕中相同名字的字段中。在第一个PAI module执行之前,所有的屏幕中的字段内容并会被copy到程序中相同名字的字段中。建议使用自己的结构来作为屏幕和程序之间交互的介质,以保证互相传输的信息正是你想要的。在PBO开始的时候,runtime会把当前screen的静态属性和动态属性写到ABAPsystem table中,这个tableline typescreen。下面是screen structure的结构:SCREEN-NAME SCREEN-GROUP1 SCREEN-GROUP2 SCREEN-GROUP3 SCREEN-GROUP4 SCREEN-LENGTH SCREEN-INPUT SCREEN-OUTPUT SCREEN-REQUIRED SCREEN-INTENSIFIED SCREEN-INVISIBLE SCREEN-ACTIVE 动态修改screen elements的属性是暂时的。在screen system table中会为每一个screen element创建一行。Screen system table是在PBO之前初始化的,会有专门的system programscreen element的静态属性copyscreen system table中。你就可以在PBO的一个module中动态修改这些属性了,如下:

LOOP AT SCREEN.

    

     MODIFY SCREEN.

ENDLOOP.

‘1’代表属性被设置,’0’代表没有设置。

可以通过SCREEN-NAMESCREEN-GROUP1SCREEN-GROUP4来确定要设置那些element的属性。

通过在screen painter中设置modification group可以同时设置多个screen element的属性,可以在element list或者screen painterlayout editor中设置elementmodification group

LOOP AT SCREEN WHEREREAD TABLE SCREEN是不支持的。需要注意的是如果在screen painter中被静态的设置为INVISIBLE那么通过SCREEN-ACTIVE =1不能将其设置为VISIBLE,只能通过INVISIBLE=0。然而如果在screen painter中设置为VISIBLE那么可以通过SCREEN-ACTIVE=0将其设置为INVISIBLE。它与下面的三条语句效果相同SCREEN-INVISIBLE=1 SCREEN-INPUT=0 SCREEN-OUTPUT=0,复杂的transaction有多个screen组成,initial screen是在定义transaction code时定义的,其他的screen的顺序是由客户输入决定的,next screenscreen attributes中静态定义,在程序中可以通过set screen xxxoverrideSet screen暂时改变了screennext screen attributeScreen必须是同一个

ProgramscreenNext screen在当前screen处理结束后或者leave screen语句之后处理,可以使用LEAVE TO SCREEN XXX语句效果同SET SCREEN XXX. LEAVE SCREEN.。可以通过call screen来插入一个screen sequence,相当于把另外一个layer加入到了stack中,需要注意的是通过这种方式创建的layer需要在之后被删除掉。可以在插入的screen sequence之后通过静态设定next screen属性或动态把next screen设为0来实现。为了中断当前screen的处理跳到另外一个新的screen,可以通过call screen <xxx>来实现,<xxx>必须是同一个程序的screen。在程序中,系统创建了一个stack,这个stack必须在程序结束前被destroyed。为了继续执行CALL SCREEN之后的语句可以使用SET SCRENN 0.LEAVE SCREENLEAVE TO SCREEN 0来实现。如果你在call chain之外使用上面的语句,程序就会结束,control就会返回到调用它的语句之后。可以通过LEAVE PROGRAMterminate一个程序。可以通过CALL SCREEN STARTING ATENDING AT来设置screen的位置和大小。但是其中的screen必须被设置为modal dialog screen。如果没有ENDING AT语句dialog box的大小就有screenused size属性确定。如果用ENDING AT指定了screen的大小但是没有足够的空间这个screen就会带有scrollbars。屏幕显示时通常cursor就会被放置在第一个输入字段上,可以通过screencursor position属性将其定位到其他不同的字段。可以通过语句SET CURSOR FIELD <object_name> OFFSET <position>PBO事件中来设置cursor的位置。<object_name>既可以是字段的名称也可以是变量名。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值