目录
项目场景:
SAP TM 使用BOPF框架实现,定义了很多标准接口,如果我们提供外部接口,通过外围系统调用标准的TM功能,我们只需要找到SAP TM里面的action,就可以简单的实现功能。
问题描述
比如我们外围系统要调用SAP接口取消FB,我们通过前台找到取消按钮对应的action
action:/scmtms/if_tor_c=>sc_action-root-cancel
/BOBF/IF_TRA_TRANSACTION_MGR 的save 方法保存全部缓存的数据
DATA: lv_tor_id TYPE /scmtms/tor_id.
DATA:
lv_act_key TYPE /bobf/act_key,
lv_button_action TYPE string,
lv_return TYPE string,
lt_failed_key TYPE /bobf/t_frw_key,
lt_keys TYPE /bobf/t_frw_key,
ls_key TYPE /bobf/s_frw_key,
lr_srvmgr TYPE REF TO /bobf/if_tra_service_manager,
lo_tra TYPE REF TO /bobf/if_tra_transaction_mgr, " service
lo_change TYPE REF TO /bobf/if_tra_change,
lo_message TYPE REF TO /bobf/if_frw_message,
lt_bapi_msg TYPE bapiret2_tab,
lx_error TYPE REF TO /bobf/cx_frw.
lr_srvmgr = /bobf/cl_tra_serv_mgr_factory=>get_service_manager( /scmtms/if_tor_c=>sc_bo_key ).
IF lo_tra IS NOT BOUND .
lo_tra = /bobf/cl_tra_trans_mgr_factory=>get_transaction_manager( ).
ENDIF.
lv_tor_id = iv_fb_id.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = lv_tor_id
IMPORTING
output = lv_tor_id.
SELECT db_key INTO TABLE lt_keys
FROM /scmtms/d_torrot
WHERE tor_id = lv_tor_id.
IF lt_keys IS INITIAL.
es_return-error = 'X'.
es_return-msg = 'FB不存在'.
RETURN.
ENDIF.
lv_act_key = /scmtms/if_tor_c=>sc_action-root-cancel.
* call action
CALL METHOD lr_srvmgr->do_action
EXPORTING
iv_act_key = lv_act_key
it_key = lt_keys
IMPORTING
eo_change = lo_change
eo_message = lo_message
et_failed_key = lt_failed_key.
CALL METHOD /scmtms/cl_common_helper=>msg_convert_bopf_2_bapiret2
EXPORTING
io_message = lo_message
CHANGING
ct_bapiret2 = lt_bapi_msg.
DELETE lt_bapi_msg WHERE type NE 'E'.
IF lt_bapi_msg IS INITIAL.
DATA : lv_rejected TYPE boole_d,
lt_rej_bo_key TYPE /bobf/t_frw_key2.
CALL METHOD lo_tra->save(
IMPORTING
ev_rejected = lv_rejected
eo_change = lo_change
eo_message = lo_message
et_rejecting_bo_key = lt_rej_bo_key ).
CALL METHOD /scmtms/cl_common_helper=>msg_convert_bopf_2_bapiret2
EXPORTING
io_message = lo_message
CHANGING
ct_bapiret2 = lt_bapi_msg.
DELETE lt_bapi_msg WHERE type NE 'E'.
IF lv_rejected IS INITIAL.
es_return-msg = '取消FB成功'.
ELSE.
es_return-error = 'X'.
ENDIF.
ELSE.
es_return-error = 'X'.
ENDIF.
总结:
这是一个最简单的例子,我们通过这种方法,实现类型gui界面的bdc功能
可以通过多个操作(action)的组合实现更加复杂的前台操作功能。