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