点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
专家们,我已经签入
http://help.sap.com/saphelp_nw04s/helpdata/en/ee /6f3b42ea85b26be10000000a155106/content.htm
上面的链接说明了经典和新巴迪舞曲之间的区别。
但是有很多困惑。
第1点:
对于经典BAdI,将通过调用工厂方法来创建BAdI对象,并通过BAdI接口类型的引用变量对其进行引用。
对于新的BAdI,将通过ABAP语句GET BADI创建BAdI对象,作为BAdI方法调用的句柄,并通过BAdI类型的引用变量进行引用。
BAdI对象是内部BAdI类的实例,否则该类对外部不可见。
当两个badis都被badi的refrence变量刷新时,有什么意义? 请解释。
`点2:
使用传统的BAdI,筛选器值存储在结构中,并通过BAdI方法的调用传递。
b。 使用新的BAdI,当使用GET BADI语句创建BAdI对象时,便会传递用于搜索实现的过滤器的比较值。
无法将工厂方法的调用一对一迁移到ABAP语句中,因为GET BADI还可以返回现有的BAdI对象,而这对于工厂方法是不可能的。
任何一个人都能用一个简单的例子来解释这个问题。
第3点:
。 经典BAdI只能调用一次,并且呼叫位置可以集中记录。
使用新的BAdI,可以进行多个呼叫,并且呼叫位置不会集中记录。
由于上述原因,无法进行自动呼叫迁移。
按中心注册是什么意思?
请帮助专家...
C
W
消息的编辑者:Suhas Saha
Dhruvin嗨
1- BADI的引用变量仅引用新的BADI。 BADI的"接口"引用了经典的BADI(可以在se18看到)。 这里的``接口''与OOP概念的接口(f.e.ZIF_EX_BADI1)具有相同的含义。 您可以使用SE24查看经典BADI界面的详细信息。 在OOP中,您不能直接使用接口,因此需要适配器类(例如ZCL_IM_BADI1)。
但是在使用新的BADI时,您不会使用"接口"名称实例化,而是使用GET BADI来实例化BADI的名称。 该语句创建BADI的实例(实际上是BADI的实现类?),程序使用该类来调用相关方法。 因此,您不需要适配器类即可使用新的BADI。 因此,这是性能优势。
2-新的BADI提供了一种方法来分离与您无关的实现:过滤器。
F.e。 您定义的BADI方法会根据国家/地区代码而有所不同。如果为BADI创建国家/地区过滤器,则无需将所有实现分发到所有国家/地区。 使用相关国家/地区代码过滤器来创建不同的实现,并在每个国家/地区仅部署一个实现。 您的代码之所以有效,是因为您可以在程序中使用带有国家/地区过滤器的GET BADI语句。(假设您的程序知道运行在哪个国家/地区)
使用经典的BADI,您应该为此方法添加一个参数,并开发其中的所有实现,然后将此大实现部署到所有国家/地区。
3-应该使用增强点来定义新的BADI。我不确定,但是不能在不同的地方使用一个增强点。我认为新的BADI也要集中注册。我很困惑。.
我经验不足,但是新的BADI带来了概念上的变化。对于开发人员来说,变化不多。
希望它会有所帮助。
经典BAdI调用:
DATA:bd TYPE REFTOif_intf。
DATA:flt TYPE flt。
CALLMETHODcl_exithandler => get_instance
导出
exit_name = BADI_NAME`
更改
instance = bd。
flt-lang =`D`。
调用方法bd->方法
导出
x = 10
flt_val = flt。
通过代理类重定向呼叫。
新BAdI
p>
数据bd类型refto badi_name。
获取badi bdfilters lang =`D`。
调用badi bd->方法
exportingx = 10 。
选择是在请求句柄时发生的。
直接调用实现(没有代理)会减少耗时
古典巴迪:
a。 在经典的badi中创建对象将引用Badi接口
b。 我们不会为古典巴迪舞增色。
c。 如果是过滤器,我们只取一个字段,不能组合
d。 后备类不存在(如果没有活动的实现巴纳尔:
a。 在经典的badi中创建对象,我们使用get badi
b。 我们为这个巴迪创造了增强点
c。 如果是过滤器,我们可以使用字段组合
d。 如果没有有效的实现,可以执行fallback类您好@Basavaraj kusoji,谢谢您的回答:)
这个问题是6年前提出的! 很高兴看到SCN仍然像其他日子一样活跃!
BR
Dhruvin
一周热门 更多>