天天看点

为什么ABAP里有些场景必须加上COMMIT WORK才生效

Sent: Friday, November 29, 2013 7:44 PM

Subject: RE: 关于content management的commit work

我找到我们social post和service request behavior 不一致的原因了。

问题就出在红色的这个FM我们没有enhance:

为什么ABAP里有些场景必须加上COMMIT WORK才生效

它会判断当前的BO在DB是否存在,根据结果决定是否需要一个显式的commit:

为什么ABAP里有些场景必须加上COMMIT WORK才生效

我们的socialpost落到了WHEN OTHERS里,因为也不是social post,所以就默认为ev_exist = false. 所以总是需要显式call commit work 才能真正删除掉link。

为什么ABAP里有些场景必须加上COMMIT WORK才生效

所以我们要么enhance上面那个FM,要么继续在我们的code里使用COMMIT WORK

我之前测试的时候也是hard code成service request 的BOR: BUS2000223

你的util class写死的删CRMSOCPOST, 你删service request的时候在 debugger里面动态改成service request的BOR type么? 是什么?

我删service request是直接run util class删的,可以删掉

为什么ABAP里有些场景必须加上COMMIT WORK才生效

From: Wang, Jerry

Sent: Friday, November 29, 2013 4:25 PM

你删service request的attachment也是在report里删,但是没用commit work,也一样能删掉?? 我觉得不可能。我正在看代码

From: 黄忠

Sent: Friday, November 29, 2013 4:23 PM

我在删的时候需要像下面这样,call完util class以后commit work, 不然删不掉

Sent: Friday, November 29, 2013 4:14 PM

这只是create的case。我稍后会看Max说的delete的case。

我直接创建document的时候,是在一个test report里面做的,如果没有加commit work,document创建了之后就get不到,加上才work。

Host BO 和其attachment的relationshi是通过 GOS 维护的。

为什么ABAP里有些场景必须加上COMMIT WORK才生效

只有代码里出现COMMIT WORK, GOS的方法才会在新的update process里被触发。要debug必须打开update debugging。

为什么ABAP里有些场景必须加上COMMIT WORK才生效

真正的link是在这里存的,如果没有commit work,这些代码都不会被执行到:

为什么ABAP里有些场景必须加上COMMIT WORK才生效

IC 点了end button存BO和interaction的link,也是用的类似的办法,由application call 一个commit,会trigger Genil的框架执行一次commit work。

为什么ABAP里有些场景必须加上COMMIT WORK才生效

继续阅读