客户出口(二)

对于客户出口(包括功能出口、菜单出口、屏幕出口)的操作,主要使用到的事务代码是SMOD和CMOD。SMOD中可查看系统中现有的增强,可认为是一个查找和查看工具;CMOD用于用户创建项目、激活/取消激活项目(所谓项目,即是将多个相关的增强合并到一起,激活时以项目为单位一起全部激活或者全部取消激活。

本文介绍功能出口(Function Exits)。

实现原理

image
如上图所示,功能出口的基本原理为:在程序执行的过程中,调用了一个空的函数,用户实现了该增强也就是实现该函数。
该函数是标准程序的命名空间,因此不可修改;其中只有一个INCLUDE语句,INCLUDE的程序为客户化命名空间,而实现该函数也就是在该INCLUDE程序中编写代码。

命名规则

在程序中调用空函数的语句为:CALL CUSTOMER-FUNCTION ‘nnn’ ,其中“nnn”表示三位的数字。该语句调用的函数即为:EXIT_<prog_name>_001,其中的<prog_name>表示发起调用的程序名称(ModulePool Name 或 FunctionPool Name)。
另外,客户出口的函数组的名字都是以字母X开头;函数中INCLUDE的INCLUDE程序都是以字母ZX开头。

实例

以下以PM模块中的功能出口:维护计划保存前的检查为例,来说明功能出口的实现原理和实现过程:

1)在程序中调用空函数:在程序SAPLIWP3中有如下代码

CALL CUSTOMER-FUNCTION '004'
EXPORTING
imhis_imp      = imhis
amhis_imp      = amhis
impla_imp      = impla
impos_imp      = impos
amhio_imp      = amhio
mhio_tab_imp   = mhio_tab
mmpt_tab_imp   = mmpt_tab
aktyp          = x_xaktyp
TABLES
t_impos_imp    = l_t_impos
t_mmpt_imp     = l_t_mmpt
EXCEPTIONS
no_update      = 1.

可看到程序将维护计划的相关参数传入了增强函数中并接收函数返回的参数。

2)在SMOD可查看到存在如下增强:
image

3)在CMOD中新建项目,并将该增强分配给该项目:
image
可在此激活或取消激活该项目。同时可双击增强进入函数编写实现代码,在功能出口中可以包含自己的屏幕。

4)编写代码:在函数的INCULDE文件中编写如下代码

MESSAGE I000(BC425) with 'This is a demo of Function Exits Implementation'.

5)查看增强效果:
激活增强后,在保存维护计划时,系统弹出提示:
image