SAP BAPI教程 – 如何在ABAP中创建BAPI

⚡ 智能摘要

BAPI SAP ABAP 是一种标准化的、支持 RFC 的业务对象方法,它允许外部应用程序访问 R/3 流程和数据。本页解释了标准化的 BAPI,以及如何在 SWO1 中创建、测试、发布 BAPI,以及如何从 ABAP 调用 BAPI。

  • ???? 核心定义: 业务应用程序编程接口是一种稳定的方法,它为外部系统提供标准化的访问权限。 SAP 业务流程和数据。
  • 🗃️ 业务对象库: BAPI 在 BOR 中定义为业务对象类型的方法,并以启用 RFC 的函数模块的形式实现。
  • 📚 标准化 BAPI: GetList、GetDetail、Create、Change、Delete 和 Multiple 变体提供了可重用的读取、写入和批量处理方法。
  • 🛠️ 创建: 在事务 SWO1 中,通过添加指向启用 RFC 的功能模块的 API 方法来构建 BAPI。
  • 测试与发布: 该方法在业务对象生成器或 SWUD 中进行测试,然后通过发布函数模块并设置方法状态来发布。
  • 📞 调用 BAPI: ABAP 程序调用函数模块,然后使用 BAPI_TRANSACTION_COMMIT 提交,因为 BAPI 本身不会提交。

如何在……中创建 BAPI SAP ABAP

什么是 BAPI?

业务应用程序编程接口 (BAPI) 是标准化的编程接口(方法),使外部应用程序能够访问 R/3 系统中的业务流程和数据。

他们 提供稳定、标准化的方法 实现R/3系统与外部应用程序、遗留系统和附加组件的无缝集成。

BAPI 定义在 BOR(业务对象存储库) 作为方法 SAP 执行特定业务功能的业务对象类型。它们以如下方式实现: RFC 启用功能 模块是在 ABAP 工作台的函数生成器中创建的。

一些 BAPI 和方法提供了基本功能,可用于大多数 SAP 业务对象。这些被称为 标准化 BAPI。

标准化 BAPI 列表:

  • 用于读取数据的 BAPI - GetList()、GetDetail()、GetStatus()、ExistenceCheck()
  • 用于创建或更改数据的 BAPI-Create()、Change()、Delete() 和 Undelete(),
  • 用于批量处理的 BAPI -ChangeMultiple()、CreateMultiple()、DeleteMultiple()。

BAPI的优势

BAPI 比基于屏幕的技术更受欢迎,因为它是一个有文档记录、已发布的接口。 SAP 在不同版本中保持稳定。这带来了诸多实际好处。

  • 稳定的界面: 已发布的 BAPI 的签名在升级时不会改变,因此调用程序可以继续工作。
  • 业务逻辑重用: BAPI 运行与事务相同的验证,因此通过它添加的数据保持一致。
  • 远程功能已启用: 由于 BAPI 是支持 RFC 的函数模块,因此可以从其他模块调用它。 SAP 系统,一个 Java 或者 .NET 程序,或者 Web 服务。
  • 无需屏幕依赖: 与批量输入录制不同,BAPI 在屏幕布局更改时不会中断。

明确了概念及其优点之后,下一节将逐步构建 BAPI。

如何创建 BAPI

步骤1) 转到事务 swo1(工具->业务框架-> BAPI 开发->业务对象生成器)。根据创建 BAPI 的功能需求选择业务对象。

在 ABAP 中创建 BAPI

步骤2) 以更改模式打开业务对象。然后选择实用程序->API 方法->添加方法。然后输入功能模块的名称并选择继续。

在 ABAP 中创建 BAPI

步骤3) 在下一个对话框中,需要指定以下信息:

  • 方法:为该方法建议一个合适的名称,
  • 文本:输入 BAPI 的描述,
  • 单选按钮:对话框, Sync同步的,与实例无关的。BAPI 通常以同步方式实现。

在 ABAP 中创建 BAPI

步骤4) 要创建该方法,请在下一个对话框中选择“是”。

在 ABAP 中创建 BAPI

