BPC BPF流程增强BADI

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.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值