Copyright @ 200810,R_EVO,http://hi.baidu.com/r_evo
本文遵从《SAP程序设计》版权协议,任何组织或个人在引用、转载或修改此文档时,敬请保留版权信息及注明出处。
模块化技术
一.模块化
是程序的重要思想,作用:1).结构清晰、易读、易于维护;2).实现代码复用;3).实现数据封装;
目前大多数示例都由系统默认地将代码放于START-OF-SELECTION中,本节将介绍,几种过程模块化技术->子程序(Subroutine)和功能模块(Function Modules)
二.子程序
往往是被视为程序内部的模块化实现,植被定义为某一个程序调用。
定义语句:FORM / ENDFORM.
调用:PERFORM.
1.子程序定义:
FORM subr [USING...[VALUE()P1[]][TYPET|LIKE F]...][CHANGING...[VALUE()PN[]][...]...].
...
<subr codes>
...
ENDFORM.
子程序不能进行嵌套(所有处理快均不能嵌套)USING和CHANGING还有不常用的TABLES为子程序与主程序的参数接口。
在主程序的调用语法是:
PERFORM subr [USING...P1...][CHANG...Pn...].
ABAP有辅助生成成功能,步骤:
1).在一个新程序中输入语句:PERFORM subr.
2).双击该子程序名,系统会询问是否生成子程序定义,单击确定后,子程序的代码框会自动出现。
3).若子程序以定义,双击咋会自动导航之代码处。
2.参数接口
在主程序和子程序之间进行接口数据对象的传递,被称为参数;使用的USING和CHANGING进行指定俄叫做形式参数。
PERFORM add USING int1 inT3.
PERFORM add USING int2 int4.
FORM add USING P1 P2.
...
ENDFORM.
3.参数传递方式:
子程序有值传递(passing by value)和引用传递(passing by reference)以及一种较特殊的值和结果传递
FORM...[USING Pi...Pn]...
FORM...[CHANGE Pi...Pn]... //其中参数没有VALUE项
USING USING VALUE CHANGE CHANGE VALUE
参数传递方式 引用 值 引用 值
值是否改变 变 不变 变 当正常结束后改变(Exit,CHECK,ENDFORM)
特殊的性残定义方式,称为值和结果传递。
FORM CHANGE...VALUE(Pi)...VALUE(Pn)...
有自己的内存空间,运行是独立,正常结束时将改变“实参”。
4.参数类型及兼容
一般情况下性参可以代表多种类型的实参,所以不需要某一种特殊定类型,但是参类型,必须确定。
指定参数类型有两种,第一种是为一般类型,只在运行期内才将是参的具体结构传递给形参,所以只能使用其整体属性,而不能使用其具体结构。
三.功能模块
功能模块是目前SAP系统之间最为常用的复用组件,它是独立的R/3仓库对象,也是一种过程模块,可由ABAP应用程序进行外部调用。
1.功能模块和功能组
与子程序相似,但本身具有完整性,功能组定义时,系统将生成一个主程序,命名为SAPL<fgrp>,其包含一下程序:
L<fgrp> TOP 是功能组内部的全局数据定义区;
L<fgrp> UXX 包含具体的功能模块代码,"XX"代表创建先后序号;
L<fgrp> FXX 用于容纳功能组内部的子程序;
2.创建与测试
功能模块可通过工具Function Builder初始界面,或者Object Navigator作为入口进行创建。
四.生存期与可见性
1.局部数据
是过程内部生命的数据对象,其作用域仅为过程内部。
2.全局数据对象隐藏
如果局部与全局同名称,则全局数据将被屏蔽。
3.静态数据对象
使用STATICS可保留局部数据对象,并可代替DATA语句。
STATICS s[length] type [VALUE][decimals].
STATICS : BEGIN OF fstring.
<component declaration>
ENDOF fstring.
若多次调用其一子程序,静态不会像动态那样重新分配空间,系统将保留其值,下次在上次基础上使用,但不能从过程外部,即主程序中访问该数据对象。
五.源代码复用
1.包含程序——其是类型为I的ABAP程序
1).对于大型程序,将主程序分割成几个独立部分进行维护。
2).若要在多个程序中使用相同的豫剧代码段,可用I型定义。
创建包含程序使用INCLUDE语句
INCLUDE incl. 并独占一行
其中系统会把名为incl的包含程序源代码复制到调用豫剧位置上
2.宏
也是一种纯源代码复用,也不存在参数传递制,使用DEFINE定义
DEFINE macro. macro为宏名
<statements> 完整语句,可包含最多9个占位符;&2
END-OF-DEFINITION. 某用于暂时不能制定代码,调用时进行代码替换
原文地址:http://hi.baidu.com/r_evo/blog/item/712b6b22036c08f4d7cae280.html