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.