apply_routine

in src/zgoog_cl_bqtr_gen_bw_object.clas.abap [0:0]


  METHOD apply_routine.

    DATA: lt_abap_source TYPE rstran_t_abapsource.
    DATA: ls_source TYPE abapsource.

    DATA: lo_cmp    TYPE REF TO cl_cmp_composer,
          lo_cmpf   TYPE REF TO cx_cmp_failure,
          lo_root   TYPE REF TO cx_root,
          lt_buffer TYPE rswsourcet.

    TYPES: BEGIN OF lty_param,
             mass_tr_key   TYPE /goog/trkey,
             data_source   TYPE string,
             cdc_framework TYPE string,
             mandt_fnam    TYPE name_feld,
           END OF lty_param.
    DATA: ls_param TYPE lty_param.
    CONSTANTS: lc_start TYPE string VALUE 'ZGOOG_I_BQTR_TEMPLATE_START',
               lc_end   TYPE string VALUE 'ZGOOG_I_BQTR_TEMPLATE_END'.


    CLEAR: et_return, ev_sy_subrc.

    ls_param = VALUE #( mass_tr_key   = iv_mass_tr_key
                        data_source   = iv_data_source
                        cdc_framework = 'ODQ'
                        mandt_fnam    = iv_mandt_fval ).

    lcl_code_composer_util=>generate_code_using_cc( EXPORTING iv_template = lc_start
                                                              is_params   = ls_param
                                                    IMPORTING ev_error    = DATA(lv_error)
                                                              et_code     = lt_abap_source ).

    DATA: lo_ex TYPE REF TO cx_root.
    TRY.
*       Create routine and get reference and codeid of routine
        CALL METHOD io_trfn->create_start_routine( ).
        DATA: lo_routine_start TYPE REF TO cl_rstran_step_rout.
        lo_routine_start = io_trfn->get_start_routine( ).

        DATA: lv_codeid_start TYPE rscodeid.
        lo_routine_start->get_codeid(
          IMPORTING
            e_codid = lv_codeid_start ).

*       Set new routine code
        lo_routine_start->store_routine(
          i_codeid   = lv_codeid_start
          i_t_source = lt_abap_source ).
      CATCH cx_root INTO lo_ex.
        ev_sy_subrc = 4.
        add_bapiret2_from_cx_root(
          EXPORTING
            io_error    = lo_ex
          CHANGING
            ct_bapiret2 = et_return ).
        RETURN.
        RETURN.
    ENDTRY.

    TRY.
*       Create routine and get reference and codeid of routine
        CALL METHOD io_trfn->create_end_routine( ).
        DATA: lo_routine_end TYPE REF TO cl_rstran_step_rout.
        lo_routine_end = io_trfn->get_end_routine( ).

        DATA: lv_codeid_end TYPE rscodeid.
        lo_routine_end->get_codeid(
          IMPORTING
            e_codid = lv_codeid_end ).

        CLEAR lt_abap_source.

        ls_source-line = | CLEAR RESULT_PACKAGE[]. |.
        APPEND ls_source TO lt_abap_source.

*       Set new routine code
        lo_routine_end->store_routine(
          i_codeid   = lv_codeid_end
          i_t_source = lt_abap_source ).
      CATCH cx_root INTO lo_ex.
        ev_sy_subrc = 4.
        add_bapiret2_from_cx_root(
          EXPORTING
            io_error    = lo_ex
          CHANGING
            ct_bapiret2 = et_return ).
        RETURN.
    ENDTRY.