第四代增强 NEW BADI的定义及实现详解编程语言

NEW BADI 是在第四代增强框架下创建的BADI,是相对于第三代增强Classic Badi 而言的.

根据第四代增强的基本概念,所有显式增强Enhancement options 都必须放在增强点中.New Badi 作为显示增强的一种,也必须放在增强点中.

Classic badi 是可以直接创建的.

New Badi 的创建

  1. 创建增强点:T_code SE18.或者SE80
  2. 输入新创建的增强点名称,点击创建按键
  3. 第四代增强 NEW BADI的定义及实现详解编程语言
  4. 增强点是有类型的,通过se18创建的增强点默认类型是Badi Definition (Object Plug-in (BAdI)),且不可以更改.其不可用于soucecode enhance.
  5. 之后进入增强点修改界面的增强元素定义界面.
  6. 点击Create按键,输入一个Badi名称和短描述
  7. 第四代增强 NEW BADI的定义及实现详解编程语言
  8. 双击Badi名称,进入Badi属性界面
  9. 第四代增强 NEW BADI的定义及实现详解编程语言
  10. Multiple Use:是否可以多次使用.
  11. 如果不可以多次使用.如何没有使用FILTER ,则同时只能有一个实现是运行时激活的.如果具有Filter,则无论有几个符合Filter的实现,系统也只会执行一个.
  12. Limited filter use 如果被勾选,则该Badi 只能有一个Filter field,必须有一个过滤组合filter combination在Badi实现中指定.且Filter 值在badi实现中比较时只能用’=’号.
  13. 展开刚建立的BADI,双击INTERFAC.指定Badi接口的名称.如果该接口还不存在可以双击创建
  14. 第四代增强 NEW BADI的定义及实现详解编程语言
  15. 如果Badi的 multiple use 被勾选,则接口方法的参数不能为retruning ,exporting类型.
  16. 可以点击创建badi子项目按键或者右击,增加Filter,Fcode增强,屏幕增强.
  17. 第四代增强 NEW BADI的定义及实现详解编程语言
  18. 如果增加Filter则会弹出如下对话框;如果选择了filtercheck 为Automatically by dictionary则需要填写一个有固定值或者值表的数据元素或域.

  19. 第四代增强 NEW BADI的定义及实现详解编程语言

  20.  如果添加屏幕增强,则会弹出如下对话框:需要填写要增强的程序名,主屏幕屏幕名称及主屏幕下的子屏幕区域名称.

  21. 第四代增强 NEW BADI的定义及实现详解编程语言

  22.  如过要添加Fcode增强,则会弹出如下对话框.只有不可重复使用的没有过滤器的badi才可以创建Fcode增强.另外,填写的程序必须有菜单栏.填写的Fcode必须以+开头,且在菜单栏上已经存在.

  23. 第四代增强 NEW BADI的定义及实现详解编程语言
  24.  至此新建New Badi的工作已经完成.Badi是要在程序中调用的.那么如果在程序总调用badi呢.

New Badi 的调用.

  1.  在程序中定义一个类型为Badi名称或者CL_BADI_BASE的参考变量
  2.  在需要的位置按照如下语法(get badi) 获取参考变量的实例,FILTERS 后边必须包含该Badi的所有过滤器Filter.
  3. GET BADI { badi [FILTERS f1 = x1 f2 = x2 …] }
           | { badi TYPE (name)
                  [ {FILTERS f1 = x1 f2 = x2 …}
                  | {FILTER-TABLE ftab}] }
                  [CONTEXT con].
  4. 此时系统会产生一个父类为cl_badi_base  的实例,其中参数imps包含了该Badi所有符合条件的实现的的类的实例.
  5. 第四代增强 NEW BADI的定义及实现详解编程语言
  6. 按照如下语法调用Badi的方法.系统会一次调用符合条件的所有实现的实例方法
  7. CALL BADI { badi->meth         parameter_list }
            | { badi->(meth_name) {parameter_list
                                  |parameter_tables} }.
  8. 简单样例如下:
  9. DATA gr_newbadi TYPE REF TO  zbadi_get_ad. 
      GET BADI gr_newbadi FILTERS bukrs = '1111'. 
      CALL BADI gr_newbadi->add 
        EXPORTING 
          i      = 100 
        IMPORTING 
          result = DATA(gv_result).

     此时我们已经完成了Badi的调用.但是如何没有激活的符合Filters过滤器的条件的Badi实现,系统不会做任何事情.对于非多次利用的Badi,系统此时也会抛出异常CX_BADI_NOT_IMPLEMENTED.

创建Badi的实现

  1. SE18进入增强点,在增强点的增强元素定义界面右键点击Badi,选择创建Badi实现.
  2. 第四代增强 NEW BADI的定义及实现详解编程语言
  3. 此时弹出增强实现创建或选择界面.如在4代增强概念中锁说,显式增强元素需要增强点做为容器,增强实现也需要自己的容器即增强实现.如果创建需要输入名称及短描述.复合增强实现可选.
  4. 第四代增强 NEW BADI的定义及实现详解编程语言
  5. 第四代增强 NEW BADI的定义及实现详解编程语言
  6. 选择完增强实现后就进入了Badi实现的定义弹窗中.输入Badi实现的名称即实现类的名称,继续.
  7. 第四代增强 NEW BADI的定义及实现详解编程语言
  8. 然后我们进入了增强实现的元素tab页,点击修改按键,进入修改模式.Implementation is active如果勾选上,则该实现如果复合条件就会在运行时被调用

  9. 第四代增强 NEW BADI的定义及实现详解编程语言

  10.  双击implementing class,双击对应的方法即可修改对应方法了.

    第四代增强 NEW BADI的定义及实现详解编程语言

  11. 如果Badi具有筛选器,则双击Filter values,添加筛选值.

  12. 第四代增强 NEW BADI的定义及实现详解编程语言
  13.  以上一个常规的New badi实现就完成了.

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/20243.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论