外行假装内行,我也来谈谈SAP BAPI和BADI

简介: 外行假装内行,我也来谈谈SAP BAPI和BADI

外行假装内行,我也来谈谈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                检查对象存在




 


相关文章
SAP主数据批量导入BAPI
供应商主数据: CALL FUNCTION 'RFC_CVI_EI_INBOUND_MAIN'
10652 0
SAP使用BAPI创建物料主数据的最小输入
BASIC_VIEW 基本数据视图 标志MATNR 物料编码MAKTX 物料描述MEINS 单位MTART 物料类型MBRSH 行业领域 调用BAPI CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA' EXPORTING headdata.
2364 0
SAP LSMW里BAPI这种导入数据方法定义里面的Method和Basic Type分别是在哪里维护的?
SAP LSMW里BAPI这种导入数据方法定义里面的Method和Basic Type分别是在哪里维护的?     这是SAP标准的,至于如何定义,进入事务代码BAPI, ...
1627 0
SAP MM/FI_运费处理方式
常见的采购运费处理方式
SAP MM 途损处理方式
通常客户采购业务需求提到货物运输有损耗,需要针对此业务给出合理方案输出,下面笔者针对此类业务分析下各种实现方案的可行性!
SAP MM初阶之事务代码MIGO界面批次拆分最多输入15行?
SAP MM初阶之事务代码MIGO界面批次拆分最多输入15行?
SAP MM初阶之事务代码MIGO界面批次拆分最多输入15行?
SAP MM不常用移动类型之325
SAP MM不常用移动类型之325
SAP MM不常用移动类型之325