文章目录
1、增强概念2、SAP四种用户出口的类型3、应用案例4.通过spro找到增强的方法5、增强的发展5.1.第一代,基于源代码的增强5.2.找到第一代增强的方法5.3.第二代,基于函数模块的增强出口5.4 第三代,基于面向对象概念的增强BADI1、增强概念
在SAP中,除了自开发,就是增强,ABAP开发的增强主要指的是标准系统事先预留好的接口,根据不同业务需求,进行开发,这种开发称为增强,又叫出口,如果增强满足不了,就只能修正。
标准功能修改(后台配置(业务顾问来做),增强,修改)
2、SAP四种用户出口的类型
1.菜单出口(Menu exits)
2.屏幕出口(Screen exits)
3.功能模块出口(function Module EXITS)(这个用的最多)
4.表/结构出口(structure exits)
3、应用案例
4.通过spro找到增强的方法
通过配置找到物料主数据找到增强
第二代增强
第三代增强
5、增强的发展
5.1.第一代,基于源代码的增强
提供了子例程来增加自己的代码。
屏幕增强以客户屏幕形式发布。
表/结构 :append structure.
通过SPRO可以找源代码增强和屏幕增强的相关模块的路径。
集中在一些名称倒数第二个字符为Z 的include程序中,所有的程序的全局数据都可以使用。
When the order type is AA ,I must input CUST reference
Enhancement Document
Find Enhancement point
一股是以userexit_开头的子例程.
如果在代码中该表了全局全量,还可能破坏系统原有的逻辑,因而现在很少使用.
要在SAP官方网站中申请ACCESS KEY。
在include种的最后两位为ZZ 程序,在子例程种以 USEREXIT包含的名称
vmod (SD程序的第一代增强)
5.2.找到第一代增强的方法
VA03(标准程序代码)
include
子例程
5.3.第二代,基于函数模块的增强出口
以函数的模块形式的发布,在SAP的发行版本中,使用CALL CUSTOMER-FUNCTION调用这些函数模块,它们在发布时只有一句代码
include xxxxx.
1.功能模块增强(以EXIT_打头的函数)
2、子屏幕增强,子屏幕需要自己创建
3.GUI status
4. include structure
增强相关的函数肯表格
Function:
1.dynp_values_read
2.modx_all_active_menuentries(菜单增强)
3.modx_function_active_check(出口函数增强)
4.modx_menuentry_active_check(菜单增强)
5.modx_subscreen_active_check(屏幕增强)
Table:
5. TFDIR->function module table
6. modsap->sap enhancement table
7. tsdir->dynpro areas call customer subscreen(屏幕增强)
8. CUATEXTS-> GUI INTERFACE : MENU TEXTS CHANGED (GUI 菜单文本增强)
MODSAP, 这个表里最重要的字段增强名(Name),组件类型(typ: E C S T),组件功能模块名(Member): 里面记录了所有enhancement的增强。
TFDIR,所有的函数表,重要字段funcname(函数名), MAND(功能模块激活状态如果是C代表此函数模块激活)。
EXIT实现方法
Enhancement exits实现方法
SMOD:查看增强组件, CMOD:实现增强
1 T_CODE: CMOD中创建一个Project,添加所要使用的Enhancement,激活目标Components
2 在目标Function module中编写功能代码
SUBscreens实现方法
1 T-CODE: CMOD中创建一个Project,添加所要使用的Enhancement,激活目标Components
2 通过SMOD定位到目标程序,创建与其对应的屏幕号,屏幕属性为Subscreen,并编写功能代码。
以下是第二代增强中的三个,分别是函数,屏幕,还有结构增强
必须在以下的地方右键创建才可以使用
查看增强的方法
1.代码找增强
2.利用函数(MODX_FUNCTION_ACTIVE_CHECK)寻找增强
5.4 第三代,基于面向对象概念的增强BADI
第三代增强(基于面向对象概念的增强BADI(business add-in)),源代码发布以接哗啦啦 方式,通过接口的方法调用来实现使用的。用户增强实际上是实现一个或多个基于这个接口的实现类,因为接类实际上是一个抽象类,所以对同一个增强会出现不同的源代码,这些不同的尖代码是通过过滤器(adapter)来区别用于不同的业务场景的。这种增强是用SE18 SE19来实现的。
badi 和exit的区别: Exit中一个Enhancement只能使用一次,BADI一个接口可以被实现多次。
SE24:类构建器
sE18:是查看BADI
SE19:是创建实例
BADI 存储
badi对象的信息存储在SXS_INTER,SXC_EXIT,SXC_CLASS和SXC_ATTR这四个表中(参见SECE包).
SAP程序都会调用cl_exithandler=>get_instance来判断对象是否存在,并返回实例;其实get_instance就是对上述几个表肯他们的视图(V_EXT_IMP 和V_EXT_ACT)进行查询肯搜索。
基于这个机理,我查用ST05来监控一个TCDOE来跟踪,然后选择查找有关上述几个表和视图的操作,就可以获得相关BADI.
通过ST05跟踪,BADI对应的数据表为SXS_INTER,SXC_EXIT, SXC_CLASS和 SXC_ATTR,而这些表
都是通过视图V_EXT_IMP和V_EXT_ACT来查询的。
1)打开运行事物码:ST05选择“table buffer trace”而不是常用的"SQL trace"
2)activate trace(开始跟踪)
3)运行事物代码: me21n
4)创建一个采购订单,保存
5) deactivate trace(结束跟踪)
6)点击display trace, 在出来的选择条件中:objects中输入: V_EXT_IMP和V_EXT_ACT; 在operations中输入"OPEN"
7) 查询 通过查询的结果可以看出,视图V_EXT_IMP的BADI的接口类名字都是以if_ex_ 开头的,其中if_ex之后的就是对应的badi接口的定义