ABAP:更新和读取BAPI之间的提交

时间:2017-04-27 07:05:40

标签: sap abap bapi

我正在使用PSM BAPI开发ABAP报告

  1. FM_FUNDS_CTR_CHANGE_NO_SCREEN
  2. FM_FICTR_READ_SINGLE
  3. 在......内......

    在第一次迭代中,我使用BAPI(1)更新资金中心。在稍后的迭代中,我需要使用BAPI(2)再次阅读基金中心。

    问题是:在后来的迭代中,我仍然得到基金中心的旧数据。使用BAPI(1)更改的数据不予考虑。程序完成后,数据会正确更新 - 在以后的程序执行中,会出现更新的数据。我在两个BAPI之间尝试了几种提交方式:

    • 使用BAPI参数i_flg_commit(同时使用" SET UPDATE TASK LOCAL"在BAPI呼叫之前
    • COMMIT WORK
    • 委托工作和等待
    • 功能模块BAPI_TRANSACTION_COMMIT
    • COMMIT WORK,然后等待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
        [...]
    .
    

    提前谢谢! 乔纳森

1 个答案:

答案 0 :(得分:3)

我看到" "将读取数据存储在表单内的静态中。我看不到可用的刷新清除方法,这意味着如果一旦读取它就不会在程序运行中被更改。

查看功能组,我看到=IF(ISNUMBER(SEARCH(substring;"WOW")); "Yes"; "No") FM。在那里我看不到缓存,你可以试试,只在参数中传递一个对象。

我查看的地方,EA-PS的版本是617/05。