create_odso

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


  METHOD create_odso.

    DATA: lt_field         TYPE cl_rsds_access_odp=>tt_repl_field.

    CLEAR: et_return, ev_sy_subrc.
    CALL METHOD cl_rsds_access_odp=>rodps_repl_odp_get_detail
      EXPORTING
        i_logsys  = iv_logsys
        i_odpname = iv_odpname
      IMPORTING
        et_fields = lt_field
        et_return = et_return.

    LOOP AT et_return TRANSPORTING NO FIELDS
      WHERE type CA 'AEX'.
      EXIT.
    ENDLOOP.
    IF sy-subrc IS INITIAL.
      ev_sy_subrc = 4.
      RETURN.
    ENDIF.

    DATA: ls_key_field TYPE REF TO cl_rsds_access_odp=>ts_repl_field.

    READ TABLE lt_field REFERENCE INTO ls_key_field
         INDEX 1.
    IF sy-subrc IS NOT INITIAL.
      RETURN.
    ENDIF.

    CALL FUNCTION 'RSDF_GENERATE_IOBJ_SIMPLE'
      EXPORTING
        i_iobjnm      = iv_iobj
        i_type        = 'CHA'
        i_description = ls_key_field->description
        i_datatype    = 'CHAR' "Anything can go into CHAR
        i_leng        = ls_key_field->length
      EXCEPTIONS
        failed        = 1
        OTHERS        = 2.
    IF sy-subrc <> 0.
      /goog/cl_bqtr_utility=>add_bapiret2_from_sy(
        CHANGING
          ct_bapiret2 = et_return ).
      ev_sy_subrc = 4.
      RETURN.
    ENDIF.

    DATA: lt_info_obj TYPE STANDARD TABLE OF bapi6108io.

    lt_info_obj = VALUE #( ( infoobject = iv_iobj ) ).

    CALL FUNCTION 'BAPI_IOBJ_ACTIVATE_MULTIPLE'
      TABLES
        infoobjects = lt_info_obj
        return      = et_return.
    LOOP AT et_return TRANSPORTING NO FIELDS
      WHERE type CA 'AEX'.
      EXIT.
    ENDLOOP.
    IF sy-subrc IS INITIAL.
      ev_sy_subrc = 4.
      RETURN.
    ENDIF.

    DATA: ls_odso_details TYPE bapi6116.
    DATA: lt_info_obj_odso TYPE STANDARD TABLE OF bapi6116io.

    ls_odso_details-odsobject = iv_adsonm.
    ls_odso_details-objvers = 'N'.

    APPEND VALUE #( odsobject = iv_adsonm
                    posit = 0001
                    keyflag = 'X'
                    infoobject = iv_iobj
                    iobjtp = 'CHA' )
            TO lt_info_obj_odso.

    CALL FUNCTION 'RSDF_GENERATE_ODSO'
      EXPORTING
        i_details       = ls_odso_details
      TABLES
        i_t_infoobjects = lt_info_obj_odso
      EXCEPTIONS
        failed          = 1
        OTHERS          = 2.
    IF sy-subrc <> 0.
      /goog/cl_bqtr_utility=>add_bapiret2_from_sy(
        CHANGING
          ct_bapiret2 = et_return ).
      ev_sy_subrc = 4.
      RETURN.
    ENDIF.

    es_tlogo-objnm = iv_adsonm.
    es_tlogo-tlogo = 'ODSO'.