Skip to content

Instantly share code, notes, and snippets.

@rijdz
Created December 10, 2018 05:13
Show Gist options
  • Save rijdz/cc264721d7cccd4055fcd1ae756d569b to your computer and use it in GitHub Desktop.
Save rijdz/cc264721d7cccd4055fcd1ae756d569b to your computer and use it in GitHub Desktop.
BPC BAdI Implementation of UJ_CUSTOM_LOGIC
*&---------------------------------------------------------------------*
*& Env.      : BPC_PIHC
*& Model     : OPEX
*&---------------------------------------------------------------------*
*& Revision Log:
*& Ver#   Date        Dev            Descr
*& -----  -----       -----          -----
*& 0001   02.04.2015  Rijdzuan   Initial
*&---------------------------------------------------------------------*
*& Information:
*& Engine untuk membuat journal dari opex ke financial
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& DECLARATION & INITIALIZE
*&---------------------------------------------------------------------*
DATA: LR_DATA TYPE REF TO DATA.
DATA: ld_log TYPE string,
ld_log_flag TYPE flag.
DATA: ld_line TYPE i,
ld_linet(50).
DATA: LX_MESSAGES  TYPE UJ0_S_MESSAGE,
          LT_MESSAGES  TYPE UJ0_T_MESSAGE,
          LS_WB_STATUS TYPE UJO_S_WB_STATUS,
          L_SUCCESS    TYPE UJ_FLG,
          LT_ERRORS    TYPE UJA_T_MEMBERS_ERROR. 
** TYPE REF
DATA: LT_FINAL TYPE REF TO DATA,
LR_FINAL TYPE REF TO DATA.
FIELD-SYMBOLS: <LT_FINAL> TYPE STANDARD TABLE,
<LS_FINAL> TYPE ANY.
** Create final data
CREATE DATA LT_FINAL LIKE CT_DATA.
ASSIGN LT_FINAL->* TO <LT_FINAL>.
CREATE DATA LR_FINAL LIKE LINE OF CT_DATA.
ASSIGN LR_FINAL->* TO <LS_FINAL>.
FIELD-SYMBOLS: <LT_RECORD>     TYPE STANDARD TABLE,
                   <LT_RECORD_DEL> TYPE STANDARD TABLE,
                   <LS_RECORD>     TYPE ANY,
                   <LS_RECORD_DEL> TYPE ANY,
                   <LS_SIGNEDDATA> TYPE ANY. 
*&---------------------------------------------------------------------*
*& RANGE DEFINE
*&---------------------------------------------------------------------*
LX_SELECTION TYPE UJ0_S_RANGE.
LT_SELECTION TYPE UJ0_T_RANGE.
LX_SELECTION_DIM TYPE UJ0_S_SEL.
LT_SELECTION_DIM TYPE UJ0_T_SEL.
"Range Dimension
DEFINE MC_SEL_DIMENSION.
      &1-DIMENSION = &2.
      &1-ATTRIBUTE = &3.
      &1-SIGN = 'I'.
      &1-OPTION = 'EQ'.
      &1-LOW = &4.
      APPEND &1 TO &5.
    END-OF-DEFINITION.
"Range Model
    DEFINE MC_SEL_MODEL.
      CLEAR &1.
      &1-sign = 'I'.
      &1-option = 'EQ'.
      &1-dimension = &2.
      &1-low = &3.
      APPEND &1 to &4.
    END-OF-DEFINITION.
"Range of Member
    DEFINE MC_SEL_RANGE.
      CLEAR &1.
      &1-sign = 'I'.
      &1-option = 'EQ '.
      &1-low = &2.
      APPEND &1 to &3.
    END-OF-DEFINITION. 
*&---------------------------------------------------------------------*
*& INPUT VALIDATION
*&---------------------------------------------------------------------*
CALL METHOD ZBPC_CL_GET_DIMENSION_MEMBER=>READ_CV_DATA
EXPORTING
IT_CV = IT_CV
IMPORTING
ET_CYCLE = LT_CYCLE
ET_CATEGORY = LT_CATEGORY
ET_ENTITY = LT_ENTITY
ET_TIME = LT_TIME.
"Category
LOOP AT LT_CATEGORY TRANSPORTING NO FIELDS
WHERE ID EQ 'Actual'.
** Raise exception
LD_LOG = 'Input Actual Category is not allowed'.
CL_UJK_LOGGER=>LOG( I_OBJECT = LD_LOG ).
RAISE EXCEPTION TYPE CX_UJ_CUSTOM_LOGIC.
ENDLOOP.
"Cycle
IF LT_CYCLE[] IS INITIAL.
** Raise exception
LD_LOG = 'Please input one CYCLE'.
CL_UJK_LOGGER=>LOG( I_OBJECT = LD_LOG ).
RAISE EXCEPTION TYPE CX_UJ_CUSTOM_LOGIC.
ELSE.
READ TABLE LT_CYCLE ASSIGNING <LS_CYCLE> INDEX 2.
IF SY-SUBRC EQ 0.
** Raise exception
LD_LOG = 'Please input one CYCLE'.
CL_UJK_LOGGER=>LOG( I_OBJECT = LD_LOG ).
RAISE EXCEPTION TYPE CX_UJ_CUSTOM_LOGIC.
ENDIF.
ENDIF.
    
