2017-04-27 86 views
2

我正在開發一個DO ... WHILE內使用PSM的BAPIABAP:與更新 - 之間提交讀 - BAPI

  1. FM_FUNDS_CTR_CHANGE_NO_SCREEN
  2. FM_FICTR_READ_SINGLE

的ABAP報告。

在第一次迭代中,我使用BAPI(1)更新基金中心。在稍後的迭代中,我需要使用BAPI(2)再次閱讀基金中心。

問題是:在後面的迭代中,我仍然得到基金中心的舊數據。不考慮使用BAPI(1)更改的數據。一旦程序完成後,數據就會正確更新 - 在稍後的程序執行過程中會出現更新的數據。我試過兩個的BAPI之間犯的幾個選項:

  • 使用BAPI參數i_flg_commit(也與 「SET UPDATE TASK LOCAL」 之前BAPI調用
  • COMMIT WORK
  • COMMIT工作和等待
  • 功能模塊BAPI_TRANSACTION_COMMIT
  • COMMIT的工作,然後等待長達10秒

不幸的是,所有這些共同的命令幫助。我嘗試了幾種他們的組合。有沒有人有想法,爲什麼會出現這個問題?

下面的代碼片段:

" 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 
    [...] 
. 

預先感謝您! Jonathan

回答

3

正如我所看到的FM_FICTR_READ_SINGLE將讀取的數據存儲在表單中的靜態內。我看不到清爽的清理方法,這意味着如果一次讀取它在程序運行中不會改變。

看着功能組,我在那裏看到FM_FICTR_READ_MULTIPLE FM。在那裏我看不到緩存,你可以嘗試一下,只在參數中傳遞一個對象。

我在哪裏查過,EA-PS是在617/05版本。

+0

謝謝!這有幫助! – Jonathan