SAP ABAP开发技巧-关于FPM开发的缓存数据BUFFER_DATA应用的简单总结

文章讲述了在RERCS功能页面中,如何通过新增的缓存更新方法MODIFY_BOPF_BUFFER和读取方法READ_BOPF_BUFFER来确保业务数据修改后的实时同步,防止BOPFRoot节点数据异常,保持前后端数据一致性。
摘要由CSDN通过智能技术生成

业务场景:RE RCS功能页面,业务数据修改后无法同步都BOPF的Root节点,导致保存的数据异常

1、Feeder Class对应类新增缓存数据更新方法MODIFY_BOPF_BUFFER(方法名仅作为例子)

开发建议:存在页面数据修改的地方建议调用方法MODIFY_BOPF_BUFFER,一般在统一修改完成的代码最后调用此方法,实现一次更新所有修改的数据到缓存buff_data。

例子:选择订单后带出对应数据填写至页面字段,并更新buff_data

在这里插入图片描述

代码例子仅供参考

  METHOD modify_bopf_buffer.
    DATA: lo_fpm     TYPE REF TO if_fpm,
          lo_srv_mgr TYPE REF TO /bobf/if_tra_service_manager,
          lo_message TYPE REF TO /bobf/if_frw_message,
          lo_change  TYPE REF TO /bobf/if_tra_change.
    DATA: lt_modify   TYPE /bobf/t_frw_modification,
          ls_modify   TYPE /bobf/s_frw_modification,
          lt_key      TYPE /bobf/t_frw_key,
          ls_key      TYPE /bobf/s_frw_key,
          lt_selected TYPE zrre_t_bp_type_k,
          lt_message  TYPE /bobf/t_frw_message_k,
          ls_message  TYPE /bobf/s_frw_message_k.
    DATA: lr_data   TYPE REF TO data,
          lr_bank   TYPE REF TO data,
          lr_ten    TYPE REF TO data,
          lr_db_key TYPE RANGE OF /bobf/conf_key.
    DATA: lv_act_key TYPE   /bobf/act_key.
    FIELD-SYMBOLS: <fs_data> TYPE zrre_s_bp_k.

    lo_fpm ?= cl_fpm_factory=>get_instance( ).
    lo_srv_mgr = /bobf/cl_tra_serv_mgr_factory=>get_service_manager( zrre_if_bp_c=>sc_bo_key ).

    CREATE DATA lr_data TYPE zrre_s_bp_k.
    ASSIGN lr_data->* TO <fs_data>.
    MOVE-CORRESPONDING cs_data TO <fs_data>.


    <fs_data>-lchg_uname = sy-uname.
    <fs_data>-lchg_date = sy-datum.
    <fs_data>-lchg_time = sy-uzeit.

    ls_modify-key = <fs_data>-key.
    ls_modify-node = zrre_if_bp_c=>sc_node-root .
    ls_modify-change_mode = /bobf/if_frw_c=>sc_modify_update.
    ls_modify-data = lr_data.
    APPEND ls_modify TO lt_modify.
    CLEAR ls_modify.

    CALL METHOD lo_srv_mgr->modify
      EXPORTING
        it_modification = lt_modify
      IMPORTING
        eo_message      = lo_message
        eo_change       = lo_change.

    IF lo_message->check( ) = abap_true.
      lo_message->get_messages( IMPORTING et_message = lt_message ).
      LOOP AT lt_message INTO ls_message.
        lo_fpm->mo_message_manager->report_object_message(
          EXPORTING
           ir_message_object = ls_message-message
           io_component = lo_fpm->mo_message_manager
        ).
      ENDLOOP.
    ELSE.
      mo_controller->post_syncup_data( iv_bo_key  = zrre_if_bp_c=>sc_bo_key io_change  = lo_change ).
    ENDIF.
  ENDMETHOD.

2、Feeder Class对应类新增读取缓存数据方法READ_BOPF_BUFFER(方法名仅作为例子)

开发建议:在页面数据修改后,一般需要把最新的缓存数据buff_data体现在页面,此时需要调用改方法进行数据刷新。

例子:功能页面多页签的情况下,每个页签修改完需要展现最新的数据,尤其是有数据关联的页签,保证数据的一致性在这里插入图片描述### 代码例子仅供参考

  METHOD read_bopf_buffer.

    DATA: lo_srv_mgr TYPE REF TO /bobf/if_tra_service_manager.
    DATA: lt_key  TYPE /bobf/t_frw_key,
          lt_data TYPE zrre_t_bp_k.
    DATA: ls_data TYPE zrre_s_bp_k.

    lo_srv_mgr = /bobf/cl_tra_serv_mgr_factory=>get_service_manager( zrre_if_bp_c=>sc_bo_key ).

    MOVE-CORRESPONDING is_data TO ls_data.
    APPEND VALUE #( key = ls_data-key ) TO lt_key.

    CALL METHOD lo_srv_mgr->retrieve
      EXPORTING
        iv_node_key  = zrre_if_bp_c=>sc_node-root
        it_key       = lt_key
        iv_fill_data = abap_true
      IMPORTING
        et_data      = lt_data.

    READ TABLE lt_data INTO ls_data INDEX 1.
    IF sy-subrc = 0.
      MOVE-CORRESPONDING ls_data TO ms_root.
    ENDIF.
  ENDMETHOD.

总结:此2个方法的使用保证了数据的一致性,避免业务数据前后端不一致。

  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

混沌破晓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值