外行假装内行,我也来谈谈SAP BAPI和BADI
A, 什么是BAPI?
BAPI是business application programming interface的缩写,是面向对象程序设计方法中的一组程序接口。它允许程序员通过SAP将第三方软件整合成R/3专有产品。为了完成一些特殊的商业任务,如上传交易数据等,R/3系统中内置了BAPI。
1.BAPI – business application programming interface。
2.它实际上是一种特殊的Remote Function Modules (RFC)是为了提供使用外部程序来进行交易活动, BAPI是SAP以外程序访问SAP内部数据和程序的标准方式。
3.它提供的基于企业目标(Business Object) 技术的接口应用界面。
4.SAP采用了Object-oriented技术,逻辑定义了SAP R/3系统的所有功能目标,并且将所有的目标(Objects) 和BAPIs存储于企业对象库(Business Objects Repository)。
5.SAP R/3 企业目标的目标类型(Object Type) 相当于目标设计语言中类(Class) 的概念,其定义结构由以下几部分组成:基本数据,接口界面,键(Key Fields),方法(Methods),特征(Attributes),事件(Events)。
6.BAPI在SAP系统内部以Function Module的方式实现.所有的BAPI Function都支持Remote Function Call (RFC),处理过程中不激活对话窗口。
7.BAPI是被定义为Business Object Repository(BOR)中的SAP Business Object类型或SAP interface类型的方法,并且以Function Module方式实现的. 这种定义和实现分离的方式是我们可以通过2种方式访问BAPI:
- 通过面向对象的方法调用BOR中的BAPI
- 通过RFC直接调用Function Module
需要注意的事项:
在T-CODE:SE11中创建的结构必须保存在开发类中,不可保存为本地对象。
BAPI业务应用程序接口(Business Application Programming Interface,简称BAPI)是面向对象程序设计方法中的一组程序接口。它允许程序员通过SAP将第三方软件整合成R/3专有产品。为了完成一些特殊的商业任务,比如上传交易数据等,系统中内置了BAPI。
BAPI业务应用程序接口是一个标准化的开放接口。有了BAPI,用户可以通过浏览器、Exchange电子邮件来使用ERP系统,用户可以将这些软件模块与非ERP软件混合匹配使用。
用户可以按需求单独更新某一个模块,而没有必要为了增强某一个功能对系统进行全面升级。用户用逐个模块更新的办法增强系统的功能,而不必更换整个系统。
BAPI技术对ERP软件的开发商来说是非常重大的进步。从MRPII到ERP,系统功能越来越多,一个软件公司无论多么强大,也无法独自开发包括企业全部专业的全部管理功能的软件。在技术上必须有能力把第三方软件接到自己的核心软件上。SAP的BAPI和Oracle应用的30多个API能够使自己的软件具有“无限”的扩展能力。
BAPI是SAP提供的基于业务对象的函数,关键是它们处理的对象是R/3的业务相关对象,比如单据类销售订单,它们是一系列实体,RFC则是一种系统间通讯的方式(Remote Fcuntion Call),一个BAPI函数是一个RFC函数。
B, 如何创建BAPI程序?
主要有如下几个步骤:
1.定义BAPI Structure (Structure不能在BAPI中重复使用,因为一旦BAPI被释放,其Structure被冻结)。事务代码SE11。
2.创建FUNCTION MODULE。事务代码SE80。
每个BAPI必须有自己的Function Group,Function Group属性必须为RFC。
3.创建Business Object。事务代码SWO1。
4.使用BAPI WIZARD创建API Method。
这样BAPI可以被外部程序调用。
5.Function Module符合BOR Method。
4.释放BAPI Function Module, 事务代码SE37、SWO1。
释放Business Object Type,释放BAPI作为BOR的一种Method。
C,BADI 和BAPI 的区别
BADI是一种面向对象的增强方式,SE19可以实现SAP已定义好的BADI。
而BAPI是SAP业务对象的一个方法,底层多以Function Module来实现。所以在ABAP里更多地是作为FM来使用。
BAPI 是函数,你可以输入T-code:BAPI,查找系统里的BAPI函数。比如采购申请的审批的勾打上,就可以调用BAPI函数来实现。
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中所有相关的字符串
D,SAP 各模块常用的BAPI
MM模块
1、 BAPI_MATERIAL_SAVEDATA 创建物料主数据
注意参数EXTENSIONIN的使用,可以创建自定义字段
例如:WA_BAPI_TE_MARA-MATERIAL = ITAB_UP-MATNR.
T_EXTENSIONIN-STRUCTURE = 'BAPI_TE_MARA'.
T_EXTENSIONIN-VALUEPART1 = WA_BAPI_TE_MARA.
APPEND T_EXTENSIONIN.
WA_BAPI_TE_MARAX-MATERIAL = ITAB_UP-MATNR.
T_EXTENSIONINX-STRUCTURE = 'BAPI_TE_MARAX'.
T_EXTENSIONINX-VALUEPART1 = WA_BAPI_TE_MARAX.
APPEND T_EXTENSIONINX.
2、 BAPI_OBJCL_CREATE 分类视图的创建
3、 BAPI_OBJCL_GETCLASSES 分类视图得到详细信息
4、 BAPI_MATERIAL_SAVEREPLICA 物料视图的扩充
5、 BAPI_GOODSMVT_CREATE 创建物料凭证 注意表T158G可以决定goodsmvt_code
GOODSMVT_CODE参数对应值:
01 MB01
02 MB31
03 MB1A
04 MB1B
05 MB1C
06 MB11
07 MB04
6、 BAPI_GOODSMVT_CANCEL 冲销物料凭证
7、 BAPI_PR_CREATE 创建PR
8、 BAPI_PO_CREATE1 创建PO
9、 BAPI_PO_CHANGE 修改PO和删除PO
10、WS_REVERSE_GOODS_ISSUE 冲销交货单的过账发货
11、BAPI_RESERVATION_CREATE1 创建预留 如果要检查ATP,必须使用
BAPI_RESERVATION_CREATE
12、BAPI_RESERVATION_CHANGE 修改和删除预留
13、PRICES_CHANGE PRICES_POST 更改物料移动平均价或者标准价格
SD模块
1、 BAPI_SALESORDER_CREATEFROMDAT2 创建销售订单
2、 SD_SALESDOCUMENT_CREATE 创建销售订单 (如果要检查ATP,必须使用这个)
3、 BAPI_OUTB_DELIVERY_CREATE_SLS 根据销售订单创建交货单
4、 BAPI_BILLINGDOC_CREATEMULTIPLE 创建发票,注意参数ref_doc_ca
5、 BAPI_SALESORDER_CHANGE 修改或者删除销售订单
6、 MB_CANCEL_GOODS_MOVEMENT 冲销交货单的过账发货
7、 BAPI_BILLINGDOC_CANCEL1 发票的冲销
8、 BAPI_OUTB_DELIVERY_CHANGE 修改外向交货单
9、 SD_DELIVERY_UPDATE_PICKING 修改外向交货单拣配数量
10、WS_DELIVERY_UPDATE 外向交货单的发货过账
11、SD_CUSTOMER_MAINTAIN_ALL 创建客户 。
PM模块
1、BAPI_OBJCL_CREATE 、
BAPI_OBJCL_CHANGE、
BAPI_OBJCL_GETDETAIL
计量点通用属性导入
2、MEASUREM_DOCUM_RFC_SINGLE_001 计量凭证创建
FI模块
1、K_HIERARCHY_TABLES_READ 成本要素组明细
2、BAPI_ACC_DOCUMENT_POST 创建会计凭证
3、BAPI_ACC_DOCUMENT_REV_POST 反冲会计凭证 可以冲销自开发程序生成的凭证 必须传入交易码参数
BAPI_ACC_GL_POSTING_REV_POST 只能冲销标准TCODE生成的凭证
4、FCOM_COSTCENTER_CHANGEMULTIPLE
FCOM_COSTCENTER_CREATEMULTIPLE
BAPI_COSTCENTER_CHANGEMULTIPLE :Change One or More Cost Centers
BAPI_COSTCENTER_CHECKMULTIPLE :Check One or More Cost Centers
BAPI_COSTCENTER_CREATEMULTIPLE :Create One or More Cost Centers
BAPI_COSTCENTER_DELETEMULTIPLE :Delete One or More Cost Centers
4、BAPI_INCOMINGINVOICE_CREATE 发票检验(miro)
5、BAPI_INCOMINGINVOICE_CANCEL 发票校验冲销(mr8m)
PS模块
1、BAPI_PS_INITIALIZATION、BAPI_BUS2001_CREATE、BAPI_PS_PRECOMMIT 创建项目定义
2、BAPI_PS_INITIALIZATION、BAPI_BUS2054_CREATE_MULTI、BAPI_PS_PRECOMMIT 创建WBS
创建WBS的时候,注意参数 wbs_left和 wbs_up,这个是创建有层级的WBS必须要填写的
3、KBPP_EXTERN_UPDATE_CO 修改项目和WBS的预算
PP模块
Routing(工艺路线)
BAPI_ROUTING_CREATE 创建工艺路线BAPI - ca03
BAPI_ROUTING_EXISTENCE_CHECK 检查工艺路线是否存在
Reference operation set:(参考操作集)
BAPI_REFSETOFOPERATIONS_CREATE 创建参考参考工序集
BAPI_REFSETOFOPR_EXISTENCE_CHK 检查参考参考工序集
Planned order:(计划订单)
BAPI_PLANNEDORDER_CHANGE 更改计划订单 -md04
BAPI_PLANNEDORDER_CREATE 创建计划订单
BAPI_PLANNEDORDER_DELETE 删除计划订单
BAPI_PLANNEDORDER_EXIST_CHECK 检查计划订单是否存在
BAPI_PLANNEDORDER_GET_DETAIL 获取计划订单详细信息(计划订单)
BAPI_PLANNEDORDER_GET_DET_LIST 获得计划订单信息
Planned Independent Requirement:(计划独立需求)
BAPI_REQUIREMENTS_CHANGE 更改计划独立需求 -md61
BAPI_REQUIREMENTS_CREATE 创建计划独立需求
BAPI_REQUIREMENTS_GETDETAIL 显示计划独立需求
Production order:(生产订单)
BAPI_PRODORD_WM_MAT_STAGING WM材料分期
BAPI_PRODORD_SETUSERSTATUS 设置用户状态
BAPI_PRODORD_SET_DEL_INDICATOR 设置删除标识
BAPI_PRODORD_SET_DELETION_FLAG 设置删除标识
BAPI_PRODORD_SCHEDULE 进行调整
BAPI_PRODORD_REVOKEUSERSTATUS 取消用户状态
BAPI_PRODORD_RELEASE 发布
BAPI_PRODORD_GET_LIST 列表抬头订单
BAPI_PRODORD_GET_DETAIL 抬头订单明细
BAPI_PRODORD_EXIST_CHECK 确认检查性
BAPI_PRODORD_CREATE_FROM_REF 创建模板
BAPI_PRODORD_CREATE_FROM_PLORD 创建带有计划订单
BAPI_PRODORD_CREATE_CAP_REQ 产生能力需求
BAPI_PRODORD_CREATE 创建生产订单
BAPI_PRODORD_COSTING 创建成本估计
BAPI_PRODORD_COMPLETE_TECH 完整的技术
BAPI_PRODORD_CLOSE 关闭订单
BAPI_PRODORD_CHECK_MAT_AVAIL 检查物料可用性
BAPI_PRODORD_CHANGE 更改生产订单
Production order confirmation:(生产订单确认)
BAPI_PRODORDCONF_GET_TT_PROP 确认计工单
BAPI_PRODORDCONF_GET_TE_PROP 确认计工单
BAPI_PRODORDCONF_GETLIST 生产订单确认
BAPI_PRODORDCONF_GETDETAIL 生产订单确认详细信息
BAPI_PRODORDCONF_GET_HDR_PROP 确认计划订单
BAPI_PRODORDCONF_EXIST_CHK 检查工单是否存在
BAPI_PRODORDCONF_CREATE_TT 确认计划工单
BAPI_PRODORDCONF_CREATE_TE 确认计划工单
BAPI_PRODORDCONF_PDC_UPLOAD_TT PP 确认计工单
BAPI_PRODORDCONF_PDC_UPLOAD_TE PP 确认计工单
BAPI_PRODORDCONF_CREATE_HDR 输入订单确认
BAPI_PRODORDCONF_CREATE_ACT 输入订单激活确认
BAPI_PRODORDCONF_CANCEL 取消生产订单
BDC Download & Upload for production order: (下载和上传的BDC的生产订单)
BAPI_RCVPRORDCF_RECEIVEPRODORD PP-PDC: 下载生产订单
BAPI_RCVPRORDCF_RECEIVEWORKC PP-PDC: 下载工作中心
BAPI_RCVPRODCF_REQUEST_CONF PP-PDC: 上传请求
KANBAN: (看板)
BAPI_KANBAN_CHANGE 更改kanban数据
BAPI_KANBAN_CHANGESTATUS 更改kanban状态
BAPI_KANBAN_CHANGESTATUS1 更改kanban状态1
BAPI_KANBAN_GETLIST 匹配选择标准KANBAN的测定BAPI_KANBAN_GETLIST_ALL 匹配选择标准KANBAN的测定
BAPI_KANBAN_GETLISTFORSUPPLIE1 匹配选择标准KANBAN的测定
BAPI_KANBAN_GETLISTFORSUPPLIER 为供应商提供kanban数据
BAPI_KANBAN_SETINPROCESS 为供应商提供kanban数据
KANBAN CONTROL CYCLE: (看板)
BAPI_KANBANCC_ADDEVENTDRKANBAN Create Event-Driven KANBAN for Control Cycle
BAPI_KANBANCC_CHANGE Change Control Cycle
BAPI_KANBANCC_CREATE Create Control Cycle
BAPI_KANBANCC_DELETE Delete Control Cycles
BAPI_KANBANCC_EXISTCHECK Check Existence of Control Cycle
BAPI_KANBANCC_GETLIST Determine Kanban Control Cycles with Selection Criteria
BAPI_KANBANCC_GETLIST_ALL Determine Kanban Control Cycles with Selection Criteria
BAPI_KANBANCC_WITHDRAWQUANTITY Quantity Signal for Kanban Control Cycle
REM Confirmation: ( REM确认)
BAPI_REPMANCONF_CANCEL 处理的重复制造取消
BAPI_REPMANCONF_CREATE_MTO 销售订单执行重复制造情况
BAPI_REPMANCONF_CREATE_PLOT 执行生产成本
BAPI_REPMANCONF_CREATE_MTS 在很多情况下,执行生产成本
BAPI_REPMANCONF_EXIST_CHK 检查对象存在
REM Confirmation1:
BAPI_REPMANCONF1_CANCEL 处理的重复制造取消
BAPI_REPMANCONF1_CREATE_MTO 销售订单执行重复制造情况
BAPI_REPMANCONF1_CREATE_MTP 在很多情况下,执行生产成本
BAPI_REPMANCONF1_CREATE_MTS 在很多情况下,执行生产成本
BAPI_REPMANCONF1_EXIST_CHK 检查对象存在