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

什么是 BADI?
BADI 代表 Business Add Ins. 与客户出口类似,BADI 有助于将自定义增强功能连接到 SAP 功能。 BADI 的示例: 在事务 CAT2 – 时间表输入中,HR 希望包含一个交互式确认,即故意提交不正确的数据是解雇的理由。这可以使用 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。
步骤2) 创建 BADI 实现:事务 SE19
步骤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 就应该使用,因为它是面向对象的,升级安全,而且可以多次实现。



