前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >外行假装内行,我也来谈谈SAP BAPI和BADI

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

作者头像
全栈程序员站长
发布2022-09-15 10:47:44
1.2K0
发布2022-09-15 10:47:44
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

外行假装内行,我也来谈谈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中创建的结构必须保存在开发类中,不可保存为本地对象。

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

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函数。

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

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。

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

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中所有相关的字符串

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

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的预算

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

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和BADI
外行假装内行,我也来谈谈SAP BAPI和BADI

-完-

整理于2021-12-30

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/163911.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云 BI
腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档