不同调用实例的实例更新属性

2020-09-15 02:15发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


该问题正在SAP BPC的Badi开发环境中发生。

在Badi可以开发代码的方法中,我们使用了exising

标准SAP类(CL_UJO_WRITE_BACK)可将数据保存到

数据库。 我们创建该类的实例,然后调用传递一些信息的方法

参数。 在该方法中,将更新类的属性。 不知何故

还会更新调用实例的属性。

我将再次示意地解释这一点:

X类,实例Xa

实例Xa拥有属性y

实例Xa调用调用Badi的方法。

在Badi方法中,实例Xb创建为

同一班。 属性y用

方法更新

实例Xb。 不知何故,它也会更新属性y

实例Xa。

这是Abap对象的正常行为吗?

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


该问题正在SAP BPC的Badi开发环境中发生。

在Badi可以开发代码的方法中,我们使用了exising

标准SAP类(CL_UJO_WRITE_BACK)可将数据保存到

数据库。 我们创建该类的实例,然后调用传递一些信息的方法

参数。 在该方法中,将更新类的属性。 不知何故

还会更新调用实例的属性。

我将再次示意地解释这一点:

X类,实例Xa

实例Xa拥有属性y

实例Xa调用调用Badi的方法。

在Badi方法中,实例Xb创建为

同一班。 属性y用

方法更新

实例Xb。 不知何故,它也会更新属性y

实例Xa。

这是Abap对象的正常行为吗?

付费偷看设置
发送
8条回答
Nan4612
1楼 · 2020-09-15 02:34.采纳回答

按文档所述工作。

https://帮助。 sap.com/doc/abapdocu_752_index_htm/7.52/zh-CN/abapprivate.htm?file=abapprivate.htm

ABAP对象的最小封装单位是类,而不是对象。

95年老男孩
2楼-- · 2020-09-15 02:35

每个实例都可以更改X类实例的私有属性。 X类的其他实例。

啊,现在我明白你的意思了。 抱歉造成误会。

 CLASS lcl_x定义创建公共。
   公共部分。
     数据状态TYPE字符串为只读。
     方法:
       构造函数
       主要。
   受保护的部分。
   专用部分。
     数据:输出TYPE REF TO if_demo_output。
     方法:call_badi。
 ENDCLASS。

 类别lcl_x实施。
   METHOD构造函数。
     我->输出= cl_demo_output => new()。
     me-> state = |初始状态|。
     me-> output-> write(|当前状态:" {me-> state}" |)。
   终结法。
   方法call_badi。
     DATA(xb)=新的lcl_x()。
     xb-> state = |更改了BAdI |。
     me-> output-> write(|新实例的状态:" {xb-> state}" |)。
    
     声明我->状态<> xb->状态。  " <<<这是我所违反的意思>>>
   终结法。
   方法主要。
     我-> call_badi()。
     me-> output-> write(|当前状态:" {me-> state}" |)。
     我->输出->显示()。
   终结法。
 ENDCLASS。
 选择开始。
   新的lcl_x()-> main()。
 

当我说

这是不正确的,除非:

  • 属性是静态的,或者
  • X类的实例相同,即X类是单例!

这就是我的意思-

设置我的状态->状态<> xb->状态。

我希望这可以澄清误会。

无论如何,我发现了另一个有趣的线程-> https://archive.sap .com/discussions/thread/3482419

一周热门 更多>