BADI是什么? SAP ABAP?

⚡ 智能摘要

BADI 在 BADI SAP ABAP 代表业务加载项 (Business Add-In),它是一种面向对象的增强功能,可以将自定义逻辑连接到标准应用程序上。 SAP 功能。本页解释了什么是 BADI、它的特性、经典类型和新类型、SE18 和 SE19 工作流程,以及它与出口的比较。

  • 🧩 核心定义: 业务加载项是一种增强接口,类似于客户出口,它将自定义功能附加到标准应用程序上。 SAP 不做任何修改。
  • 🧱 面向对象: BADI 定义了一个接口,增强功能存在于实现该接口的类中,而不是存在于保留的包含文件中。
  • 🔁 多种实现方式: 与客户出口不同,BADI 可以多次实施,这更适合行业解决方案和国家版本。
  • 🔓 Upgrade 安全: BADI 不需要 SAP 软件变更登记不受版本升级的影响。
  • 🛠️ 定义与实施: 定义和接口在 SE18 中创建,实现及其类在 SE19 中创建。
  • 🆕 经典与创新: 经典的 BADI 是基于增强的,而 NetWeaver 中引入的新内核 BADI 增加了过滤器、回退类和更好的性能。

BADI是什么? SAP ABAP

什么是 BADI?

BADI 代表 Business Add Ins. 与客户出口类似,BADI 有助于将自定义增强功能连接到 SAP 功能。 BADI 的示例: 在事务 CAT2 – 时间表输入中,HR 希望包含一个交互式确认,即故意提交不正确的数据是解雇的理由。这可以使用 BADI 来实现

BADI 示例

与传统出口的区别在于技术层面。BADI 构建于 ABAP 对象之上,因此标准程序调用接口方法,而自定义代码则位于实现该方法的类中。正因如此,BADI 常被描述为面向对象的传统出口的后继者。 客户退出.

产品特性

  • BADI 是面向对象的
  • 它们可以多次实施
  • 不需要 SAP 软件 变更登记
  • 升级版本对 BADI 的功能没有影响

这四个特点解释了为什么 SAP 建议使用 BADI 而不是传统的出口。因为增强功能位于单独的类中,所以升级后不会受到影响;而且由于 BADI 可以定义为多次使用,因此多个团队可以增强同一点而不会相互覆盖。

BADI的类型

SAP 提供两代业务加载项。经典 BADI 是上文所述的基于增强功能的版本,而新 BADI 则是随着……推出的。 SAP NetWeaver 是增强框架的一部分,速度更快,灵活性更高。

标准 经典的BADI 新的(内核)BADI
维护于 SE18 和 SE19 增强功能构建器位于增强功能区域内
筛选 简单筛选值 使用逻辑表达式筛选组合
倒退 不可用 当没有激活​​的实现时,将运行默认的备用类。
实例化 CL_EXITHANDLER=>GET_INSTANCE GET BADI 和 CALL BADI 语句
性能 速度较慢,每次调用都会创建对象 速度更快,由内核管理

两代技术的发现和实现方式类似,如下所述。

如何定义和实现 BADI

这涉及三个步骤

步骤1) 创建 BADI 定义及其接口:事务 SE18。

定义并实施 BADI

步骤2) 创建 BADI 实现:事务 SE19

定义并实施 BADI

步骤3) 定义一个实现接口的类:在实现创建过程中,还会创建一个用于实现增强接口的类。

在代码中,标准程序通过退出处理程序执行到实现部分。经典模式是实例化 BAD 引用,然后调用接口方法。

* Reference typed with the BADI interface
DATA: lo_badi TYPE REF TO zif_ex_badi_demo.

* Get the active implementation(s)
CALL METHOD cl_exithandler=>get_instance
  CHANGING
    instance = lo_badi.

* Call the interface method that carries the custom logic
CALL METHOD lo_badi->check_data
  EXPORTING
    is_input = ls_input.

💡提示: 使用 GET BADI 和 CALL BADI 可以更简单地调用新的内核 BADI,它们还会自动处理筛选值。在编写调用之前,请使用 SE18 检查增强点是经典 BADI 还是新的 BADI。

⚠️警告: 事务代码 SE18 包含定义和接口,而 SE19 包含实现。在 SE18 中创建实现,或在 SE19 中创建定义,是常见的错误,会导致 BADI 处于非活动状态。

BADI vs 客户出口 vs 用户出口

这三种技术均能提升标准。 SAP但它们在技术和灵活性方面有所不同。下表将 BADI 与两款较旧的产品进行了比较。 退出技巧.

标准 用户出口 客户退出 巴迪
技术 子程序(FORM) 功能模块、屏幕或菜单 面向对象的接口和类
适用范围 仅限SD模块 所有模块 所有模块
实现次数 一个 一个 多,当定义为多次使用时
维护 直接编辑包含项 SMOD 和 CMOD SE18 和 SE19
Upgrade 安全 已与SPAU核实

实际操作中,只要有 BADI 就应该使用,因为它是面向对象的,升级安全,而且可以多次实现。

常见问题

SE18 是 BADI 构建器,用于创建定义及其接口。SE19 是实现构建器,用于将实现类附加到该定义。一个用于定义钩子,另一个用于填充钩子。

多用途 BADI 允许同时运行多个活动实现,并且在方法被调用时所有实现都会运行。单用途 BADI 只允许运行一个活动实现。

在 CL_EXITHANDLER=>GET_INSTANCE 处设置断点,运行事务,并从 EXIT_NAME 参数中读取 BADI 名称。对于新的 BADI,请在存储库信息系统中搜索程序的增强点。

是的。ABAP 开发工具中的 AI 助手会根据需求描述自动生成实现类、方法体和筛选逻辑。开发人员仍然需要在 SE19 中激活这些实现并进行测试。

AI顾问会检查标准程序并报告可用的增强选项,然后在增强区域内推荐新的BADI以进行新工作,保持ping 经典的 BADI,只提供这一个选项。

总结一下这篇文章: