SAP-R/3
出口(增强)
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
首先来讲解一下什么是出口,顾名思义,就是一段程序执行到最后必经的一段程序。
为什么会有出口呢?因为正常的业务系统不能满足实际需求,这时可以在出口中增加一些功能,来达到要求,这也就是为什么它还叫增强。我感觉它跟给操作系统打补丁差不多。
在
Sap
中出口就是标准程序最后要调用的一个函数或者功能模块,这个函数或功能模块的输入已经由
Sap
定义好。
自己写的
SAP
出口程序在系统升级的时候会被保留,而如果更改标准程序在
SAP
系统升级的时候会被覆盖。
下面介绍一下什么时候需要使用出口以及出口的种类:
1
:在业务检查时,比如在某个工厂发货,可以设定在某个库位的出货只能使用某种移动类型。
2
:在需要界面增强时,比如用户对某个字段要求大写,但是最终用户不按规范操作,这也可以在出口中自动转换,有些模块甚至能自定义数据库字段,并且可以在出口中增加字段输入。还有的模块能对输入数据检查,甚至实现自动替代等功能。
3
:有不规则业务时,比如按某种条件定价,可以设定从自己定义的表中按某种条件取值
4
:搜索帮助的出口,可以对
Sap
标准的搜索帮助做权限控制。
等等。
SAP
有四种基本用户出口的类型:
1.
菜单出口
-Menu Exits
定义自己的菜单
2.
屏幕出口
-Screen Exits
定义自己的屏幕
3.
功能模块出口
-Function Module Exits
在
SAP
应用程序中添加功能
4.
关键字出口
-Keyword Exits
在
ABAP/4
字典中的关键字数据元素添加文档。结果是你在使用这些数据元素的字段处按
F1
后会出现你自定义的说明文档
因为出口都是被
Sap
预先定义好的,那么怎么寻找自己需要的出口呢?
1
:可以通过配置文档的帮助和
SAP library
寻找业务系统的出口,
sap library
在‘
implementation guide
’中寻找出口,在配置功能执行按钮左边一般都有一个说明文档,描述相关的出口。
2
:为了方便我们把所有的出口名称及其描述列在文章的后面。
下面具体介绍怎样写出口程序:
为了对出口程序的修改进行管理,
sap
提供了专门用来管理出口程序的事务,事务代码是
CMOD
。
sap
的用户出口总共有三代
:
1 、第一代
sap 提供一个空代码的子过程,在这个子过程中用户可以添加自己的代码,控制自己的需求。这类增强都需要修改 sap 的标准代码。
示例: USEREXIT.. in SAPMV45A
1 、第一代
sap 提供一个空代码的子过程,在这个子过程中用户可以添加自己的代码,控制自己的需求。这类增强都需要修改 sap 的标准代码。
示例: USEREXIT.. in SAPMV45A
2
、第二代
sap 提供的是 CUSTOMER-FUNCTION ,它是通过 SMOD 和 CMOD 完成实现。
sap 提供的是 CUSTOMER-FUNCTION ,它是通过 SMOD 和 CMOD 完成实现。
3
、第三代
sap 提供的第三代的用户出口就是 BADI ,他的调用方式是 CALL METHOD (instance) ,(相关的 TCODE 是 SE18 和 SE19 ),可以通过 EXIT_HANDLER 这个单词查找 BADI 。
sap 提供的第三代的用户出口就是 BADI ,他的调用方式是 CALL METHOD (instance) ,(相关的 TCODE 是 SE18 和 SE19 ),可以通过 EXIT_HANDLER 这个单词查找 BADI 。
对于第一代增强,可以用以下方法查找增强:
打开欲增强的程序,点击工具栏上的 “Display Object List” 按钮,选择 Subroutines ,查找以 “UserExit” 开头的子程序,根据子程序前面的注释文档来查找用户出口
打开欲增强的程序,点击工具栏上的 “Display Object List” 按钮,选择 Subroutines ,查找以 “UserExit” 开头的子程序,根据子程序前面的注释文档来查找用户出口
对于第二代增强,可以用以下方法查找增强
用户增强通常包括下面
3
类
,
顾名思义
,
就是增强
SAP
的可能没有提供的功能
(
通过后台配置也不能实现
).
1.E Enhancement exits : 就是常说 User_exit ( 用户出口 )
使用 SE37 搜索 EXIT* 的函数大都是做 exit 用的 , 通常里面预包含了一个 Z 开头
的程序 . SE16 查询 TFDIR( 函数表 ) 输入 EXIT* 也可 .
2.C GUI codes( GUI 接口增强 )
3. S Subscreens ( 屏幕增强 )
Enhancement 在表 MODSAP 可看到 , 而 TFDIR 字段 MAND( 值为 C 表示此出口函数被激活 ). 使用 SMOD(CMOD) 当然可激活 exit function, 有时候一时难以查询到相关 Enhancement 时可使用下面程序将出口函数激活 .
1.E Enhancement exits : 就是常说 User_exit ( 用户出口 )
使用 SE37 搜索 EXIT* 的函数大都是做 exit 用的 , 通常里面预包含了一个 Z 开头
的程序 . SE16 查询 TFDIR( 函数表 ) 输入 EXIT* 也可 .
2.C GUI codes( GUI 接口增强 )
3. S Subscreens ( 屏幕增强 )
Enhancement 在表 MODSAP 可看到 , 而 TFDIR 字段 MAND( 值为 C 表示此出口函数被激活 ). 使用 SMOD(CMOD) 当然可激活 exit function, 有时候一时难以查询到相关 Enhancement 时可使用下面程序将出口函数激活 .
REPORT Zactexitfun .
data ztfdir like tfdir .
* select single * from tfdir into ztfdir
* where FUNCNAME =
* 'EXIT_SAPMM06E_013'.
* ztfdir-MAND = 'C' .
* update tfdir from ztfdir.
* 将 EXIT_SAPMM06E_013 换成实际所需 exit 函数名
update tfdir set MAND = 'C'.
where FUNcname = 'EXIT_SAPMM06E_013'.
data ztfdir like tfdir .
* select single * from tfdir into ztfdir
* where FUNCNAME =
* 'EXIT_SAPMM06E_013'.
* ztfdir-MAND = 'C' .
* update tfdir from ztfdir.
* 将 EXIT_SAPMM06E_013 换成实际所需 exit 函数名
update tfdir set MAND = 'C'.
where FUNcname = 'EXIT_SAPMM06E_013'.
***
当然也可
SE16:MODSAP
表
enhancement
输入
EXIT_SAPMM06E_013
然后得到
enhancement name MM06E005
后使用
SMOD
测试激活
exit
函数
.
增强相关函数和表格
Function:
[1].DYNP_VALUES_READ
[2]. MODX_ALL_ACTIVE_MENUENTRIES( 菜单增强 )
[3].MODX_FUNCTION_ACTIVE_CHECK( 出口函数增强 )
由于读者可能接触 user exit 最多 , 除了附录光盘有个查找 ZFINDEXIT 的程序外 ( 有些 exit 使用它并不能找到 ), 另一个直接有效的方法就是使用这个函数 ,SE37 设好断点后执行 tcode 如其有 exit 就会调用此函数 .
[4].MODX_MENUENTRY_ACTIVE_CHECK( 菜单增强 )
[5].MODX_SUBSCREEN_ACTIVE_CHECK( 屏幕增强 )
Table:
[1]. TFDIR->function module table
[2]. MODSAP->sap enhancement table
[3]. TSDIR->Dynpro Areas CALL CUSTOMER SUBSCREEN( 屏幕增强 )
[4]. CUATEXTS-> GUI Interface: Menu Texts Changed(GUI 菜单文本增强 )
增强相关函数和表格
Function:
[1].DYNP_VALUES_READ
[2]. MODX_ALL_ACTIVE_MENUENTRIES( 菜单增强 )
[3].MODX_FUNCTION_ACTIVE_CHECK( 出口函数增强 )
由于读者可能接触 user exit 最多 , 除了附录光盘有个查找 ZFINDEXIT 的程序外 ( 有些 exit 使用它并不能找到 ), 另一个直接有效的方法就是使用这个函数 ,SE37 设好断点后执行 tcode 如其有 exit 就会调用此函数 .
[4].MODX_MENUENTRY_ACTIVE_CHECK( 菜单增强 )
[5].MODX_SUBSCREEN_ACTIVE_CHECK( 屏幕增强 )
Table:
[1]. TFDIR->function module table
[2]. MODSAP->sap enhancement table
[3]. TSDIR->Dynpro Areas CALL CUSTOMER SUBSCREEN( 屏幕增强 )
[4]. CUATEXTS-> GUI Interface: Menu Texts Changed(GUI 菜单文本增强 )
***
注意
,
为了确保一个出口被真正应用
,
必须同时激活相关程序
(SE38)
和出口函数
(SMOD|CMOD,
反正就是要保证
tfdir-mandt=’C’,
用程序也可
.)
the third generation enhancement will be discussed in the next post.
the third generation enhancement will be discussed in the next post.
转载于:https://blog.51cto.com/youxue/337353