ABAP开发中的增强
日期: 2008-10-12开始整理
版权声明: 大部分资料来源于网络,部分文字、格式及排版出自本人,部分截图由本人亲自完成,如有侵权,请告知本人,欢迎来信讨论搞笑留言SAP或ERP相关的话题。
免责声明: 本资料仅供研究、学习、学术讨论之用,不得用于生产环境。对于使用本文档产生的损失,本人不承担任何责任!
★ 一般说明
使用SAP的增强建议系统学习一下 SAP 标准教材 BC425 和 BC427。
ABAP开发中的增强至少经历了4代,下面详细说明。
★ 第一代:基于源代码的增强
源代码增强以子程序形式发布,在 SAP 的发行版本中,使用 PERFORM 调用这些子程序,
它们在发布时都是空的,sap提供一个空代码的子过程,在这个子过程中用户可以添加自己的代码,控制自己的需求。这类增强需要修改sap的标准代码。
示例:USEREXIT ... in SAPMV45A。主要集中在一些文件名倒数第二个字符为 Z 的包含程序中。用户增强时,应首先到 rvice marketplace 申请对象键,然后才能修改这些子程序,这些子程序可以使用程序中所有的全局数据。
对于第一代增强,可以用以下方法查找增强:
禁毒诗
打开欲增强的程序,点击工具栏上的“Display Object List”按钮,选择Subroutines,查找以“UrExit”开头的子程序,根据子程序前面的注释文档来查找用户出口,如下图,事务码:SE38
下面这些以USEEXIT_...开头的都是空的子程序,可以添加自己的代码。
屏幕增强以客户屏幕形式发布,它们包含在标准程序中,没有什么特别规律。
这种源代码增强和屏幕增强的说明可以从事务码 spro 后台配置中相关模块的路径里面找到。
同时使用的针对数据表的增强是 append structure,可以在事务码 11 中打开透明表,点击应用工具栏最右边的那个 append structure 按钮就能为数据表追加新的字段。元旦王安石
这种更改标准程序的方法现在很少使用,因为系统升级有可能不能工作。如果在代码中改变了全局变量,还可能会破坏系统原有的逻辑。
★ 第二代:基于函数模块的增强
源代码增强以函数模块形式发布,在 SAP 的发行版本中,使用 CALL CUSTOMER-FUNCTION 调用这些函数模块,它们在发布时只有一句代码 INCLUDE xxxxxxx。用户增强时,无需申请对象键,直接双击这个包含,然后回车,就可以创建相关的包含文件,编写相应的代码了。这些函数模块中只能使用接口中传递的参数,不能使用调用程序的全局变量。
首先来讲解一下什么是出口,顾名思义,就是一段程序执行到最后必经的一段程序。在Sa
p中出口就是标准程序最后要调用的一个函数或者功能模块,这个函数或功能模块的输入已经由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 在‘implement
ation guide’中寻找出口,在配置功能执行按钮左边一般都有一个说明文档,描述相关的出口。
2:为了方便我们把所有的出口名称及其描述列在文章的后面。
下面具体介绍怎样写出口程序:
为了对出口程序的修改进行管理,sap提供了专门用来管理出口程序的事务,事务代码是CMOD。
这些出口函数有标准处理程序传入的参数和输出参数,用户可根据系统输入参数作为条件编写适合本企业流程的逻辑,然后通过输出参数传回给SAP。
屏幕增强也包含在函数模块所属的函数组中。
针对数据表的增强是 CI_ 结构,这些结构以 .INCLUDE 结构的形式包含在 SAP 发布的数据表中,用户可以通过向这些结构中添加字段而对数据表进行增强。
上述这类增强通过事务码 SMOD 进行维护,CMOD 进行实现。SMOD 中的一个增强可以包含上述的源代码、屏幕和表结构增强,按照较容易理解的逻辑结构来管理这些增强,使用相对更加便利。
对于第二代增强,可以用以下方法查找增强
用户增强通常包括下面3类,顾名思义,就是增强SAP的可能没有提供的功能(通过后台配置也不能实现).
1.E Enhancement exits :就是常说Ur_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 .
* lect single * from tfdir into ztfdir
* where FUNCNAME =
* 'EXIT_SAPMM06E_013'.
* ztfdir-MAND = 'C' .
* update tfdir from ztfdir.
* 将EXIT_SAPMM06E_013换成实际所需exit函数名
update tfdir t 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(出口函数增强)精华霜的正确使用方法
由于读者可能接触ur 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 discusd in the next post.
1、关于增强的简单介绍
1.1 SMOD包含具体的增强,而CMOD是包含一组SMOD编写的增强.
1.2 Ur exits (Function module exits)是sap提供出口,它的命名规则如下:
EXIT_<program name><3 digit suffix>
示例:
sd的VA01事务,对应的程序是SAPMV45A ,你会在程序里查到(用CALL CUSTOMER-FUNCTION字符串)如下代码:
CALL CUSTOMER-FUNCTION '003'
exporting
xvbak = vbak
xvbuk = vbuk
xkomk = tkomk
importing
lvf_subrc = lvf_subrc
tables
xvbfa = xvbfa
xvbap = xvbap
xvbup = xvbup.
则exit calls function module的名称就是: EXIT_SAPMV45A_003
2、先试用SMOD建立一个SAP增强
2.1、选择一个增强,如:SDVFX001 ,点击修改,进入sap增强维护屏幕;
2.2、点击"组件"按钮,进入组件维护屏;
2.3、将光标移到"功能模块名",输入模块名,如:EXIT_SAPLV60B_001;
2.4、选择"代码修改"按钮进入函数模块;
2.5、双击函数模块的包含单元,进入包含单元加入自定义代码并激活保存;