• SAP BADI的“多次使用”(multiple use)


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

    tips : 业务加载项定义的多重可用性:

    业务加载项定义的多重使用意味着可以有多个活动的 业务加载项实施。在进行调用时,将调用所有上述实施,但调用顺序不可预期。

    因此,如果使用多重使用 业务加载项定义,那么顺序不得起到任何作用。一个典型的示例是保存前执行检查。

    本文链接:http://www.cnblogs.com/hhelibeb/p/6473960.html

      

      在某些情况下,出于业务需求,可能存在多个开发内容需要放置在这种BADI的实施中。因为只有一个实施类可用,就可能会导致不同开发人员的代码发生碰撞,造成一些不好的结果。这时会自然地产生为这种BADI创造多个实施、并让它们依次执行的需求。

      怎样满足这一需求呢?解决办法其实比较简单。我们知道,使用BADI增强,实际上是一个对系统为了我们准备的接口定义去创建实施类的过程。那么,如果有一种方式能读取到BADI接口对应的自定义实施类,并为它们创建实例,就可以很容易地调用它们的方法了。

      有一个工具类可以帮我们实现这一目的:cl_sic_configuration . 这是一段示例代码:

     1 REPORT ZTEST_BADI.
     2 
     3 DATA: lt_classes TYPE STANDARD TABLE OF sic_s_class_descr.
     4 DATA: ls_class   LIKE LINE OF lt_classes.
     5 
     6 TRY.
     7 
     8     lt_classes = cl_sic_configuration=>get_classes_for_interface( 'IF_EX_N1_CANCEL' ).
     9 
    10   CATCH cx_class_not_existent .
    11 
    12 ENDTRY.
    13 
    14 
    15 LOOP AT lt_classes INTO ls_class.
    16   WRITE: ls_class-clsname, / .
    17 ENDLOOP.

    运行程序,得到结果:

    这是两个系统自带的类,说明我们还没有对其创建增强实施。

    如果开发人员为N1_CANCEL创建过增强实施,将会得到这样的结果:

    既然得到了自定义类的类名,接下来只要对存放它们的内表lt_classes进行过滤、循环,创建自定义类的实例并调用方法即可。

    总结一下本文给出的方法:

    1. 为我们想要增强的类创建一个基本BADI实施,在该实施类中使用cl_sic_configuration获取BADI对应的所有自定义实施类的列表。
    2. 过滤掉系统类、以及基本实施类本身。为剩余的自定义实施类创建实例、并调用相关方法。
    3. 基本BADI实施需要设置为活动状态。
    4. 创建的其它BADI是非活动状态。

    更具体的代码就不贴了。

  • 相关阅读:
    Asp.net中导出Excel文档(Gridview)
    以太坊难度炸弹是什么?极大抑制矿工继续以POW方式挖矿!
    Solidity语言基础 和 Etherum ERC20合约基础
    BCH/BSV coin split troubleshooting
    比特币学习-Transaction的locktime属性
    在BCH硬分叉后防止重放攻击-2
    在BCH硬分叉后防止重放攻击-1
    区块链硬分叉-软分叉简单了解
    BTC和BCH 区别和联系?
    BCHABC/BCHSV的矛盾所在
  • 原文地址:https://www.cnblogs.com/hhelibeb/p/6473960.html
Copyright © 2020-2023  润新知