BUILD_EXPORT_KEY_ITAB

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


  METHOD BUILD_EXPORT_KEY_ITAB.

    DATA: lr_insert_row TYPE REF TO data.

    CREATE DATA lr_insert_row LIKE is_export_wa.

    FIELD-SYMBOLS: <ls_insert_row> TYPE any.

    ASSIGN lr_insert_row->* TO <ls_insert_row>.

    <ls_insert_row> = is_export_wa.

    FIELD-SYMBOLS:
      <lv_clustr> TYPE any,
      <lv_clustd> TYPE any,
      <lv_srtf2>  TYPE any.

    ASSIGN COMPONENT 'CLUSTR' OF STRUCTURE <ls_insert_row>
           TO <lv_clustr>.

    ASSIGN COMPONENT 'CLUSTD' OF STRUCTURE <ls_insert_row>
           TO <lv_clustd>.

    ASSIGN COMPONENT 'SRTF2' OF STRUCTURE <ls_insert_row>
           TO <lv_srtf2>.

    DATA: lo_clustd_def TYPE REF TO cl_abap_elemdescr.

    lo_clustd_def ?= cl_abap_typedescr=>describe_by_data( <lv_clustd> ).

    DATA: lv_data_buffer TYPE xstring.

    serialize(
     EXPORTING
       iv_data       = iv_data
       iv_format     = iv_format
     IMPORTING
       ev_xstring    = lv_data_buffer ).

    DATA: lv_data_string TYPE string.

    lv_data_string = lv_data_buffer.

    DATA: lv_string_len TYPE i.

    lv_string_len = strlen( lv_data_string ).

    DATA: lv_offset TYPE i.

    WHILE lv_string_len > 0.
      DATA: lv_part_len TYPE i.

      IF lv_string_len > lo_clustd_def->length.
        lv_part_len = lo_clustd_def->length.
      ELSE.
        lv_part_len = lv_string_len.
      ENDIF.

      lv_string_len = lv_string_len - lo_clustd_def->length.

      <lv_clustd> = lv_data_string+lv_offset(lv_part_len).
      <lv_clustr> = lv_part_len.
      <lv_srtf2> = sy-index.

      lv_offset = lv_offset + lv_part_len.

      APPEND <ls_insert_row> TO ct_export.
    ENDWHILE.

    DATA: lr_key_wa  TYPE REF TO data.
    FIELD-SYMBOLS: <ls_select_key> TYPE any.

    CREATE DATA lr_key_wa LIKE LINE OF ct_key.
    ASSIGN lr_key_wa->* TO <ls_select_key>.
    MOVE-CORRESPONDING is_export_wa TO <ls_select_key>.
    APPEND <ls_select_key> TO ct_key.