在当前LUW中,当一个表已经被改变,但还没有提交时,是否可以检索它的旧值或原始值?
我正在实现一个BAdI,这个BAdI应该是用来根据对对象的更改而发出消息的,但是SAP实际上并没有在BAdI中提供原始的对象数据。试图用 SELECT
语句不工作,因为在那个时候,待定的更改已经被应用,只是没有提交。
如果我调试代码,我可以看到旧的值在 SE16
但似乎未提交的更改值被任何的 SELECTs
我在这个BAdI中执行。
有什么方法可以读取这些原始数据吗?
在同一个数据库LUW期间,读取之前更新过的表,总是会返回更新后的值。所以,至少需要从另一个数据库LUW中读取表。
读取表的过程中,在同一个数据库LUW中,总是会返回更新后的值。隔离度 的默认使用取决于您使用的数据库类型。对于HANA和Oracle,默认使用 "committed read",但其他数据库默认使用 "uncommitted read"。
如果不使用HANAOracle,可以通过调用函数模块DB_SET_ISOLATION_LEVEL来临时切换到 "committed read "隔离级别。
然后,可以从另一个数据库LUW中读取表,通过用 服务连接 前缀为R3*),例如。SELECT ... FROM yourtable ... CONNECTION ('R/3*temp') ...