SAP增强
目录
二、第二代增强 CustomerExits 基于函数模块的增强
一、第一代增强 UserExits 基于源代码的增强
第一代增强基于源代码,是SAP提供的一个代码的子过程,在这个子过程中用户可以添加自己的代码,控制自己的需求。这类增强集中在一些文件名倒数第二个字符为Z的包含程序中。 一般是以UserExit_打头的子过程,因此形象地称其为用户出口。
用户出口Include在SAP标准程序的源代码里,可以说是源代码的一部分,更改用户出口就相当于更改SAP标准程序,是需要在SAP Service MarketPlace里申请对象键(Access Key)才能更改,不需要建立工程;由于是在标准程序中,所以标准程序的全局数据都可以使用,但同时系统升级时会被新版本覆盖。
- 查找此类出口的方法(事务码SPRO)
1.在程序中查找文件名倒数第二个字符为Z的Include包含程序
2.在后台查找对应的模块增强:在程序中搜索USEREXIT_打头的子过程;在SAP中以PERFORM的形式被调用
3. 单击”Display Object List”按钮,在子程序列表查找“UserExit_”打头的子过程
以创建销售订单为例:
二、第二代增强 CustomerExits 基于函数模块的增强
第二代增强主要是通过事务码SMOD、CMOD 来完成实现的。
- Ehancement exits:这些出口以Exit_的函数打头,可以在SE37中查看,也可以在数据字典TFDIR(函数表)中查询Exit_打头的函数。
- GUI codes(GUI增强):用于区域菜单和工具菜单栏的增强,定义自己的菜单项或激活屏蔽标准事务中的菜单项
- Subscreens(屏幕增强):用于子屏幕设计增强,定义自己的子屏幕嵌入应用屏幕,在标准事务中添加子屏幕
- T.include structure增强:用于表结构的增强
第二代增强在发布修改时无需像第一代增强一样申请对象键,只有一句代码include "ZXxxxxxx",直接按两次Enter键就可以了。但同时这种增强以及后面几代的增强都不能像第一代一样随便使用程序的全局数据,只能使用接口中传递进来的参数
•如何查找Customer Exits
- 通过主程序查找
–查找事务代码的主程序,–搜索CALL CUSTOMER-FUNCTION,–SE37下查看函数,使用函数查找,•函数名称命名规则:EXIT_<程序名>_<序号>
- 根据需要的实现增强的事务代码如:VA01;找到主程序所在包,进入主程序后,在菜单-转到-属性,找到开发包
- 找到对应开发包后,输入事务码SMOD,点击菜单-实用程序-转到,输入开发包,点击查找,根据文本描述大致确定相关的扩展后,双击进入组件,根据相关的模块参数及设置断点检查是否适用
备注 (比较重要的表)
- MODSAP:SAP扩充表,重要字段增强名(Name)、组件类型(TYPE:ECST)、组件模块名(Member)里面记录了所有Enhancement的增强
出口对象(是否激活) --- 函数(表:MODSAP)
- TFDIR:功能模块表,重要字段FuncName(函数名)、功能模块激活状态MAND(如果是C,代表此函数模块激活),以Exit_*开头的函数
- TSDIR:动态程序区CALL CUSTOMER SUBSCREEN(屏幕增强)
- CUATEXTS:修改GUI界面,菜单文本被客户改变(GUI菜单文本增强)
- MODSAPA:SAP扩展的属性
- MODATTR:SAP增强项目属性
- TADIR:资源库对象的目录
TFTIT:函数功能的短文本
•创建一个项目对象(Project)
事务代码:CMOD ,Enhancement Assignment,分配增强中的组件对象
查看Components,列出组件中函数功能•绿灯:激活•红灯:非激活
三、第三代增强 基于类的增强
主要技术是基于ABAP对象类来实现增强,主要分BADI和BTE
- BADI(Business Add-in)是基于ABAP的面向对象技术。源代码的发布是通过接口的方法调用来实现使用的。此类增强实际上是实现一个或多个接口的实现类,因此对同一个增强会出现不同的源代码,这些不同的源代码是通过过滤器(Adapter)来区别用于不同的业务场景的。这种增强使用事务码 SE18 定义、SE19 实现,SE18用于创建及维护BADI 对象,SE19用于维护BADI实例,即实现SAP的BADI不但可以实现对标准系统对的增强,也可以直接在自定义程序中进行调用。
- 业务交易事件(BTE,Business Transaction Events),技术上讲是介于第二代增强(Customer Exits)和BAdIs之间的产物。这类增强为会计模块独有的增强,用于财务会计模块(Open FI)、总账会计(FI-GL)、应收账款和应付账款(FI-AR/FI-AP)及销售和分销(SD)的组件
如何查找BADI?
BADI对象的信息存储在SXS_INTER, SXC_EXIT, SXC_CLASS 和SXC_ATTR 这四个表中(参见SECE包),主程序会调用CL_EXITHANDELER=>GET_INSTANCE 来判断对象是否存在,并返回实列
- SE24打开类CL_EXITHANDELER中的GET_INSTANCE 方法,设置断点,查看EXIT_NAME的值就是要找的BDI.
- SE37输入SXV_GET_CLIF_BY_NAME设置断点,查看NAME的值
- ST05, 查找Object Name使用V_EXT_IMP 和 V_EXT_ACT视图的
如何创建BADI
输入事务代码SE18, 如下图输入查找到需要增强的BADI,点击显示
进入如下界面,点击菜单栏--实施-创建接口方法进入代码编写
如下输入名称,确认保存后双击
如下未设置创建物料销售信息是,如果输入工单为0001,销售组织为0001,分销渠道为01的,则销项税默认为没有税及为0
代码逻辑写完后激活返回实施界面,此时该增强还不不会被调用
需点击菜单栏中激活按钮激活,激活后显示 ’将调用实施‘
如图,再次进入维护物料销售组织信息时,销项税会显示默认值
若需要取消该增强,可事务代码SE19进入如下界面,输入实施增强名称
点击取消激活按钮
该增强实施将不被调用
BTE类型 :Publish and Subscribe Interface(发布订阅模块),只提供SAP数据源,可以供外部程序使用或达到数据检查的目的 Process Interface(处理模块),可以达到数据修改的目的,用来增强标准的业务流程
事务代码:FIBF
如何查找BTE
输入事务码FIBF-菜单-环境-信息系统(发布/订阅)/ 信息系统处理
正在上传…重新上传取消
如何实现BTE
FIBF-菜单-设置-发布/订阅模块-客户的
四、第四代增强 Enhancement-Point
由于在某些业务上三代增强并不能满足我们的需求,所以在三代增强的基础上,SAP开发了第四代增强- Enhancement-Point。其实第四代增强是第三代上的加强,一般只有在User Exit与BADI都无法实现时才用到。而Enhancement-Point分为2种,显示增强和隐示增强。隐式增强就是系统内置的Enhancement options ,系统本身就预留的,如在:执行程序,包含程序,函数组,对话模块的结尾;Form例程,函数模块,方法等的开始和结尾;结构的结尾这些地方都会有。显式增强就是手动加入到程序中的Enhancement options,有两种显式增强:
- ENHANCEMENT-POINT: 只有一个预留点, 没有代码,用来在程序中直接插入新的功能代码,其概念与BADI的USER_EXIT类似,标准程序预留了部分已定义好的增强点可以让ABAP做插入代码来实现这个增强(也可以自定义增强点,但不能自定义增强选项,增强选项一定是系统预留下来的,如果没有增强选项则该处不可做增强),但是不能做屏幕和菜单增强。
- ENHANCEMENT-SECTION: 用来替换原有的功能代码,ENHANCEMENT-SECTION 和 END-ENHANCEMENT-SECTION之间代码, implementation 之后, 替换旧代码,只执行新代码,原来的代码不再执行。
两者的区别是:enhancement-point没有代码,只有一个预留点,允许在这个位置插入新代码(implementation),类似于AOP。而enhancement-section和end-enhancement-section之间有代码,implementation之后,替换旧代码,只执行新代码,原来的代码不再执行,类似于OO中的方法重写/覆盖
如何实现如何实现Enhancement Point?
在SE38的程序点击菜单编辑-》增强操作-》创建选项 进入如下界面:
填写信息后点击继续保存出现如下界面
选择如下操作按钮切换到增强模式,切换到增强模式后只有增强的代码可以编写,原程序代码不能修改
接下来创建一个实例
如何ENHANCEMENT-SECTION?
同创建Enhancement Point相同,在SE38的程序点击菜单编辑-》增强操作-》创建选项 进入如下界面:
增强类型选择增强部分,依次填写信息,继续保存后出现如下
同上一样创建实例
保存激活运行结果如下:
隐式增强的创建
打开编辑页面,
选择增强操作-》显示隐式增强选项, 然后点击下图按钮
如图会显示隐式增强标识 ,标识可以在这里实施隐式增强,点击创建按钮-》代码-》新建
激活运行如下
文章来自于网络,如果侵犯了您的权益,请联系站长删除!