您的位置:首页 > 数据库

总结3 (强晟BC400 PPT)

2009-07-09 10:17 197 查看
些检查的典型特征。
•性能:数据库访问是否使用了索引,SELECT 语句是否嵌套在循环中。
•安全:是否读取了非当前客户端的数据,是否在SELECT 语句中动态的指定表和WHERE 条件。
•典型语义错误:在AUTHORITY-CHECK 后没有用sy-subrc 检查结果,在CLIENT SPECIFIED 后是否指定了客户端,是否连续使用E 类型的消息。

 

 

子程序是源代码里具有一定独立功能的模块单元

子程序的使用让程序更加面向功能:整个程序划分成多个子程序,每个子程序完成一定功能

使用子程序也使程序变得更易维护

在一个程序文件中,子程序可以直接访问主程序定义的变量

 

参数传递有三种方法
• 值传:复制一份实际参数的拷贝并保存到形式参数中,如果子程序中修改了形式参数,这个修改不会作用到实际参数 上。使用这种方式传递大量数据比如一个内表的时候,比较耗时。
• 值和结果调用:这种方式跟值调用很相似,唯一的不同在于,当程序正常结束时,对形式参数的修改会被写回实际参 数,而如果用STOP 语句或者E 类型的消息强制退出子程序时,就不会写回实际参数。缺点也是传输大量数据时很耗时。
• 引用调用:实际参数直接指向了形式参数,这意味着对形式参数的修改直接作用在实际参数上。如果希望直接修改实际 值就用这种方式调用,这样比较合适对大的内表操作。

 

子程序的定义:
•FORM 开始
•在FORM 之后是子程序名和参数
•子程序内容
•ENDFORM 结束
•参数的写法如下
–值调用:在USING 节用VALUE(f1) 的形式
–值和结果调用:在CHANGING 节用VALUE(f2) 的形式
–引用调用:在CHANGING 节用f3 的形式,不要VALUE

                   在UDING节不用VALUE,引用调用
•注意,在USING 节不用VALUE 的也算引用调用,也就是说,使用USING 仅为避免传递内表时的耗时数据拷贝。

 

调用子程序:

1、实际参数按照USING 和CHANGING 的定义依次传递给形式参数,传递顺序与参数名称无关,只按调用顺序。

2、形式参数一般需要定义类型,如果使用TYPE ANY 或者未指定类型,则实际参数也可以是任意类型的

3、如果使用了标准类型(C、N、P 或X),则不允许使用LENGTH 定义形式参数的长度,类型的长度要到运行时才由传入的实际参数决定。但是可以使用通过定 义本地类型来指定实际参数的长度

4、对于结构和内表的形式参数,则必须指定类型,这样才能划分出传输对象的组件,从而得到结构和内表的结构,以获得每个具体的组件的值

5、通常使用PERFORM 语句调用子程序

 

全局对象和本地对象的可见性:

1、全局对象,在整个程序和每个子程序里都能看到。

2、本地对象,它们跟形式参数一样只存在于子程序内部,在子程序运行时分 配内存空间,运行完后就释放

3、形式参数和本地对象不能重名,如果全局对象跟本地对象重名,则在子程序内部访问的是本地对象,在主 程序里访问的是全局对象

 

ABAP事件:

1、程序开始后,所有全局对象首先在工作内存区创建

2、REPORT

     PARAMETERS

     DATA

     INITIALIZATION

     AT SELECTION-SCREEN

     START-OF-SELECTION

3、所有WRITE 的输出先保存在清单缓存里,只有在事件 START-OF-SELECTION 执行后才会显示清单缓存

4、如果PARAMETERS 输入参数的值在INITIALIZATION 事件中指定,则当选择屏幕显示时,这个值就作为默认值显示到屏幕上。

5、如果用户在选择屏幕用F8 确认输入,相应输入都被保存到PARAMETERS 参数中,并且触发AT SELECTION-SCREEN 事件,因此这个过程块适用于进行输入和权限检查 。在这个过程块中显示“E” 类型的消息则会返回选择屏幕并显示错误消息

6、如果AT SELECTION-SCREEN 事件中没有遇到E 类消息,则会继续执行START-OF-SELECTION 事件

7、事件块没有嵌套

8、如果某个事件块没有写,则该事件触发时什么也不做

9、事件块的先后顺序并不重要

10、如果程序中一个事件块都没有写,那就认为全都是写在START-OF-SELECTION 事件中

11、AT LINE-SELECTION 在双击清单的某一行时触发,可以用来显示进一步的详细信息

 

 

程序结构:

1、子程序(FORM … ENDFORM)可以看作是PERFORM 事件触发的一类事件块

