初学 ABAP 函数模块的的朋友经常会被函数组整体的复杂结构搞晕,弄不清楚函数模块跟函数组有什么关系,全局数据又是什么东西,其实只要稍微整理一下,函数组的整体结构就很清楚了,下面我就用一个实例说明一下。
初学 ABAP 函数模块的的朋友经常会被函数组整体的复杂结构搞晕,弄不清楚函数模块跟函数组有什么关系,全局数据又是什么东西,其实只要稍微整理一下,函数组的整体结构就很清楚了,下面我就用一个实例说明一下。
假设,函数组的名称为 <fgroup>,其中包含两个函数模块 <fmodule1> <fmodule2>。这里用尖括号是为了更好的区分 SAP 自动添加的命名规则和用户定义的名称。
则整个函数组就包含下列文件(ABAP 概念的文件,或者叫程序更准确一些)。
SAPL<fgroup>:这个是函数组主文件,内容如下:
Code
*******************************************************************
* System-defined Include-files. *
*******************************************************************
INCLUDE L<fgroup>TOP. " Global Data
INCLUDE L<fgroup>UXX. " Function Modules
*******************************************************************
* User-defined Include-files (if necessary). *
*******************************************************************
* INCLUDE L<fgroup>F " Subprograms
* INCLUDE L<fgroup>O " PBO-Modules
* INCLUDE L<fgroup>I " PAI-Modules
然后,包含文件 L<fgroup>TOP 中是函数组定义和全局数据,内容如下:
Code
FUNCTION-POOL zmdtext. "MESSAGE-ID ..
* Other Globle Data
而包含文件 L<fgroup>UXX 中则又包含了两个包含文件,并且它是不允许用户手工修改,而是 SAP 自动管理:
Code
*****************************************************************
* THIS FILE IS GENERATED BY THE FUNCTION LIBRARY. *
* NEVER CHANGE IT MANUALLY, PLEASE! *
*****************************************************************
INCLUDE L<fgroup>U01.
"<fmodule1>
INCLUDE L<fgroup>U02.
"<fmodule2>
名为 L<fgroup>Uxx 的包含程序则每个包含了一个函数模块的定义 FUNCTION <fmodulexx> ... ENDFUNCTION
用户还可以在函数组的主程序中添加其它包含文件或代码,用来存储子程序、PAI、PBO 等数据。
用一个树型结构展开如下:
SAPL<fgroup>
L<fgroup>TOP
L<fgroup>UXX
L<fgroup>U01
L<fgroup>U02
L<fgroup>U....
L<fgroup>F
L<fgroup>O
L<fgroup>I