manage_odp_ds_acc_methods

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


  METHOD manage_odp_ds_acc_methods.

    CLEAR: et_return, ev_sy_subrc.
    DATA:
      lv_fieldname TYPE string,
      lo_access    TYPE REF TO cl_rsds_accessmethods,
      lt_method    TYPE rsds_t_r_accessattr,
      lt_fields    TYPE cl_rsds_access_odp=>tt_fields,
      ls_t100_key  TYPE scx_t100key.

    FIELD-SYMBOLS:
      <ls_field>  TYPE cl_rsds_access_odp=>ts_fields,
      <ls_method> LIKE LINE OF lt_method.

    CALL METHOD cl_rsds_accessmethods=>create_object
      EXPORTING
        i_datasource  = iv_data_source
        i_logsys      = iv_logsys
        i_infopackage = space
        i_objvers     = rs_c_objvers-new
      IMPORTING
        e_r_methods   = lo_access
      EXCEPTIONS
        failed        = 1
        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.

    CALL METHOD lo_access->get_methods(
      EXPORTING
        i_filter    = 'X'
      RECEIVING
        r_t_methods = lt_method ).

    LOOP AT lt_method ASSIGNING <ls_method>.

      lo_access->get_methods( ).

      CALL METHOD lo_access->set_attributes
        EXPORTING
          i_accessmethod = <ls_method>-accessmethod.

      CALL FUNCTION 'RSDS_ODP_SET_GET_GLOBAL'
        EXPORTING
          i_odp        = iv_odpname
          i_logsys     = iv_logsys
          i_datasource = iv_data_source.

      CALL METHOD lo_access->get_attributes
        EXPORTING
          i_accessmethod = <ls_method>-accessmethod.

      CALL METHOD lo_access->set_structure_for_prop
        EXPORTING
          i_accessmethod = <ls_method>-accessmethod.

      CALL FUNCTION 'RSDS_ODP_SET_GET_GLOBAL'
        IMPORTING
          et_fields = lt_fields.

      LOOP AT lt_fields ASSIGNING <ls_field>
        WHERE name_ds = cl_rs_b4htapd_dp_odp_ds=>co_forbidden_fieldnm-record    OR
              name_ds = cl_rs_b4htapd_dp_odp_ds=>co_forbidden_fieldnm-request   OR
              name_ds = cl_rs_b4htapd_dp_odp_ds=>co_forbidden_fieldnm-datapakid OR
              name_ds = cl_rs_b4htapd_dp_odp_ds=>co_forbidden_fieldnm-partno.
        MOVE <ls_field>-name_ds TO lv_fieldname.
        "lv_fieldname = mo_dp_odp_cds->correct_field( lv_fieldname ). TODO
        MOVE lv_fieldname TO <ls_field>-name_ds.

      ENDLOOP.

      CALL FUNCTION 'RSDS_ODP_SET_GET_GLOBAL'
        EXPORTING
          it_fields = lt_fields.

      CALL METHOD lo_access->get_structure_for_prop
        EXPORTING
          i_accessmethod = <ls_method>-accessmethod
          i_no_popup     = rs_c_true
        EXCEPTIONS
          OTHERS         = 1.
      IF sy-subrc <> 0.
        ev_sy_subrc = sy-subrc.
        /goog/cl_bqtr_utility=>add_bapiret2_from_sy(
          CHANGING
            ct_bapiret2 = et_return ).
        RETURN.
      ENDIF.
    ENDLOOP.

    eo_access = lo_access.