*&---------------------------------------------------------------------*
*& GET MODEL FROM CT_DATA
*&---------------------------------------------------------------------*
BREAK-POINT.
CALL METHOD ZBPC_CL_BADI=>TRANSFORM_CT_DATA
EXPORTING
IT_DATA = CT_DATA
IMPORTING
ET_DATA_MODEL = LT_SOURCE.
*&---------------------------------------------------------------------*
*& GET INPUT MEMBER
*&---------------------------------------------------------------------*
DATA: lx_cv TYPE ujk_s_cv,
lt_member TYPE uja_t_dim_member,
lx_member TYPE uj_dim_member.
DEFINE mc_selection_dim.
CLEAR &1.
&1-sign = 'I'.
&1-option = 'EQ'.
&1-low = &2.
&1-dimension = &3.
APPEND &1 to &4.
END-OF-DEFINITION.
CLEAR: lt_selection_dim.
LOOP AT it_cv INTO lx_cv
WHERE user_specified = 'X'.
lt_member = lx_cv-member.
LOOP AT lt_member INTO lx_member.
mc_selection_dim lx_selection_dim
lx_member lx_cv-dimension lt_selection_dim.
ENDLOOP.
ENDLOOP.
CALL METHOD zbpc_cl_get_model_record=>fetch2
EXPORTING
i_appset_id = i_appset_id
i_appl_id = <ls_uja_appl>-application_id
it_selection = lt_selection_dim
IMPORTING
er_data = lr_data.
*&---------------------------------------------------------------------*
*& GET MODEL WITH SELECTION
*&---------------------------------------------------------------------*
DEFINE mc_dim_selection.
CLEAR &1.
&1-sign = 'I'.
&1-option = 'EQ'.
&1-dimension = &2.
&1-low = &3.
APPEND &1 to &4.
END-OF-DEFINITION.
** "Category
LOOP AT LT_CATEGORY ASSIGNING <LS_CATEGORY>.
MC_DIM_SELECTION LX_ASSUMPTION_SEL 'CATEGORY'
<LS_CATEGORY>-ID LT_ASSUMPTION_SEL.
ENDLOOP.
** "Cycle
LOOP AT LT_CYCLE ASSIGNING <LS_CYCLE>.
MC_DIM_SELECTION LX_ASSUMPTION_SEL 'CYCLE'
<LS_CYCLE>-ID LT_ASSUMPTION_SEL.
ENDLOOP.
** "Rptcurrency
MC_DIM_SELECTION LX_ASSUMPTION_SEL 'RPTCURRENCY'
'USD' LT_ASSUMPTION_SEL.
CALL METHOD ZBPC_CL_GET_MODEL_RECORD=>FETCH
EXPORTING
I_APPSET_ID = I_APPSET_ID
I_APPL_ID = 'Assumption'
IT_SELECTION = LT_ASSUMPTION_SEL
IMPORTING
T_ASSUMPTION = LT_ASSUMPTION_ICP.
CALL METHOD zbpc_cl_get_model_record=>fetch2
EXPORTING
i_appset_id = i_appset_id
i_appl_id = <ls_uja_appl>-application_id
it_selection = lt_selection_dim
IMPORTING
er_data = lr_data.
*&---------------------------------------------------------------------*
*& GET DIMENSION WITH SELECTION
*&---------------------------------------------------------------------*
DATA: LT_POSTRULE TYPE ZBPC_TT_POSTING_RULE_DIM,
LX_POSTRULE TYPE ZBPC_TY_POSTING_RULE_DIM.
DATA: LT_R_POSTRULE TYPE UJ0_T_SEL,
LX_R_POSTRULE TYPE UJ0_S_SEL.
LX_R_POSTRULE-DIMENSION = 'POSTING_RULE'.
LX_R_POSTRULE-ATTRIBUTE = 'MODEL'.
LX_R_POSTRULE-SIGN = 'I'.
LX_R_POSTRULE-OPTION = 'EQ'.
LX_R_POSTRULE-LOW = 'CONSOLIDATION'.
APPEND LX_R_POSTRULE TO LT_R_POSTRULE.
CALL METHOD ZBPC_CL_GET_DIMENSION_MEMBER=>READ_MBR_DATA
EXPORTING
I_APPSET_ID = I_APPSET_ID "'BPC_PIHC'
I_DIMENSION = 'POSTING_RULE'
IT_SEL = LT_R_POSTRULE
IMPORTING
ET_POSTING_RULE = LT_POSTRULE.
IF LT_POSTRULE[] IS INITIAL.
** Raise exception
CLEAR: CT_DATA.
LD_LOG = 'Please maintain appropiate Posting Rule'.
CL_UJK_LOGGER=>LOG( I_OBJECT = LD_LOG ).
RAISE EXCEPTION TYPE CX_UJ_CUSTOM_LOGIC.
EXIT.
ENDIF.
*&---------------------------------------------------------------------*
*& FINAL
*&---------------------------------------------------------------------*
** Overwrite callback
IF <LT_FINAL> IS INITIAL.
** Raise exception
CLEAR: CT_DATA.
LD_LOG = 'No final data to be processed'.
CL_UJK_LOGGER=>LOG( I_OBJECT = LD_LOG ).
RAISE EXCEPTION TYPE CX_UJ_CUSTOM_LOGIC.
EXIT.
ELSE.
CT_DATA[] = <LT_FINAL>.
ENDIF.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment