业务场景: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.