尽管提交,但数据似乎未在 Update 和 Read 之间更新
Data seems not updated between Update and Read despite commit
我正在使用 PSM BAPI 开发 ABAP 报告
- FM_FUNDS_CTR_CHANGE_NO_SCREEN
- FM_FICTR_READ_SINGLE
在 DO ... WHILE 内。
在第一次迭代中,我使用 BAPI (1) 更新资金中心。在以后的迭代中,我需要使用 BAPI (2) 再次读取资金中心。
问题是:在后面的迭代中,我仍然得到资金中心的旧数据。不考虑使用 BAPI (1) 更改的数据。一旦程序完成,数据就会正确更新——在稍后的程序执行中,更新的数据会出现。我尝试了几种在两个 BAPI 之间提交的选项:
- 使用 BAPI 参数 i_flg_commit(也在 BAPI 调用之前使用 "SET UPDATE TASK LOCAL"
- 提交工作
- 提交工作并等待
- 功能模块BAPI_TRANSACTION_COMMIT
- 提交工作,然后最多等待 10 秒
不幸的是,none 这些命令有所帮助。我也尝试了它们的几种组合。有谁知道为什么会出现这个问题?
这里是一段代码:
" Tried with and without this one
" SET UPDATE TASK LOCAL.
CALL FUNCTION 'FM_FUNDS_CTR_CHANGE_NO_SCREEN'
EXPORTING
I_FIKRS = gv_fikrs
I_FISTL = gv_fictr
IT_FUNDS_CTR = lt_fistl
IT_FUNDS_CTR_TEXT = lt_fistl_t
IT_FUNDS_CTR_HISV = lt_fistl_h
I_FLG_TEST = pa_test
I_FLG_COMMIT = 'X' "Tried with and without this one
IMPORTING
ET_MESSAGES = lt_return
EXCEPTIONS
[...]
.
" Several commit options tried
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
" COMMIT WORK.
" COMMIT WORK AND WAIT.
" WAIT UP TO 10 SECONDS.
CALL FUNCTION 'FM_FICTR_READ_SINGLE'
EXPORTING
I_FIKRS = gv_fikrs
I_FICTR = gv_fictr
I_FLAG_TEXT = 'X'
I_FLAG_HIER = 'X'
I_LANGUAGE = c_spras
I_DATE = sy-datum
IMPORTING
E_F_FMFCTR = ls_current_fistl
E_F_FMFCTRT = ls_current_fistl_t
E_F_FMHISV = ls_current_fistl_h
EXCEPTIONS
[...]
.
提前致谢!
乔纳森
如我所见,FM_FICTR_READ_SINGLE
将读取的数据存储在表单内的静态中。我看不到可用的刷新清除方法,这意味着一旦读取它就不会在程序中更改 运行。
查看了功能组,我在那里看到 FM_FICTR_READ_MULTIPLE
FM。那里我没有看到缓存,你可以试试,在参数中只传递一个对象。
我查过,EA-PS 是 617/05 版本。
我正在使用 PSM BAPI 开发 ABAP 报告
- FM_FUNDS_CTR_CHANGE_NO_SCREEN
- FM_FICTR_READ_SINGLE
在 DO ... WHILE 内。
在第一次迭代中,我使用 BAPI (1) 更新资金中心。在以后的迭代中,我需要使用 BAPI (2) 再次读取资金中心。
问题是:在后面的迭代中,我仍然得到资金中心的旧数据。不考虑使用 BAPI (1) 更改的数据。一旦程序完成,数据就会正确更新——在稍后的程序执行中,更新的数据会出现。我尝试了几种在两个 BAPI 之间提交的选项:
- 使用 BAPI 参数 i_flg_commit(也在 BAPI 调用之前使用 "SET UPDATE TASK LOCAL"
- 提交工作
- 提交工作并等待
- 功能模块BAPI_TRANSACTION_COMMIT
- 提交工作,然后最多等待 10 秒
不幸的是,none 这些命令有所帮助。我也尝试了它们的几种组合。有谁知道为什么会出现这个问题?
这里是一段代码:
" Tried with and without this one
" SET UPDATE TASK LOCAL.
CALL FUNCTION 'FM_FUNDS_CTR_CHANGE_NO_SCREEN'
EXPORTING
I_FIKRS = gv_fikrs
I_FISTL = gv_fictr
IT_FUNDS_CTR = lt_fistl
IT_FUNDS_CTR_TEXT = lt_fistl_t
IT_FUNDS_CTR_HISV = lt_fistl_h
I_FLG_TEST = pa_test
I_FLG_COMMIT = 'X' "Tried with and without this one
IMPORTING
ET_MESSAGES = lt_return
EXCEPTIONS
[...]
.
" Several commit options tried
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
" COMMIT WORK.
" COMMIT WORK AND WAIT.
" WAIT UP TO 10 SECONDS.
CALL FUNCTION 'FM_FICTR_READ_SINGLE'
EXPORTING
I_FIKRS = gv_fikrs
I_FICTR = gv_fictr
I_FLAG_TEXT = 'X'
I_FLAG_HIER = 'X'
I_LANGUAGE = c_spras
I_DATE = sy-datum
IMPORTING
E_F_FMFCTR = ls_current_fistl
E_F_FMFCTRT = ls_current_fistl_t
E_F_FMHISV = ls_current_fistl_h
EXCEPTIONS
[...]
.
提前致谢! 乔纳森
如我所见,FM_FICTR_READ_SINGLE
将读取的数据存储在表单内的静态中。我看不到可用的刷新清除方法,这意味着一旦读取它就不会在程序中更改 运行。
查看了功能组,我在那里看到 FM_FICTR_READ_MULTIPLE
FM。那里我没有看到缓存,你可以试试,在参数中只传递一个对象。
我查过,EA-PS 是 617/05 版本。