IMPORT_DATA

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


  METHOD IMPORT_DATA.

    DATA:
      li_db_data TYPE REF TO data.

    FIELD-SYMBOLS:
      <lt_db_data> TYPE STANDARD TABLE.

    CREATE DATA li_db_data TYPE STANDARD TABLE OF (iv_table) WITH DEFAULT KEY.
    ASSIGN li_db_data->* TO <lt_db_data>.


    DATA: lr_key_tab TYPE REF TO data,
          lr_key_template TYPE REF TO data.

    FIELD-SYMBOLS: <lt_key_tab> TYPE STANDARD TABLE,
                   <ls_key_template> TYPE clike.

    lr_key_tab = construct_key_table( iv_table ).
    ASSIGN lr_key_tab->* TO <lt_key_tab>.
    APPEND INITIAL LINE TO <lt_key_tab> ASSIGNING <ls_key_template>.
    GET REFERENCE OF <ls_key_template> INTO lr_key_template.

    DATA: lv_offset TYPE i VALUE 2.

    IF
    set_fval(
       ir_data    = lr_key_template
       iv_field  = 'MANDT'
       iv_val    = sy-mandt ) > 0.
      lv_offset = 5.
    ENDIF.

    set_fval(
       ir_data   = lr_key_template
       iv_field  = 'RELID'
       iv_val    = iv_area ).

    DATA: lv_id_length TYPE i.

    lv_id_length = strlen( iv_id ).

    <ls_key_template>+lv_offset(lv_id_length) = iv_id.

    select_records(
      EXPORTING
        iv_table  = iv_table
        it_key    = <lt_key_tab>
      IMPORTING
        et_result = <lt_db_data> ).

    DATA: lv_data_string TYPE string.

    FIELD-SYMBOLS: <ls_db_row> TYPE any.

    LOOP AT <lt_db_data> ASSIGNING <ls_db_row>.

      get_clustd_from_wa(
       EXPORTING
         is_db_record   = <ls_db_row>
       CHANGING
         cv_data_string = lv_data_string ).

    ENDLOOP.

    IF lv_data_string IS NOT INITIAL.

      DATA: lv_data_xstring TYPE xstring.

      lv_data_xstring = lv_data_string.

      DATA: lo_reader TYPE REF TO cl_sxml_string_reader.

      lo_reader ?= cl_sxml_string_reader=>create( lv_data_xstring ).

      CALL TRANSFORMATION id SOURCE XML lo_reader
         RESULT data = ev_data.

      IF es_addtl_data IS SUPPLIED.
        MOVE-CORRESPONDING <ls_db_row> TO es_addtl_data.
      ENDIF.
    ENDIF.