1、BADI_UJ_BPF_SUBMIT_LOGIC - 通过此 BAdI,您可以执行自定义逻辑。
当用户选择“提交”,”完成“时触发该 BAdI。
同一模型下,如果要在完成时触发BADI,需要在过滤器重设置COMPLETE = X,且 只能有一个,不能存在 COMPLETE = 空,否则不触发BADI

2、代码实例如下:实现获取数据并保存至自建表
data: lv_drv_dim_mem type uj_dim_member,
lv_drv_dim_name type uj_dim_name,
lt_idt type ujb_ts_api_identifier,
lv_workspace_url type string,
lv_step_rgn_id type ujb_id.
define mac_get_selections.
zcl_bpc_tool2=>fill_selections( EXPORTING i_appset_id = i_appset_id "环境 COFCO
i_application_id = i_appl_id
i_dim_name = &1
i_dim_value = &2
CHANGING t_selections = &3 ).
end-of-definition.
ef_success = abap_true.
try.
cl_bpc_loc_bpf_util=>get_step_rgn_data(
exporting
ir_step_rgn_obj = ir_step_rgn_obj " BPC: BPF Step Region
iv_appset_id = i_appset_id " SAP BusinessObjects - AppSet ID
ir_inst = ir_inst_obj
importing
ev_url = lv_workspace_url " Generated workspace URL
ev_step_rgn_id = lv_step_rgn_id " Step Region ID
et_idt = lt_idt
ev_drv_dim_name = lv_drv_dim_name
ev_drv_dim_mem = lv_drv_dim_mem
).
catch cx_bpc_loc_exception.
ef_success = abap_false.
return.
endtry.
* if ef_success eq abap_true.
* ef_complete_review = 'Y'.
* else.
* ef_complete_review = 'N'.
* endif.
check ef_success eq abap_true.
* check if_accepted eq abap_true.
select single * from ujb_step into @data(ls_step)
where appset_id = @i_appset_id
and step_id = @ir_step_rgn_obj->do_step->ds_step-step_id
and tmpl_id = @ir_inst_obj->ds_inst-tmpl_id.
select single * from ujb_tmpl into @data(ls_tmpl)
where appset_id = @i_appset_id
and tmpl_id = @ir_inst_obj->ds_inst-tmpl_id
and control_appl_id = @i_appl_id.
select single *
from ztbpc_oa_0001
into @data(ls_oa_0001)
where template = @ls_tmpl-tech_name
and step = @ls_step-tech_name.
check sy-subrc is initial.
select single *
into @data(ls_oa_003)
from ztbpc_oa_0003
where t_entity eq @lv_drv_dim_mem
.
check sy-subrc is initial.
"1.取BPC值
data: lt_selections type uj0_t_sel
, lt_dim_name_default type ujq_t_dim
, lt_data type zcl_bpc_tool2=>tt_cofco_planning
.
"1.1 设置取BPC值 参数
select * from ztbpc_oa_0002
into table @data(lt_oa_0002). "OA集成配置-科目汇总匹配表
lt_dim_name_default = zcl_bpc_tool2=>get_dim_names( iv_appset_id = i_appset_id iv_appl_id = i_appl_id ).
clear: lt_selections[],lt_data[].
loop at lt_oa_0002 into data(ls_oa_0002).
mac_get_selections:'T_ACCOUNT' ls_oa_0002-t_account lt_selections.
endloop.
mac_get_selections:'T_AUDIT' 'INPUT' lt_selections.
mac_get_selections:'T_FLOW3' 'F3_NONE' lt_selections.
mac_get_selections:'T_FLOW5' 'F5_NONE' lt_selections.
mac_get_selections:'T_FLOW6' 'F6_NONE' lt_selections.
mac_get_selections: lv_drv_dim_name lv_drv_dim_mem lt_selections.
loop at lt_idt into data(ls_idt).
if ls_idt-identity_dim eq 'T_TIME'.
ls_idt-member = ls_idt-member+0(5) && 'TOTAL'.
mac_get_selections: ls_idt-identity_dim ls_idt-member lt_selections.
ls_idt-member = ls_idt-member+0(5) && 'INP'.
mac_get_selections: ls_idt-identity_dim ls_idt-member lt_selections.
else.
mac_get_selections: ls_idt-identity_dim ls_idt-member lt_selections.
endif.
endloop.
sort lt_selections.
delete adjacent duplicates from lt_selections comparing all fields.
"1.2判断数据是否传输
data : rt_t_category type range of ztbpc_oa_0004-t_category
, rs_t_category like line of rt_t_category
, rt_t_entity type range of ztbpc_oa_0004-t_entity
, rs_t_entity like line of rt_t_entity
, rt_t_time type range of ztbpc_oa_0004-t_time
, rs_t_time like line of rt_t_time
.
loop at lt_selections into data(ls_selections) where dimension eq 'T_CATEGORY' or dimension eq 'T_ENTITY' or dimension eq 'T_TIME' .
if ls_selections-dimension eq 'T_CATEGORY' .
clear rs_t_category.
rs_t_category-sign = ls_selections-sign.
rs_t_category-option = ls_selections-option.
rs_t_category-low = ls_selections-low.
append rs_t_category to rt_t_category.
elseif ls_selections-dimension eq 'T_ENTITY' .
clear rs_t_entity.
rs_t_entity-sign = ls_selections-sign.
rs_t_entity-option = ls_selections-option.
rs_t_entity-low = ls_selections-low.
append rs_t_entity to rt_t_entity.
elseif ls_selections-dimension eq 'T_TIME' .
clear rs_t_time.
rs_t_time-sign = ls_selections-sign.
rs_t_time-option = ls_selections-option.
rs_t_time-low = ls_selections-low.
append rs_t_time to rt_t_time.
endif.
endloop.
data:lt_oa_0004_his type table of ztbpc_oa_0004
.
clear lt_oa_0004_his[].
select *
into table lt_oa_0004_his
from ztbpc_oa_0004
where t_time in rt_t_time
and t_entity in rt_t_entity
and t_category in rt_t_category
and ztr_status_oa eq '2'
.
sort lt_oa_0004_his by t_account t_audit t_category t_entity t_flow t_flow1 t_flow2 t_flow3 t_flow4 t_flow5 t_flow6 t_object t_time.
* CHECK lt_oa_0004_his[] IS INITIAL.
"1.3 取值
zcl_bpc_tool2=>get_model_data( exporting i_appset_id = i_appset_id "环境 COFCO
i_application_id = i_appl_id
i_dim_name = lt_dim_name_default
i_selections = lt_selections
importing t_data = lt_data ).
check lt_data[] is not initial.
"1.4 整理BPC值
data: lt_oa_0004_upd type table of ztbpc_oa_0004
, ls_oa_0004 type ztbpc_oa_0004
.
clear: lt_oa_0004_upd[].
loop at lt_data into data(ls_data).
clear ls_oa_0004.
move-corresponding ls_data to ls_oa_0004.
read table lt_oa_0004_his transporting no fields with key t_account = ls_oa_0004-t_account
t_audit = ls_oa_0004-t_audit
t_category = ls_oa_0004-t_category
t_entity = ls_oa_0004-t_entity
t_flow = ls_oa_0004-t_flow
t_flow1 = ls_oa_0004-t_flow1
t_flow2 = ls_oa_0004-t_flow2
t_flow3 = ls_oa_0004-t_flow3
t_flow4 = ls_oa_0004-t_flow4
t_flow5 = ls_oa_0004-t_flow5
t_flow6 = ls_oa_0004-t_flow6
t_object = ls_oa_0004-t_object
t_time = ls_oa_0004-t_time binary search.
if sy-subrc is initial.
continue.
endif.
ls_oa_0004-submitter = is_user-user_id.
ls_oa_0004-ztr_status_oa = '1'.
append ls_oa_0004 to lt_oa_0004_upd.
endloop.
check lt_oa_0004_upd[] is not initial.
"2.取BPC备注
data: lv_appsetid type uj_appset_id,
lv_applid type uj_appl_id,
ls_user type uj0_s_user,
lv_keyword type uj_desc,
lt_priority type ujc_t_api_cmt_priority,
lt_dim_members type ujc_t_cmtbl_dimlist,
lv_measures type uj_desc,
lv_originator type uj_user_id,
lv_cmt_date_from type timestamp,
lv_cmt_date_to type timestamp,
if_with_history type uj_flg.
data: lo_cmt type ref to zcl_cmt_common.
data: lv_success type uj_flg.
data: lt_message type uj0_t_message.
data: lt_compact_cmtbl type ujc_t_compact_cmtbl.
"2.1 设置取BPC备注 参数
lv_keyword = 'CELL ENTRY'.
lv_measures = 'PERIODIC'.
if_with_history = space.
loop at lt_selections into ls_selections.
append value #( dim_name = ls_selections-dimension dim_value = ls_selections-low ) to lt_dim_members.
endloop.
loop at lt_oa_0002 into ls_oa_0002.
append value #( dim_name = 'T_ACCOUNT' dim_value = ls_oa_0002-t_account ) to lt_dim_members.
endloop.
sort lt_dim_members.
delete adjacent duplicates from lt_dim_members comparing all fields.
"2.2 取BPC备注
create object lo_cmt
exporting
iv_appset_id = i_appset_id
iv_appl_id = i_appl_id.
call method lo_cmt->get_cmt_alldim
exporting
iv_appset_id = i_appset_id
iv_appl_id = i_appl_id
is_user = ls_user
iv_keyword = lv_keyword
it_priority = lt_priority
it_dim_members = lt_dim_members
iv_measures = lv_measures
iv_originator = lv_originator
iv_cmt_date_from = lv_cmt_date_from
iv_cmt_date_to = lv_cmt_date_to
if_with_history = if_with_history
if_all_dims = space
importing
ef_success = lv_success
et_message = lt_message
et_compact_cmtbl = lt_compact_cmtbl.
delete lt_compact_cmtbl where scomment eq '...'.
"2.3 整理BPC备注
field-symbols: <comp> type any
, <oa_0004> type ztbpc_oa_0004
.
sort lt_oa_0004_upd.
loop at lt_compact_cmtbl into data(ls_compact_cmtbl).
clear ls_oa_0004.
loop at ls_compact_cmtbl-dim_list into data(ls_dim_list).
unassign <comp> .
assign component ls_dim_list-dim_name of structure ls_oa_0004 to <comp>.
if <comp> is assigned.
<comp> = ls_dim_list-dim_value.
endif.
endloop.
read table lt_oa_0004_his transporting no fields with key t_account = ls_oa_0004-t_account
t_audit = ls_oa_0004-t_audit
t_category = ls_oa_0004-t_category
t_entity = ls_oa_0004-t_entity
t_flow = ls_oa_0004-t_flow
t_flow1 = ls_oa_0004-t_flow1
t_flow2 = ls_oa_0004-t_flow2
t_flow3 = ls_oa_0004-t_flow3
t_flow4 = ls_oa_0004-t_flow4
t_flow5 = ls_oa_0004-t_flow5
t_flow6 = ls_oa_0004-t_flow6
t_object = ls_oa_0004-t_object
t_time = ls_oa_0004-t_time binary search.
if sy-subrc is initial.
continue.
endif.
unassign <oa_0004>.
read table lt_oa_0004_upd assigning <oa_0004>
with key t_account = ls_oa_0004-t_account
t_audit = ls_oa_0004-t_audit
t_category = ls_oa_0004-t_category
t_entity = ls_oa_0004-t_entity
t_flow = ls_oa_0004-t_flow
t_flow1 = ls_oa_0004-t_flow1
t_flow2 = ls_oa_0004-t_flow2
t_flow3 = ls_oa_0004-t_flow3
t_flow4 = ls_oa_0004-t_flow4
t_flow5 = ls_oa_0004-t_flow5
t_flow6 = ls_oa_0004-t_flow6
t_object = ls_oa_0004-t_object
t_time = ls_oa_0004-t_time binary search.
if <oa_0004> is assigned .
<oa_0004>-scomment = ls_compact_cmtbl-scomment.
else.
ls_oa_0004-scomment = ls_compact_cmtbl-scomment.
ls_oa_0004-ztr_status_oa = '1'.
ls_oa_0004-submitter = is_user-user_id.
append ls_oa_0004 to lt_oa_0004_upd.
endif.
endloop.
"3.写入数据
* DELETE FROM ztbpc_oa_0004 WHERE t_time IN rt_t_time
* AND t_entity IN rt_t_entity
* AND t_category IN rt_t_category.
modify ztbpc_oa_0004 from table lt_oa_0004_upd.
if sy-subrc is initial.
commit work and wait.
else.
rollback work.
endif.
endmethod.