create_process_chain

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


  METHOD create_process_chain.

    DATA: lo_chain   TYPE REF TO cl_rspc_chain,
          lt_variant TYPE  rspc_t_variante.


    CLEAR: et_return, ev_sy_subrc.

* ==== Create Chain-Object ====
    CREATE OBJECT lo_chain
      EXPORTING
        i_chain         = iv_chain                 " Process chain
        i_objvers       = mv_objver
        i_t_variant     = lt_variant                " Type and Variant
        i_with_dialog   = ''              " With online
        i_new           = abap_true
      EXCEPTIONS
        aborted_by_user = 1                " User would actually rather not process a chain ...
        not_unique      = 2                " Selection not unique - & user requests not allowed
        wrong_name      = 3                " Incorrect Name of (New) Chain
        display_only    = 4                " Only Display Allowed
        OTHERS          = 5.
    IF sy-subrc <> 0.
      ev_sy_subrc = sy-subrc.
      /goog/cl_bqtr_utility=>add_bapiret2_from_sy(
        CHANGING
          ct_bapiret2 = et_return ).
      RETURN.
    ENDIF.


    lo_chain->set_streaming(
      EXPORTING
        i_streaming  = iv_streaming
      EXCEPTIONS
        not_possible = 1
        warning      = 2
        OTHERS       = 3
    ).
    IF sy-subrc <> 0.
      ev_sy_subrc = sy-subrc.
      /goog/cl_bqtr_utility=>add_bapiret2_from_sy(
        CHANGING
          ct_bapiret2 = et_return ).
      RETURN.
    ENDIF.

    DATA: lt_process_data TYPE rspc_t_variante,
          lv_trigger      TYPE string.
*
    IF iv_trigger IS SUPPLIED.
      lv_trigger = iv_trigger.
    ELSE.
      lv_trigger = 'ZT_' && iv_chain.
    ENDIF.

    APPEND VALUE #( type = rspc1_c_type-trigger variante = lv_trigger ) TO lt_process_data.
    APPEND VALUE #( type = rspc1_c_type-dtpload variante = iv_dtp_load ) TO lt_process_data.
    APPEND VALUE #( type = rspc1_c_type-adsoact variante = iv_adso ) TO lt_process_data.

* ==== Put processes into chain ====
    LOOP AT lt_process_data ASSIGNING FIELD-SYMBOL(<ls_process>).
      lo_chain->add_process(
        EXPORTING
          i_type          = <ls_process>-type               " Process Type
          i_variant       = <ls_process>-variante
          i_with_dialog   = ''              " With Dialog, Where Necessary
        IMPORTING
          e_variant       = <ls_process>-variante
        EXCEPTIONS
          aborted_by_user = 1                " User would actually rather not ...
          OTHERS          = 2
      ).
      IF sy-subrc <> 0.
        ev_sy_subrc = sy-subrc.
        /goog/cl_bqtr_utility=>add_bapiret2_from_sy(
          CHANGING
            ct_bapiret2 = et_return ).
        RETURN.
      ENDIF.

      DATA: lo_variant      TYPE REF TO cl_rspc_variant,
            lv_variant      TYPE rspc_variant,
            ls_variant      TYPE rspcvariant,
            lt_adso_variant TYPE rspc_t_variant.


      IF <ls_process>-type = rspc1_c_type-adsoact.

        lv_variant = <ls_process>-variante.

        " get an instance
        CALL METHOD cl_rspc_variant=>create
          EXPORTING
            i_type      = rspc1_c_type-adsoact
            i_variant   = lv_variant
          RECEIVING
            r_r_variant = lo_variant
          EXCEPTIONS
            locked      = 1
            OTHERS      = 2.

        .
        " fill l_t_variant
        ls_variant-type     = rspc1_c_type-adsoact.
        ls_variant-variante = lv_variant.
        ls_variant-objvers  = rs_c_objvers-active.
        ls_variant-lnr      = '0000000001'.
        ls_variant-fnam     = rsmpc_c_odsactivate-no_condense.
        ls_variant-sign     = 'I'.
        ls_variant-opt      = 'EQ'.
        ls_variant-low      = abap_false.

        APPEND ls_variant TO lt_adso_variant.
        ls_variant-fnam     = rsmpc_c_type-adso.

        ls_variant-lnr = 1.
        ls_variant-sign = 'I'.
        ls_variant-opt = 'EQ'.
        ls_variant-low = lv_variant.
        APPEND ls_variant TO lt_adso_variant.

        DATA(lv_lnr) = ls_variant-lnr + 1.
        " fill l_t_variant
        ls_variant-type     = rspc1_c_type-adsoact.
        ls_variant-variante = lv_variant.
        ls_variant-objvers  = rs_c_objvers-active.
        ls_variant-lnr      = lv_lnr.
        ls_variant-fnam     = rsmpc_c_odsactivate-noreqactwarn.
        ls_variant-sign     = 'I'.
        ls_variant-opt      = 'EQ'.
        ls_variant-low      = abap_false.
        APPEND ls_variant TO lt_adso_variant.


        DATA: ls_variantt  TYPE rspcvariantt.

        ls_variantt-langu = sy-langu.
        ls_variantt-type = rspc1_c_type-adsoact.
        ls_variantt-variante = lv_variant.
        ls_variantt-objvers = 'A'.
        ls_variantt-txtlg = lv_variant.

        CALL METHOD lo_variant->save
          EXPORTING
            i_t_rspcvariant  = lt_adso_variant
            i_s_rspcvariantt = ls_variantt
          EXCEPTIONS
            failed           = 1
            OTHERS           = 2.


      ENDIF.
    ENDLOOP.

    DATA: ls_chain   TYPE rspc_s_chain,
          ls_chain_h TYPE rspc_s_chain.

* ==== Connect processes Serially====
    LOOP AT lt_process_data ASSIGNING <ls_process>.
      ls_chain-type = <ls_process>-type.
      ls_chain-variante = <ls_process>-variante.
      SELECT SINGLE eventrange FROM rsprocesstypes INTO @DATA(ls_eventrange)
                 WHERE  type = @ls_chain_h-type.
      IF ls_eventrange > 0.
        lo_chain->connect(
          EXPORTING
            i_s_start            = ls_chain_h
            i_s_end              = ls_chain
            i_color              = 'G'
            i_no_question_double = rs_c_true
          EXCEPTIONS
            not_possible         = 1
            OTHERS               = 2 ).
      ENDIF.
      ls_chain_h = ls_chain.

    ENDLOOP.


    lo_chain->save(
      EXPORTING
        i_objvers    = mv_objver              " Object version
        i_activation = abap_true                 " Chain is being activated...
      EXCEPTIONS
        failed       = 1                " Failed
        OTHERS       = 2
    ).
    IF sy-subrc <> 0.
      ev_sy_subrc = sy-subrc.
      /goog/cl_bqtr_utility=>add_bapiret2_from_sy(
        CHANGING
          ct_bapiret2 = et_return ).
      RETURN.
    ENDIF.

    IF iv_active = abap_true.
      lo_chain->activate(
        IMPORTING
          e_t_conflicts = DATA(lt_co)
        EXCEPTIONS
          errors        = 1                " Errors occurred
          warnings      = 2                " Warnings occurred
          OTHERS        = 3
      ).
      IF sy-subrc <> 0.
        ev_sy_subrc = sy-subrc.
        /goog/cl_bqtr_utility=>add_bapiret2_from_sy(
          CHANGING
            ct_bapiret2 = et_return ).
        RETURN.
      ENDIF.
    ENDIF.