2、一般事件块没有结束标志,遇到一个新的事件块或者子程序定义时就标志着当前事件块的 结束。

3、ABAP 提供了多个屏幕互相调用的能力,除了屏幕布局外还要使用逻辑流 的概念,它提供了更多的模块以完成各种复杂的用户交 互,主要是Process Before Output(PBO)和Process After Input(PAI)

 

 

 

列表主要为了用最小的代码量显示数据

 

列表可以用相应的货币显示金额

 

编写列表时还可以有以下选择:
•屏幕:可以加颜色和图标
•打印机
•广域网和局域网:列表可以自动转换成HTML 格式
•保存:可以保存在SAP 中,也可以是其他地方(例如给表格计算程序做进一步处理)

 

每个列表都有单行的列表抬头和最多4行的列抬头,如果没有定义列表抬头,则用程序标题(短描述)来代替

 

ECC5 中创建并激活程序后就可以维护文本元素了

 

程序的文本元素(包含表头)可以被翻译成多种语言,当用户执行程序的时候,文本元素会自动用当前 登录语言显

 

SAP 使用文本符号实现多语言功能,文本符号包含3数字的ID和可翻译的文本,它与表头一样都属于文本元素。有2种方式定义文本符号:
•在ABAP 编辑器中,通过菜单“转到-文本元素-文本符号”
•在源代码中先写一个文本符号的ID,再双击创建。

 

在程序里用TEXT-xxx 标记文本符号,运行时系统就会根据当前登录语言插入相关的翻译。

注意文本元素也是必须激活后才能使用的

 

WRITE 语句就能生成一个基本列表,还可以使用SKIP 和ULINE 配合WRITE 对列表做美化

 

生成明细列表:

1、用户在基本列表上双击或者按F2 来选择某个位置, 就触发了AT LINE-SELECTION 事件

2、如果想要系统显示一个包含了交互式列表以响 应用户操作,就要在相应的过程块中编写程序,读出用户所需数据并用WRITE 输出,明细列表就会覆盖前面的基本列表

3、返回”按钮或按F3 键,还可以回到前面的基本列表

4、明细列表中的行选择还可以触发AT LINE- SELECTION 事件,这意味着相应的代码可以在明细列表中再次执行

5、使用sy- lsind 变量,它指示了当前列表级别:0 是基本列表,1 是第一级明细列表,依此类推。每次的行选择都将使sy-lsind 的值加1,最多可以加到20 层

6、如果行选择后在AT LINE-SEELCTION 中没有生成明细列表,则sy-lsind 自动减1

 

AT LINE-SELECTION.

CASE SY-LSIND.

WHEN 1.

 WRITE SY-LSIND.

WHEN 2.

ENDCASE.

 

前缀带 "CUS&”的是系统变式,它们自动的跟着报表被传送, 并且不指定客户端

 

选择屏幕的输入类型:

1、单值输入。使用PARAMETERS 语句创建一个单值输入框,会在程序中创建一个同名变量同时在屏幕上显 示一个单值输入框。
•输入变量的名字最多8 个字符
•输入变量类型不能是基本类型F 、STRING 或XSTRING
•默认值用DEFAULT 指定,而不是VALUE。

2、默认值指定后,还可以在显示选择屏幕之前的程序事件(INITIALIZATION)中修改这个值

3、使用SELECT-OPTIONS 语句创建一个复杂输入框

4、用户输入的项会自动填入内表中,内表有四个列: sign、option、low 和high 分别代表不同的意义
•sign:I(inclusive,包含),E(exclusive,排除)
•option:逻辑运算符,EQ、GT、LT、GE、LE、BT 等等
•low和high:值的上下限范围

5、复杂输入也可以用在一般的逻辑表达式里:IF wa_spfli-carrid IN so_car.

 

AT SELECTION-SCREEN 事件:

1、在选择屏幕之后,按了回车或者F8 会触发AT SELECTION-SCREEN 事件。如果按了F8,这个事件块执行完后,继续触发START-OF-SELECT,如果按回车,则重新显示当前选择屏幕。

2、在处理AT SELECTION-SCREEN 事件前,用户输入会自动传给输入变量,因此可以在这个事件块里面处理输入检查权限检查。如果检查失败,就给用户一 个错误消息并且重新显示选择屏幕,让用户重新输入新值。

3、在START-OF-SELECT 事件块中的错误消息则会终止程序运行

 

 

 

 

屏幕序列:通过调用程序块的第一个屏幕开始屏幕序列,一个屏幕执行后,就会处理动态或者静态的屏幕序列,Next Screen = 0 这个固定用法是把处理还给屏幕调用点。

 