步骤5) 程序生成并执行后,在刚刚创建的方法中检查程序。这样,一个BAPI就创建好了。

在 ABAP 中创建 BAPI

测试 BAPI

您可以通过以下方式测试 BAPI 测试与验证 业务对象构建器中业务对象的单独方法。(或者可以使用事务“SWUD”来测试该方法)。

发布和冻结 BAPI

  • 要发布BAPI,首先要发布功能模块(使用事务se37)。
  • 在业务对象生成器中将方法的状态设置为“已发布”(使用事务 SWo1 - 编辑->更改状态->已发布。)

您还可以使用 BAPI Explorer(事务代码 BAPI)全面查看 BAPI

如何在ABAP中调用BAPI

BAPI 的调用方式与任何启用 RFC 的函数模块相同。需要注意的是,BAPI 本身不会发出 COMMIT WORK 指令,因此调用者必须使用 BAPI_TRANSACTION_COMMIT 确认更改,或者使用 BAPI_TRANSACTION_ROLLBACK 放弃更改。以下示例使用标准 BAPI 创建销售订单。

DATA: ls_header  TYPE bapisdhd1,
      lt_items   TYPE STANDARD TABLE OF bapisditm,
      lt_return  TYPE STANDARD TABLE OF bapiret2,
      lv_order   TYPE vbeln.

* Fill the header and item structures, then call the BAPI
CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2'
  EXPORTING
    order_header_in = ls_header
  IMPORTING
    salesdocument   = lv_order
  TABLES
    order_items_in  = lt_items
    return          = lt_return.

* A BAPI does not commit on its own - decide based on the return table
READ TABLE lt_return WITH KEY type = 'E' TRANSPORTING NO FIELDS.
IF sy-subrc = 0.
  CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
    EXPORTING
      wait = 'X'.
ENDIF.

⚠️警告: 提交之前,务必检查 RETURN 表中是否存在 E 或 A 类型的消息。在发生错误后调用 BAPI_TRANSACTION_COMMIT 会保存不完整的文档,这是 BAPI 中最常见的错误之一。

BAPI 对阵 BDC 对阵 RFC

一个 BAPI,一个 BDC的,而普通的 RFC 也将数据移入 SAP但它们在稳定性以及可重复利用的材料方面有所不同。下表对它们进行了比较。

标准 商业应用程序接口 BDC的 RFC(自定义)
接口 业务对象的已发布方法 交易的屏幕顺序 任何自定义功能模块
升级稳定性 已发布 BAPI 的保证 屏幕变化时会中断 取决于开发者
远程启用 没有
业务验证 完整,与交易相同 完整版,运行实际屏幕。 只有开发者编写的代码。
最适合 稳定的集成和接口 加载不存在 BAPI 的地方 定制点对点服务

经验法则是,只要有已发布的 BAPI,就使用已发布的 BAPI;如果没有,就回退到 BDC;并将自定义 RFC 保留给定制服务。

常见问题

BAPI 执行更新操作,但将 COMMIT WORK 操作留给调用者,因此可以将多个 BAPI 合并为一个逻辑工作单元。然后,BAPI_TRANSACTION_COMMIT 将它们一起保存。ping 数据一致。

类型为 BAPIRET2 的 RETURN 表承载着调用消息。其中,S 表示成功,E 表示错误,W 表示警告,A 表示中止。调用者读取该表以决定是否提交。

事务 BAPI 会打开 BAPI Explorer,其中列出了所有业务对象及其方法,并提供文档和测试工具。SE37 也会显示 BAPI,因为每个 BAPI 都是一个支持 RFC 的函数模块。

是的。ABAP 开发工具中的 AI 助手会针对业务对象推荐标准 BAPI,并绘制参数映射。ping并添加提交和错误处理。开发人员确认字段并测试调用。

是的。许多 OData 服务和 AI 集成都调用底层 BAPI,因为它已经承载了业务逻辑。较新的层在稳定的 BAPI 接口之上添加了 REST 访问和自然语言支持。

总结一下这篇文章: