BOBF:io_modify-> create(" node B")似乎不触发节点B" CREATE"确定

2020-09-26 13:34发布

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

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


您好BOPF开发人员,

正如@oliverjaegle在他的出色文章中所建议的那样,我们将业务代码分成小段,并将无状态调用放入节点确定中。

我的情况是:

-在确定代码A中,为节点B创建了一个新的瞬态节点实例。 对于节点B,在创建(det_B)时有一个AFTER_MODIFY。 如果我使用BOBT创建B实例,则插入可以正常工作并调用我的EXECUTE。 但是det_A代码中的io_modify-> create(" node B")却没有。

在END_MODIFY(/BOBF/CL_FRW_INT_ACCESS)中,iv_internal_modify为true,这可以防止在DO_MODIFY(/BOBF/CL_FRW)中调用do_detval(...)。

这很可悲,因为我不喜欢将det_B的代码放在det_A中

任何建议避免这种"内部修改"并获得所有确定的建议?
我试图在没有运气的det_A末尾调用end_modify()...

谢谢,
马蒂亚斯

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

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


您好BOPF开发人员,

正如@oliverjaegle在他的出色文章中所建议的那样,我们将业务代码分成小段,并将无状态调用放入节点确定中。

我的情况是:

-在确定代码A中,为节点B创建了一个新的瞬态节点实例。 对于节点B,在创建(det_B)时有一个AFTER_MODIFY。 如果我使用BOBT创建B实例,则插入可以正常工作并调用我的EXECUTE。 但是det_A代码中的io_modify-> create(" node B")却没有。

在END_MODIFY(/BOBF/CL_FRW_INT_ACCESS)中,iv_internal_modify为true,这可以防止在DO_MODIFY(/BOBF/CL_FRW)中调用do_detval(...)。

这很可悲,因为我不喜欢将det_B的代码放在det_A中

任何建议避免这种"内部修改"并获得所有确定的建议?
我试图在没有运气的det_A末尾调用end_modify()...

谢谢,
马蒂亚斯

付费偷看设置
发送
2条回答
黑丝骑士
1楼-- · 2020-09-26 14:21

你好,马蒂亚斯,

调用end_modify(iv_process_immediately = abap_true)不仅将更改应用于缓冲区,还调用任何确定和验证。 否则,只有在BOPF完成您的操作处理后,才能进行确定和确认。

亲切的问候,

Ivo

wang628962
2楼-- · 2020-09-26 14:20

您好,Matthias,

我了解您是通过确定模式"瞬时节点的派生实例"来创建瞬时节点的实例的。 您的确定使用io_modify-> create()在按关联检索(RBA)调用期间创建那些实例。 这不会导致执行另一个在"创建"时触发的确定。

要了解这种现象,必须注意,在RBA期间隐式创建瞬态实例并不算作新实例的创建。 而是将其解释为对实例的检索,该实例存储在BOPF的直接访问范围之外。 因此,BOPF有意不对此节点执行"创建"确定。

第二个观察结果(" set_application_error")的解释与此类似:BOPF通常不允许在只读操作(例如RBA)期间进行任何数据修改。 这就是为什么您不能创建非瞬态节点实例的原因。

如果能够在RETRIEVE调用期间创建持久性实例,则可能会使大多数使用者感到困惑(请注意,可能有一些通用的框架在消耗BOPF BO,而您可能无法控制它们)。 如果重复的读取访问具有操作数据的副作用,那将是奇怪的。 因此,我认为您应该重新考虑您的设计。

亲切的问候,

伊沃(Ivo)

一周热门 更多>