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

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

Classic badi 是可以直接创建的.

New Badi 的创建

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

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

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

  16. 至此新建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. 按照如下语法调用Badi的方法.系统会一次调用符合条件的所有实现的实例方法
  6. CALL BADI { badi->meth         parameter_list }
            | { badi->(meth_name) {parameter_list
                                  |parameter_tables} }.
  7. 简单样例如下:
  8. DATA gr_newbadi TYPE REF TO  zbadi_get_ad.
    GET BADI gr_newbadi FILTERS bukrs = ''.
    CALL BADI gr_newbadi->add
    EXPORTING
    i =
    IMPORTING
    result = DATA(gv_result).

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

创建Badi的实现

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

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

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

  7. 以上一个常规的New badi实现就完成了.

第四代增强 NEW BADI的定义及实现的更多相关文章

  1. SAP 第四代增强-BTE

    第四代BTE实例详解:http://blog.csdn.net/wbin9752/article/details/7954922 第三代增强(BADI实例详解) :http://blog.csdn.n ...

  2. 第四代增强 源代码增强(ABAP Source Code Enhancements)

    显式代码增强的创建 se38打开你要增强的程序 进入编辑状态 在菜单栏选择: Edit->Enhancement Opreations->Create option. 此时弹出Create ...

  3. BADI FCODE(菜单) 增强

    菜单增强功能只能用于非依赖于过滤器的一次性BADI(不是多用途的). 目前,菜单增强功能只能与程序增强功能(界面)一起创建. 定义一个没有过滤器的一次性增强 2.Classic Badi在FCODE ...

  4. [SAP ABAP开发技术总结]增强Enhancement

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  5. SAP增强Enhancement

    第一代:基于源码增强(子过程subroutine) 第一代增强基于源代码,是SAP提供的一个空代码的子过程.在这个子过程中用户可以添加自己的代码,控制自己的需求.这类增强集中在一些文件名倒数第二个字符 ...

  6. SAP 增强-出口选找方法-全部

    ■ SAP 中如何寻找增强 方法一:利用TCODE寻找增强(第二代的增强) 执行一个程序(源代码后附),在选择屏幕处输入你所需要增强的程序TCODE,执行後,就会出现一个列表,那里就有关于如何增强这个 ...

  7. Classic BADI总结

    这里对sap Classic Badi 做一下总结,虽然已经是过时的技术了. Classic BADI的创建 Classic BADI的实施 Classic BADI的调用及运行原理 New BADI ...

  8. Spring配置AOP实现定义切入点和织入增强

    XML里的id=””记得全小写 经过AOP的配置后,可以切入日志功能.访问切入.事务管理.性能监测等功能. 首先实现这个织入增强需要的jar包,除了常用的 com.springsource.org.a ...

  9. SAP模块常用增强总结{转载}

    MM模块: 采购订单增强: BADI :ME_GUI_PO_CUST ME_PROCESS_PO_CUST 物料凭证增强: BADI:MB_DOCUMENT_BADI USER-EXIT:MBCF00 ...

随机推荐

  1. CF821E(多次矩阵快速幂)

    题意: 冈伦从二维平面上(0,0)走到(k,0),(k<=1e18),每次有三个行动方向:右上一格.右方一格.右下一格,问一共有多少种走的方案 限制:每段x都有一个天花板,一共有n段天花板(n& ...

  2. Javascript标准事件模型

    本文为原创,转载请注明出处: cnzt       文章:cnzt-p http://www.cnblogs.com/zt-blog/p/6676913.html 1. 分类 IE -- 冒泡型 现代 ...

  3. 信号量学习 & 共享内存同步

    刚刚这篇文章学习了共享内存:http://www.cnblogs.com/charlesblc/p/6142139.html 里面也提到了共享内存,自己不进行同步,需要其他手段比如信号量来进行.那么现 ...

  4. Use JavaScript to Export Your Data as CSV

    原文: http://halistechnology.com/2015/05/28/use-javascript-to-export-your-data-as-csv/ --------------- ...

  5. Guava ---- Concurrent并发

    Guava在JDK1.5的基础上, 对并发包进行扩展. 有一些是易用性的扩展(如Monitor). 有一些是功能的完好(如ListenableFuture). 再加上一些函数式编程的特性, 使并发包的 ...

  6. 到底该不该使用存储过程 MySQL查询性能优化一则

    到底该不该使用存储过程   看到<阿里巴巴java编码规范>有这样一条 关于这条规范,我说说我个人的看法 用不用存储过程要视所使用的数据库和业务场景而定的,不能因为阿里巴巴的技术牛逼,就视 ...

  7. TCP Operational Overview and the TCP Finite State Machine (FSM) http://tcpipguide.com/free/t_TCPOperationalOverviewandtheTCPFiniteStateMachineF.htm

    http://tcpipguide.com/free/t_TCPOperationalOverviewandtheTCPFiniteStateMachineF.htm   http://tcpipgu ...

  8. Delphi汉字简繁体转换代码(分为D7和D2010版本)

    //delphi 7 Delphi汉字简繁体转换代码unit ChineseCharactersConvert; interface uses   Classes, Windows; type   T ...

  9. BZOJ1016 &amp;&amp; JSOI2008] 最小生成树计数

    题目链接:id=1016">点击打开链接 裸题 #pragma comment(linker, "/STACK:1024000000,1024000000") #i ...

  10. 全局Timestamp管理器 检测js执行时间

    随手写了个小工具,主要为了测试不同混淆程度的javascript脚本的加载速度1. [代码]Timestamp.js (function() { if (typeof this.Timestamp = ...