SAP BADI的“多次使用”(multiple use)
SAP中的某些BADI是不允许多用(multiple use)的,即不能同时存在多个活动的增强实施类。如下图中的这种,无论为其创建多少个实施类,都只有活动的那一个会被触发:

tips : 业务加载项定义的多重可用性:
业务加载项定义的多重使用意味着可以有多个活动的 业务加载项实施。在进行调用时,将调用所有上述实施,但调用顺序不可预期。
因此,如果使用多重使用 业务加载项定义,那么顺序不得起到任何作用。一个典型的示例是保存前执行检查。
本文链接:http://www.cnblogs.com/hhelibeb/p/6473960.html
在某些情况下,出于业务需求,可能存在多个开发内容需要放置在这种BADI的实施中。因为只有一个实施类可用,就可能会导致不同开发人员的代码发生碰撞,造成一些不好的结果。这时会自然地产生为这种BADI创造多个实施、并让它们依次执行的需求。
怎样满足这一需求呢?解决办法其实比较简单。我们知道,使用BADI增强,实际上是一个对系统为了我们准备的接口定义去创建实施类的过程。那么,如果有一种方式能读取到BADI接口对应的自定义实施类,并为它们创建实例,就可以很容易地调用它们的方法了。
有一个工具类可以帮我们实现这一目的:cl_sic_configuration . 这是一段示例代码:
REPORT ZTEST_BADI. DATA: lt_classes TYPE STANDARD TABLE OF sic_s_class_descr.
DATA: ls_class LIKE LINE OF lt_classes. TRY. lt_classes = cl_sic_configuration=>get_classes_for_interface( 'IF_EX_N1_CANCEL' ). CATCH cx_class_not_existent . ENDTRY. LOOP AT lt_classes INTO ls_class.
WRITE: ls_class-clsname, / .
ENDLOOP.
运行程序,得到结果:

cl_sic_configuration
-->
这是两个系统自带的类,说明我们还没有对其创建增强实施。
如果开发人员为N1_CANCEL创建过增强实施,将会得到这样的结果:

既然得到了自定义类的类名,接下来只要对存放它们的内表lt_classes进行过滤、循环,创建自定义类的实例并调用方法即可。
总结一下本文给出的方法:
- 为我们想要增强的类创建一个基本BADI实施,在该实施类中使用cl_sic_configuration获取BADI对应的所有自定义实施类的列表。
- 过滤掉系统类、以及基本实施类本身。为剩余的自定义实施类创建实例、并调用相关方法。
- 基本BADI实施需要设置为活动状态。
- 创建的其它BADI是非活动状态。
更具体的代码就不贴了。
SAP BADI的“多次使用”(multiple use)的更多相关文章
- 如何从SAP中查找BADI
如何从SAP中查找BADI 如何从SAP中查找BADI http://blog.csdn.net/CompassButton/article/details/1231652 BADI作为SAP的第 ...
- 查找增强出口和BADI程序
*&---------------------------------------------------------------------* *& Report Z_FIND_EX ...
- SAP CRM settype的创建,背后发生了什么
来自我的同事Sara. 当我们在CRM系统里创建一个settype之后,其实系统后台悄悄的帮我们创建了很多ABAP对象,比如对应的database tables, other ABAP Diction ...
- SAP增强Enhancement
第一代:基于源码增强(子过程subroutine) 第一代增强基于源代码,是SAP提供的一个空代码的子过程.在这个子过程中用户可以添加自己的代码,控制自己的需求.这类增强集中在一些文件名倒数第二个字符 ...
- SAP 4代增强
*20170325 160000 以下之外, 还有:.替代, -用过一次:.BTE -没用过,需要学习: 第二代增强和第三代增强的差别: 1.Tcode 不同:第二代: CMOD 增强管理,SMOD ...
- AMDP + XSLX Workbench 报表开发模式
本文介绍了我和同事通过使用AMDP + XSLX Workbench缩短报表开发周期.分离数据查询处理逻辑和前端展示工作的经验.欢迎讨论. 前言 最近接到了一套人力资源报表的开发需求,需要以EXCEL ...
- AMDP + XLSX Workbench 报表开发模式
本文介绍了我和同事通过使用AMDP + XLSX Workbench缩短报表开发周期.分离数据查询处理逻辑和前端展示工作的经验.欢迎讨论. 前言 最近接到了一套人力资源报表的开发需求,需要以EXCEL ...
- ZFIND_EXIT_BADI
*&---------------------------------------------------------------------* *& Report ZFIND_EX ...
- 查找SAP标准程序用户出口及BADI的方法
查找SAP标准事务代码中使用的BADI: 在SE24中,查看类对象CL_EXITHANDLER,在其方法(Methods)GET_INSTANCE 的第14行打断点,之后运行事务代码: 当有BADI将 ...
随机推荐
- Dynamics CRM 2015 Online Update1 UI界面的更新变化
听说出 Dynamics CRM 2015 Online Update1了,立马跑去申请了个30天试用版简单的看了下,UI上的变化还是让人耳目一新的,也可能是被CRM2013的UI蹂躏太久了没 ...
- Android面试题目总结
1.java 基础题,输入结果是什么? public static void main(String[] args) { String str = new String("abc" ...
- 1045. Favorite Color Stripe (30) -LCS允许元素重复
题目如下: Eva is trying to make her own color stripe out of a given one. She would like to keep only her ...
- 取KindEditor中的textarea的值区不到的解决方案,固定kindEditor的高度
可以通过下面的方式取到textarea的值 var content = $(document.getElementsByTagName('iframe')[0].contentWindow.do ...
- 【UNIX网络编程第三版】阅读笔记(一):代码环境搭建
粗略的阅读过<TCP/IP详解>和<计算机网络(第五版)>后,开始啃这本<UNIX网络编程卷一:套接字联网API>,目前linux下的编程不算太了解,在阅读的过程中 ...
- 匿名内部类使用外面的类为什么要用final型
从程序设计语言的理论上:局部内部类(即:定义在方法中的内部类),由于本身就是在方法内部(可出现在形式参数定义处或者方法体处),因而访问方法中的局部变量(形式参数或局部变量)是天经地义的.是很自然的 为 ...
- 产品打包工具的制作,ant,编译源码,打jar包,打tag,打war包,备份release版本等
1. 在进行打包工具的制作前,需要准备的软件有: svnant-1.3.1 作用是让ant和svn相关联 apache-ant-1.9.7 需要设置ant_home,path,我的配置是: ANT_ ...
- 我眼中的Linux设备树(四 中断)
四 中断中断一般包括中断产生设备和中断处理设备.中断控制器负责处理中断,每一个中断都有对应的中断号及触发条件.中断产生设备可能有多个中断源,有时多个中断源对应中断控制器中的一个中断,这种情况中断产生设 ...
- 控件的基本使用-iOS—UI笔记
学习目标 1.[掌握]第一个UI项目 2.[掌握]控件连线 3.[掌握]按钮的基本操作 4.[掌握]控件的常用属性 一.第一个UI项目 UI (User Interface)也是就用户界面,是App的 ...
- 【翻译】在Sencha应用程序中使用插件和混入
原文:Using Plugins and Mixins in Your Sencha Apps 概述 当扩展一个框架类的功能的时候,通常都会直接将新功能写入派生类,然而,如果所需的同一功能存在于多个组 ...