屏幕的组件
–每个屏幕都有下列组件:
•属性:包括4 位数字的屏幕号,短文本,屏幕类型信息,通常还会指定一个默认的下一个屏幕。
•布局:放置各种输入/输出字段、文本、按钮和其他屏幕元素。
•元素清单:列出屏幕元素和它们的属性,如位置、大小、数据类型等信息。
•逻辑流:屏幕的逻辑流包括PBO(Process Before Output)和PAI(Process After Input),PBO 包含了发送屏幕前准备屏幕显示的过程块,PAI 包含了对用户输入的处理过程块。

 

用TABLES 结构做为屏幕的接口

 

TABLES 语句用来在程序中定义一个与参考字典结构(如透明表)具有相同类型和名字的结构变量。这个结构变量可以做为程序和屏幕之间的接口,在PBO 后从表结构传给屏幕,在PAI 前从屏幕传给表结构。

 

在我航班数据模型中,就创建了SDYN_CONN 结构使用来自SCARR, SPFLI和SFLIGHT 表的字段,还有SDYN_BOOK 结构使用来自SBOOK 和SCUSTOM表的字段。

 

在PBO 事件处理之后,把屏幕发送给表示层服务器之前,程序中TABLES 结构的字段内容被自动的拷贝到具有相同名字的屏幕字段。可以在PBO 模块准备屏幕显示的数据。
在屏幕上用户操作时,屏幕字段的内容在PAI 事件执行之前被拷贝给同名的TABLES 结构字段。这样就可以把用户输入传递给PAI 进一步处理。

 

•基本列表建立时,数据对象和值都保存在HIDE 区中,选中行的数据会写回到相应对象中。在这里我们把键字段写入HIDE 区,选中行时就可以得到相关信息

•用适当语句把要显示的数据写入TABLES 结构,例子中字典结构SDYN_CONN,会同时定义屏幕字段和TABLES 结构。
•屏幕上用户操作时,用户输入会传递给TABLES 结构SDYN_CONN 进一步处理,这在PAI 前发生。

 

1、在显示基本列表之前就把需要显示的数据从数据库里读出来,然后把数据和键信息放在HIDE 区域中,在AT LINE- SELECTION 事件中,只需要把数据拷贝到TABLES 结构中即可。

2、在调用屏幕前用SELECT SINGLE 的方法读取一条数据显示。缺点是每次用户双击列表都要访问数据库,优点是只 读需要的数据,而且总是最新的。

 

•如果用户选择了一个按钮,运行时系统就把指定的功能码拷贝到一个专门的屏幕字段,这个字段一般叫做ok_code。
•如果程序中有一个同名的数据对象,这个特殊屏幕字段的值就会自动拷贝过去,然后,触发PAI 过程,这里就可以通过传输的功能码来确定用户操作,从而执行相应处理。
•在屏幕绘制器中需要添加按钮,指定名称、显示文字和功能码,同时在屏幕的元素清单中总会有一个默认的OK 类型的命令字段,一般我们用OK_CODE 做为它的名字。而在程序中要对应定义一个sy-ucomm 类型的变量ok_code(DATA ok_code TYPE sy-ucomm)。这样在触发按钮的时候,系统就会自动把屏幕元素OK_CODE 的值传给程序变量ok_code。

 

•CALL SCREEN 语句用来触发屏幕处理,包括以下几步。
•PBO 处理:为了准备显示屏幕,PBO 模块在PBO 块中列出并依次执行。
•从程序到屏幕的字段传输:在PBO 模块后,TABLES 结构的字段内容被传输到同名的屏幕字段中。
•屏幕显示:指定了值的屏幕被发送给表示层服务器(SAPgui) 显示给用户。
•从屏幕到程序的字段传输:在屏幕上的任何用户操作都会触发这一传输,屏幕字段内容传输给同名的TABLES 结构字段。
•PAI 处理:做为对用户操作的响应,PAI 中列出的模块将会依次执行。
•模块是没有接口的程序块,包括在ABAP 语句MODULE 和ENDMODULE之间。在PBO 和PAI 中的每个子功能,都应该实现相应的模块。

 

在PAI 中的主过程叫做USER_COMMAND_nnnn, nnnn就是屏幕号,在模块中可以访问程序的所有全局数据对象,在模块中定义的数据对象也是全局的

 

PBO 模块必须以MODULE … OUTPUT 开始定义,而PAI 模块必须用MODULE … INPUT 开始定义

 

在ABAP 程序的模块(通常是PAI 模块)中可以使用SET SCREEN 语句来覆盖Next Screen 属性所指定的默认屏幕

 

如果系统再次处理当前屏幕,所有PBO 模块都会重新执行,如果决定在PBO 中填写TABLES 结构,必须确保再次调用模块时,用户对屏幕的修改不被覆盖

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息