客户出口(Custom Exit)是SAP系统中广泛使用的一种增强方式,可实现的增强包括:
1)功能增强(Function Exit)
2)菜单增强(Menu Exit)
3)屏幕增强(Screen Exit)
三种增强都是通过函数(Function Module)和函数组(Function Group)来实现的。因此有必要先了解与函数有关的基本知识。
函数和函数组
函数是可调用的一个特殊的处理过程。函数只能定义在函数组中,不可能单独定义出一个函数。一个函数组中可以有一个或多个函数;通常这些函数执行的功能是相关的,或者这些函数操作相同的数据。
函数组是一个特殊的程序,程序类型为F,但不可以通过SE38创建类型为F的程序。可以通过SE38查看一个函数组的主程序,函数组主程序的命名规则为:SAPL+函数组名称。如函数组名称为XQQM,则可在SE38中查看程序SAPLXQQM。
函数组的结构
函数组的主程序的代码完全由系统自动生成和控制,里面仅有INCLUDE语句。其中L<fgrp>TOP和L<fgrp>UXX两个INCLUDE程序在创建函数组时即由系统自动生成,是必须的,不可删除。
- L<fgrp>TOP:用于定义全局变量
- L<fgrp>UXX:代码完全由系统自动生成和控制,里面仅有INCLUDE语句。其中INCULDE的是每一个函数的INCLUDE NAME(备注:每个函数都有一个INCLUDE NAME,命名为L<fgrp>U**,其中**为01/02的顺次编号;该INCLUDE NAME由系统自动分配,并可在函数的属性标签页中查看)
函数调用
当函数被调用时,其对应的函数组会被载入到内部会话(Internal Session)中,直到发起调用的程序终止。若同一个程序调用属于同一个函数组的不同函数,或者调用同一个函数多次,这个函数组都只第一次调用时载入一次。即一个函数组在一个程序中只会在第一次函数调用时被载入一次。
实际上,函数组的概念与类比较相似:函数组的全局变量近似于类的属性(Attributes),函数组的函数近似于类的方法(Method)。当然这只是一个非常简单的概念上的类比,实际上函数组和类有很多的不同,并且各有优缺点:
1)类有面向对象(可多次实例化)、继承、多态、接口等更为先进的概念
2)函数组有的优势包括
- 函数组可包含屏幕
- 函数组(Remote-Enabled Module)可通过RFC被外部系统调用
- 函数组(Update Module)可用做Update
- 函数组可异步执行
其他
函数的客户化命名空间为Y_或Z_。