经典和内核Badis的混乱

2020-09-01 18:55发布

         点击此处--->   EasySAP.com群内免费提供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

         点击此处--->   EasySAP.com群内免费提供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

付费偷看设置
发送
4条回答
土豆飞人
1楼-- · 2020-09-01 19:59

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带来了概念上的变化。对于开发人员来说,变化不多。

希望它会有所帮助。

派大星 ヾ
2楼-- · 2020-09-01 19:42

经典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

数据bd类型refto badi_name。

获取badi bdfilters lang =`D`。

调用badi bd->方法

exportingx = 10 。

选择是在请求句柄时发生的。

直接调用实现(没有代理)会减少耗时

葫芦娃快救爷爷
3楼-- · 2020-09-01 19:58

古典巴迪:

a。 在经典的badi中创建对象将引用Badi接口

b。 我们不会为古典巴迪舞增色。

c。 如果是过滤器,我们只取一个字段,不能组合

d。 后备类不存在(如果没有活动的实现

巴纳尔:

a。 在经典的badi中创建对象,我们使用get badi

b。 我们为这个巴迪创造了增强点

c。 如果是过滤器,我们可以使用字段组合

d。 如果没有有效的实现,可以执行fallback类

三十六小时_GS
4楼-- · 2020-09-01 19:35

您好@Basavaraj kusoji,谢谢您的回答:)

这个问题是6年前提出的! 很高兴看到SCN仍然像其他日子一样活跃!

BR

Dhruvin

一周热门 更多>