IMPORT_DATA_MULTIPLE

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


  METHOD IMPORT_DATA_MULTIPLE.

    DATA:
          lr_db_data       TYPE REF TO data.

    FIELD-SYMBOLS:
          <lt_db_data> TYPE STANDARD TABLE.

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

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

    DATA: lr_result_data TYPE REF TO data.

    CREATE DATA lr_result_data LIKE LINE OF et_result.
    FIELD-SYMBOLS: <ls_result_wa> TYPE any.

    ASSIGN lr_result_data->* TO <ls_result_wa>.

    DATA:
      lr_current_key  TYPE REF TO data,
      lr_previous_key TYPE REF TO data.

    CREATE DATA lr_current_key LIKE LINE OF it_key.
    CREATE DATA lr_previous_key LIKE LINE OF it_key.

    FIELD-SYMBOLS: <ls_current_key> TYPE any.
    FIELD-SYMBOLS: <ls_previous_key> TYPE any.

    ASSIGN lr_current_key->* TO <ls_current_key>.
    ASSIGN lr_previous_key->* TO <ls_previous_key>.

    DATA: lv_data_string TYPE string.

    FIELD-SYMBOLS: <ls_db_data_wa> TYPE any.

    LOOP AT <lt_db_data>
         ASSIGNING <ls_db_data_wa>.

      DATA: lv_insert_flag TYPE flag.

      CLEAR: <ls_current_key>.
      MOVE-CORRESPONDING <ls_db_data_wa> TO <ls_current_key>.

      IF <ls_previous_key> IS NOT INITIAL.
        IF <ls_previous_key> <> <ls_current_key>.

          lv_insert_flag = abap_true.
        ENDIF.
      ENDIF.

      IF lv_insert_flag IS NOT INITIAL.
        collect_result(
          EXPORTING
            iv_data_field = iv_data_field
          CHANGING
            cv_string     = lv_data_string
            cs_result     = <ls_result_wa>
            ct_result     = et_result ).
      ENDIF.

      CLEAR: <ls_result_wa>.
      MOVE-CORRESPONDING <ls_db_data_wa> TO <ls_result_wa>.

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

      <ls_previous_key> = <ls_current_key>.

    ENDLOOP.

    IF lv_data_string IS NOT INITIAL.
      collect_result(
        EXPORTING
          iv_data_field = iv_data_field
        CHANGING
          cv_string     = lv_data_string
          cs_result     = <ls_result_wa>
          ct_result     = et_result ).
    ENDIF.