SAP BAPI, 全称为 Business Application Programming Interface(业务应用程序编程接口),是 SAP 产品中业务对象模型的标准接口。
BAPI 是客户代码和第三方应用程序与 SAP 产品交互的主要方法。 BAPI 封装了 SAP 业务对象模型的内部层,以确保在访问或更改业务对象时正确执行所有业务逻辑、验证和授权检查。
BAPI 的工作原理
BAPI 被实现为调用 SAP 内部代码的功能模块。 根据所使用的 BAPI 集,它们可以调用使用业务对象处理框架 (BOPF) 定义的业务对象模型或使用程序、表和功能模块定义的遗留模型。
BAPI 公开了一个正式且稳定的接口,客户和第三方代码的开发人员可以使用该接口来访问 SAP 业务对象并与之交互,SAP 保证这种方式将在未来发挥作用。 在 SAP 系统中访问底层表和非 BAPI 功能模块、程序和类也是可能的,但它并不能保证代码将来可以工作,或者被访问的对象甚至会存在。
如果内部功能模块的签名发生更改,则此类使用非 BAPI 接口可能会导致升级过程中出现问题或需要小补丁,从而使依赖它的代码无效。
BAPI 的使用
BAPI 仅应在已发布的情况下由第三方或客户开发人员使用,这意味着 SAP 已将它们指定为可供使用并保证在未来保持稳定。 可以通过查看功能模块 BAPI 的属性部分中的发布日期来检查发布状态。 如果该字段为空,则 BAPI 尚未由 SAP 发布,不应使用。
为了在高级业务应用程序编程 (ABAP) 语言中使用 SAP BAPI,开发人员使用 ABAP 的 CALL FUNCTION 来调用功能模块(参见下图 1)。 或者,大多数 BAPI 都支持远程,这意味着它们可以通过远程函数调用 (RFC)、Web 服务或 SAP 的 Java 连接器来调用。
文章图片
在每个基于 ABAP 平台的 SAP 产品中,有一些 BAPI 可以实现大多数业务流程的完全自动化。 每个 SAP 产品的文档都提供了有关可用 BAPI 的一些信息。 在 SE37 和 SE80 SAP 事务代码或 Eclipse 的 ABAP 中搜索以 BAPI 开头的功能模块也很有用。
每个 BAPI 功能模块都应具有可通过 SE37 中的功能模块文档选项访问的多种语言的大量文档。 仔细阅读本文档很重要,因为 BAPI 在其结构和行为方面差异很大,并且如果不满足其要求,它们有时会以开发人员期望以外的方式运行。
文章图片
许多 BAPI 具有模仿底层业务对象结构的复杂结构。 本文截图 2 中显示的用于修改业务伙伴地址的 BAPI(与本文截图 1 中显示的 CALL FUNCTION 相同)包括多个导入结构以及大量表参数,这些参数可以将附加信息传入和传出 BAPI。
本文截图 2 中的两个重要参数是 ADDRESSDATA 和 ADDRESSDATA_X。 这种类型的配对是典型的 BAPI,其中第二个 _X 结构是一组标志,准确指示应该更新哪些字段。
因为 BAPI 是作为功能模块实现的,所以它们自然不适合类、方法和接口的 ABAP 面向对象编程 (OOP) 范式。 尽管如此,它们通常以面向对象的方式实现,因为它们是 SAP 业务对象的接口。
【什么是|什么是 SAP BAPI】在ABAP中,这些功能模块可以从程序、功能模块或类中调用。 通常最好将 BAPI 调用包装在数据访问对象 (DAO) 中,这些对象是封装对 BAPI 的调用的类。 这样做可以使用 DAO 的模拟版本进行单元测试,从而允许将开发人员代码的测试与 BAPI 调用本身的测试分开。