一、概述
可能很多业务顾问在项目中,总听到ABAPER说那个“扒皮(ABAP)逻辑不是那样的呀,搞不了呀”,但是很少有说BADI的,某次在一个财务的FS中看到,因此有了这篇笔记。
关于BADI,help.sap.com的解释:
二、BADI简介
BADI 是ABAP中面向对象的一种增强方式,他的调用方式是CALL METHOD (instance),(相关的TCODE是SE18和SE19),你可以通过EXIT_HANDLER这个单词查找BADI。
创建增强有多种方法,用CMOD可以创建,用SPRO也可以创建。网上有这段:
针对BADI的增强
1、BADI对象的信息存储在SXS_INTER, SXC_EXIT, SXC_CLASS 和SXC_ATTR 这四个表中。
2、SAP程序都会调用cl_exithandler=>get_instance来判断对象是否存在,并返回实例;其实get_instance就是对上述几个表和他们的视图(V_EXT_IMP 和 V_EXT_ACT)进行查询和搜索。
3、基于这个机理,我查用ST05来监控一个TCODE来跟踪,然后选择查找有关上述几个表和视图的操作,就可获得相关BADI。
4、se18 查找接口,se19 实现接口就可以实现用户增强。
在程序中,查找BAdI的常用方法:
使用事务代码 SE84 :Repository information system
使用事务代码 SPRO: Customizing Guide, SAP标准发布的BAdI会在相关应用配置点中说明
在程序中搜索关键字CL_EXITHANDLER=>GET_INSTANCE或关键字GET BADI
在程序中搜索BAdI相关的接口名称,其接口的命规范通常为IF_EX_
事务代码CODE_SCANNER, 可指定在特定的package、program中所有相关的字符串
三、BAPI与BADI的区别
1. BAPI概述
BAPI是business application programming interface的缩写,是面向对象程序设计方法中的一组程序接口。它允许程序员通过SAP将第三方软件整合成R/3专有产品。为了完成一些特殊的商业任务,如上传交易数据等,R/3系统中内置了BAPI。
2. BAPI的作用
2.1 它实际上是一种特殊的Remote Function Modules (RFC)是为了提供使用外部程序来进行交易活动, BAPI是SAP以外程序访问SAP内部数据和程序的标准方式。接口调用方式:SAP RFC或者WEBSERVICE。
2.2 BAPI业务应用程序接口是一个标准化的开放接口。有了BAPI,用户可以通过浏览器、Exchange电子邮件来使用ERP系统,用户可以将这些软件模块与非ERP软件混合匹配使用。
2.3 BAPI是SAP提供的基于业务对象的函数,关键是它们处理的对象是R/3的业务相关对象,比如单据类销售订单,它们是一系列实体,RFC则是一种系统间通讯的方式(Remote Fcuntion Call),一个BAPI函数是一个RFC函数。
需要注意的是在T-CODE:SE11中创建的结构必须保存在开发类中,不可保存为本地对象。
3. 创建BAPI程序
3.1 定义BAPI Structure (Structure不能在BAPI中重复使用,因为一旦BAPI被释放,其Structure被冻结)。事务代码SE11。
3.2 创建FUNCTION MODULE。事务代码SE80。
每个BAPI必须有自己的Function Group,Function Group属性必须为RFC。
3.3 创建Business Object。事务代码SWO1。
3.4 使用BAPI WIZARD创建API Method。这样BAPI可以被外部程序调用。
3.5 Function Module符合BOR Method。
3.6 释放BAPI Function Module, 事务代码SE37、SWO1。
释放Business Object Type,释放BAPI作为BOR的一种Method。
业务顾问多了解开发的实现方式,可以更好的跟开发人员沟通,提高FS的可读性,减少因沟通过程中的理解错误造成的问题。