BADI是一个新的SAP增强技术,是基于ABAP的面向对象技术。它们可以被插入到SAP系统,以适应用户由于行业的不同需要不同的功能以满足具体要求(包括在标准交付)。SAP让客户在软件中预先确定这些点。
基于面向对象概念的增强BADI(Business Add-in),源代码的发布是通过接口的方法调用来实现使用的。用户增强实际上是实现一个或多个基于这个接口的实现类,因为接口类实际上是一个抽象类,所以对同一个增强会出现不同的源代码,这些不同的源代码是通过过滤器(Adapter)来区别用于不同的业务场景的。这种增强是用事务SE18和SE19来实现的。
SAP预定义了一些接口(Interface),客户可以自行定义实现Interface的类(Class),在标准程序中会使用调用客户自定义类(Class)的实例(Instance),获取实例的过程使用了工厂模式,因此获取过程对用户是未知的。不过BADI也有一些局限性,就是有一些Interface是固定的,有的时候会发现需要Mix客户化代码的时候找不到Interface。
业务交易事件(BTE,Business Transaction Events)是SAP的一种增强方式,技术上讲是介于第二代增强(Customer Exits)和BAdIs之间的产物。
BTE(Business Transaction Events)为会计模块独有的增强,这种增强用于财务会计模块(Open FI)、总账会计(FI-GL)、应收账款和应付账款(FI-AR/FI-AP)及销售和分销(SD)的组件。
BTE增强有2种类型,类似于会计凭证验证和替代。
■Publish and Subscribe Interface:只提供SAP数据源,可以供外部程序使用或者达到数据检查的目的。
用于告诉外部软件在SAP标准应用中触发了某些事件,并且把产生的数据提供给它们。外部软件不能给R/3系统返回任何数据,可以用在以下地方。
●主数据被创建、修改或锁定。
●凭证被输入、预制、修改或冲销。
●项目被清除或重置。
也可以在附加的开发中基于此事件和数据产生附加的处理:
●启动工作流。
●产生或修改附加数据。
●请求通信。
■Process Interface:可以达到数据修改的目的,用来增强标准的业务流程。
用于控制与标准R/3系统处理方法不同的业务流程,也就是用Process Interface替换标准处理。它们干预标准流程,并返回数据给SAP应用。
1.第二代增强(Customerexits)和BTE的不同之处
Customer exits只有SAP和Customer两方参与流程,SAP提供软件交付给最终客户,客户可以用Customer exits对标准功能进行增强;BTE则更面向组件,有多方参与流程。流程中所有的参与者都可能是增强的用户和提供者。由于Customer exits只能使用一次,不能满足需求,因此SAP在4.0版本中开发了新的增强技术,并允许重复使用。
Open FI基于以下逻辑,应用程序开发者必须定义某个函数的接口。应用时,一个分配用的表被读取,被分配的程序被自动调用。(www.daowen.com)
Customer exits这种技术不同于其他增强的是,它只允许有一个实施的增强,但是可以按照需求和一定顺序调用多个已实现的增强。可以特定行业和特定国家增强,这可以很容易地通过/定制业务的需求,其中SAP不提供标准的功能,只能通过定制或改进。
BTE即OPEN FI此功能主要是用于FI催款和信用管理,例如在SAP的标准催款功能中,根据Partner Function发送付款通知,以Partner为基础,根据原始凭证的金额,可以发送相同的通知文档。
2.BADI和BTE的不同之处
BTE同BADI的技术实现基本上是一致的,然而,这两个增强技术各不相同,体现在以下几点:
■Open FI仅限于代码增强,而不能像BADI一样对用户界面进行增强。
■Open FI只会在3个层面上进行(SAP—合作伙伴—客户),而BADI加载项可以实现各个软件层的增强。
■Open FI使用函数进行增强,而BADI则使用面向对象实例化的方法进行增强。
3.BADI的查找方法
BADI的查找方法有以下几种:
■BADI对象的信息存储在SXS_INTER、SXC_EXIT、SXC_CLASS和SXC_ATTR这4个表中(参见SECE包)。
■SAP BADI程序都会调用cl_exithandler=>get_instance来判断对象是否存在,并返回实例,这个方法实际就是对上面4个表以及视图V_EXT_IMP和V_EXT_ACT进行查询和搜索的。可以在这个方法处设置断点,获取实例。
■它的调用方式是call method(instance),可以通过exit_handler关键词来查找。
■基于以上机理使用性能分析器(事务代码ST05)选择“table buffer trace”而不是常用的“SQL trace”,然后查找上面的几个表和视图找到对应的BADI。
■使用SE24进入Class Builder,查看对象CL_EXITHANDLER,进入其get_instance方法,为get_class_name_by_interface设置断点。Debug需要增强的事务,在断点处查看class_name即可找到对应的BADI。
■se18查找接口,se19实现接口就可以实现用户增强。
4.BTE的查找方法
BTE的查找方法有以下两种:
■运行事务码(例如XK02),选择“System→Status”,双击“Program(screen)”,选中“In main program”,查找“OPEN_FI_PERFORM”字符串。
■IMG→财务会计全局设置(新)→工具→客户增强→业务事务事件(FIBF),选择“环境”。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。