第四代增强 NEW BADI的定义及实现详解编程语言
编程语言 实现 详解 定义 增强 New 第四代 BADI
2023-06-13 09:11:52 时间
NEW BADI 是在第四代增强框架下创建的BADI,是相对于第三代增强Classic Badi 而言的.
根据第四代增强的基本概念,所有显式增强Enhancement options 都必须放在增强点中.New Badi 作为显示增强的一种,也必须放在增强点中.
Classic badi 是可以直接创建的.
New Badi 的创建
创建增强点:T_code SE18.或者SE80 输入新创建的增强点名称,点击创建按键 增强点是有类型的,通过se18创建的增强点默认类型是Badi Definition (Object Plug-in (BAdI)),且不可以更改.其不可用于soucecode enhance. 之后进入增强点修改界面的增强元素定义界面. 点击Create按键,输入一个Badi名称和短描述 双击Badi名称,进入Badi属性界面 Multiple Use:是否可以多次使用. 如果不可以多次使用.如何没有使用FILTER ,则同时只能有一个实现是运行时激活的.如果具有Filter,则无论有几个符合Filter的实现,系统也只会执行一个. Limited filter use 如果被勾选,则该Badi 只能有一个Filter field,必须有一个过滤组合filter combination在Badi实现中指定.且Filter 值在badi实现中比较时只能用 = 号. 展开刚建立的BADI,双击INTERFAC.指定Badi接口的名称.如果该接口还不存在可以双击创建 如果Badi的 multiple use 被勾选,则接口方法的参数不能为retruning ,exporting类型. 可以点击创建badi子项目按键或者右击,增加Filter,Fcode增强,屏幕增强.如果增加Filter则会弹出如下对话框;如果选择了filtercheck 为Automatically by dictionary则需要填写一个有固定值或者值表的数据元素或域.
如果添加屏幕增强,则会弹出如下对话框:需要填写要增强的程序名,主屏幕屏幕名称及主屏幕下的子屏幕区域名称.
如过要添加Fcode增强,则会弹出如下对话框.只有不可重复使用的没有过滤器的badi才可以创建Fcode增强.另外,填写的程序必须有菜单栏.填写的Fcode必须以+开头,且在菜单栏上已经存在.
至此新建New Badi的工作已经完成.Badi是要在程序中调用的.那么如果在程序总调用badi呢.
在程序中定义一个类型为Badi名称或者CL_BADI_BASE的参考变量 在需要的位置按照如下语法(get badi) 获取参考变量的实例,FILTERS 后边必须包含该Badi的所有过滤器Filter. GET BADI { badi [FILTERS f1 = x1 f2 = x2 ] }
| { badi TYPE (name)
[ {FILTERS f1 = x1 f2 = x2 }
| {FILTER-TABLE ftab}] }
[CONTEXT con]. 此时系统会产生一个父类为cl_badi_base 的实例,其中参数imps包含了该Badi所有符合条件的实现的的类的实例. 按照如下语法调用Badi的方法.系统会一次调用符合条件的所有实现的实例方法 CALL BADI { badi- meth parameter_list }
| { badi- (meth_name) {parameter_list
|parameter_tables} }. 简单样例如下:
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.
SE18进入增强点,在增强点的增强元素定义界面右键点击Badi,选择创建Badi实现. 此时弹出增强实现创建或选择界面.如在4代增强概念中锁说,显式增强元素需要增强点做为容器,增强实现也需要自己的容器即增强实现.如果创建需要输入名称及短描述.复合增强实现可选. 选择完增强实现后就进入了Badi实现的定义弹窗中.输入Badi实现的名称即实现类的名称,继续.
然后我们进入了增强实现的元素tab页,点击修改按键,进入修改模式.Implementation is active如果勾选上,则该实现如果复合条件就会在运行时被调用
原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/20243.html
cjava相关文章
- python实现一个简单的2048游戏详解编程语言
- jQuery实现发送短信验证码后60秒倒计时详解编程语言
- jquery实现返回顶部效果详解编程语言
- 实现HTML编码和解码的JavaScript工具类详解编程语言
- java实现双向链表详解编程语言
- Java实现敏感词检测的代码详解编程语言
- java实现MD5加密算法详解编程语言
- Java压缩或解压文件实现详解编程语言
- Vue数据双向绑定原理及简单实现详解编程语言
- JQ实现情人节表白程序详解编程语言
- c:forEach 实现换行详解编程语言
- 如何通过js实现图片轮播效果详解编程语言
- Spring Cloud分布式微服务系统中利用redssion实现分布式锁详解编程语言
- SpingMVC实现集合参数(Could not instantiate bean class [java.util.List])详解编程语言
- 自写脚本实现上线前本地批量压缩混淆 js , css 代码。详解编程语言
- java基于redis事务的秒杀实现详解编程语言
- 前端自定义搜索框实现详解编程语言
- javascript实现每秒执行一次的方法详解编程语言
- php实现文件与16进制相互转换详解编程语言