在当前 LUW 中,当表已更改但尚未提交时,是否可以检索表的旧值或原始值?
我正在实现一个 BAdI,它应该用于根据对对象执行的更改来引发消息,但 SAP 实际上并没有在 BAdI 中提供原始对象数据。尝试使用SELECT
语句读取数据不起作用,因为此时已经应用了挂起的更改,只是没有提交。
如果我调试代码,我可以在其中看到旧值,SE16
但似乎未提交的更改值正在由SELECTs
我在此 BAdI 中执行的任何操作返回。
有没有办法读取这些原始数据?
在同一个数据库 LUW 期间读取先前更新的表将始终返回更新的值。因此,至少需要从另一个数据库 LUW 中读取表。
默认使用的隔离级别取决于您使用的数据库类型。对于HANA和Oracle,“committed read”是默认的,但其他数据库默认使用“uncommitted read”。
如果不使用HANA/Oracle,可以通过调用函数模块DB_SET_ISOLATION_LEVEL暂时切换到“committed read”隔离级别。
然后,您可以使用服务连接(前缀为 R/3*)从另一个数据库 LUW 中读取表,例如:SELECT ... FROM yourtable ... CONNECTION ('R/3*temp') ...