cancel
Showing results for 
Search instead for 
Did you mean: 

STXL Table SLT row split issue

kirankumar440
Participant
0 Kudos

Any suggestion for this SLT issue FOR table STXL?

SLT is splitting the text into multiple rows (ITEMNO) for each TDOBJECT. Is this the default behavior or is there an alternative to replicate whole text by TDOBJECT as single record

kirankumar440
Participant
0 Kudos

@ roland.szajko any inputs on this issue?

roland_szajko
Product and Topic Expert
Product and Topic Expert
0 Kudos

SLT lies outside of my area of expertise.

Accepted Solutions (0)

Answers (2)

Answers (2)

kirankumar440
Participant
0 Kudos

Ok Thank you @ Micheal ..

Cocquerel
Active Contributor
0 Kudos

Hello,
Within my company, we have implemented some custom ABAP SLT transformation logic to concatenate the text lines. For this, we have change 2 setting in LTRS transaction:

- Table structure change, see below screenshot

- rule assignment


Here is the ABAP logic:

TYPES: BEGIN OF ty_stxl_raw,
clustr TYPE stxl-clustr,
clustd TYPE stxl-clustd,
END OF ty_stxl_raw.

DATA: lt_stxl_raw TYPE STANDARD TABLE OF ty_stxl_raw,
lt_stxl_raw_tmp TYPE STANDARD TABLE OF ty_stxl_raw,
wa_stxl_raw TYPE ty_stxl_raw,
lt_tline TYPE STANDARD TABLE OF tline,
wa_tline TYPE tline.
DATA : lv_append TYPE flag.

DATA : ls_stxl TYPE stxl.
DATA : lt_stxl_tmp TYPE TABLE OF stxl.
DATA : lv_lines TYPE int4.
DATA : lv_srtf2 TYPE srtf2.
DATA : lv_where_clause TYPE string.

DATA : ls_zstxl TYPE zstxl. " Used only for tracking

DATA : lv_string_line TYPE string.

CONSTANTS : c_clust_len TYPE sybin2 VALUE '7902'.



**********************************************************************
FIELD-SYMBOLS : <fs_operation> TYPE any.
DATA lv_load_only TYPE flag.
DATA lv_operation TYPE flag.
ASSIGN '<wa_s_stxl>-iuuc_operat_flag' TO <fs_operation>.
IF sy-subrc <> 0.
lv_load_only = 'X'.
ELSE.
CLEAR lv_load_only .
ENDIF.
lv_operation = <fs_operation>.

**********************************************************************
* PROCESS ***
**Filter out text records that we don't need[To be UnCOMMENT to TRACK Multiline]
*MOVE-CORRESPONDING ls_stxl TO ls_zstxl.
*ls_zstxl-relid = _mt_id+1 + 1.
*CALL FUNCTION 'IUUC_DATE_GET_TIMESTAMP'
* IMPORTING
* e_timestamp = ls_zstxl-timestamp.
*MODIFY zstxl FROM ls_zstxl .
*COMMIT WORK.

IF <wa_s_stxl>-relid = 'TX' .
* AND <wa_s_stxl>-tdobject = 'QMEL'. """ !!! FILTER TO BE MANAGED FOR PERFORMANCE
lv_srtf2 = <wa_s_stxl>-srtf2.
REFRESH lt_stxl_tmp.
MOVE-CORRESPONDING <wa_s_stxl> TO ls_stxl.

IF lv_operation = 'D'.
* Clear ALl lines on HANA side, to delete ( And Replace if Update ).
CONCATENATE
'RELID = ''' <wa_s_stxl>-relid
''' AND TDOBJECT = ''' <wa_s_stxl>-tdobject
''' AND TDNAME = ''' <wa_s_stxl>-tdname
''' AND TDID = ''' <wa_s_stxl>-tdid
''' AND TDSPRAS = ''' <wa_s_stxl>-tdspras ''''
INTO lv_where_clause.

CALL METHOD zcl_slt_utilities=>delete_target_records
EXPORTING
i_mtid = _mt_id
i_tabname = 'ZSTXL_TX_BLOB'
i_where_clause = lv_where_clause
EXCEPTIONS
mtid_not_found = 1
table_not_found = 2
where_clause_error = 3
sql_connection = 4
OTHERS = 5.
IF sy-subrc <> 0.
* Implement suitable error handling here
MESSAGE e398(00) WITH 'Error to delete STXL Records' <wa_s_stxl>-tdobject <wa_s_stxl>-tdname <wa_s_stxl>-tdid.
ENDIF.

EXIT.

ENDIF.




IF <wa_s_stxl>-clustr >= c_clust_len OR <wa_s_stxl>-srtf2 <> 0. " we have to manage several lines in LT_STXL_RAW
** Track Updates for Multi Lines [To be UnCOMMENT to TRACK Multiline]
* MOVE-CORRESPONDING ls_stxl TO ls_zstxl.
* ls_zstxl-relid = _mt_id+1.
* CALL FUNCTION 'IUUC_DATE_GET_TIMESTAMP'
* IMPORTING
* e_timestamp = ls_zstxl-timestamp.
* MODIFY zstxl FROM ls_zstxl .

* Get temporary lines sorted in memory with same key (except SRTF2)
ls_stxl-relid = _mt_id+1.
SELECT * FROM stxl
INTO TABLE lt_stxl_tmp
WHERE
relid = ls_stxl-relid
AND tdobject = ls_stxl-tdobject
AND tdname = ls_stxl-tdname
AND tdid = ls_stxl-tdid
AND tdspras = ls_stxl-tdspras.


APPEND ls_stxl TO lt_stxl_tmp.
SORT lt_stxl_tmp BY srtf2.
DESCRIBE TABLE lt_stxl_tmp LINES lv_lines.
READ TABLE lt_stxl_tmp INTO ls_stxl INDEX lv_lines.
IF lv_lines = ( ls_stxl-srtf2 + 1 ) AND ls_stxl-clustr <> c_clust_len.
* The last line number correspond to the number of lines in STXL; so table is complete
DELETE FROM stxl
WHERE
relid = ls_stxl-relid
AND tdobject = ls_stxl-tdobject
AND tdname = ls_stxl-tdname
AND tdid = ls_stxl-tdid
AND tdspras = ls_stxl-tdspras.
COMMIT WORK.

ELSE.
* Export the current retrived parts of STXL
MOVE-CORRESPONDING <wa_s_stxl> TO ls_stxl.
ls_stxl-relid = _mt_id+1.

MODIFY stxl FROM ls_stxl.
COMMIT WORK AND WAIT.
skip_record.
EXIT.
ENDIF.
ELSE.

APPEND ls_stxl TO lt_stxl_tmp.
ENDIF.

IF <wa_s_stxl>-clustd IS NOT INITIAL.
LOOP AT lt_stxl_tmp INTO ls_stxl.
**Put Source fields into internal table for IMPORT statement to work on
wa_stxl_raw-clustr = ls_stxl-clustr.
wa_stxl_raw-clustd = ls_stxl-clustd.

APPEND wa_stxl_raw TO lt_stxl_raw.
ENDLOOP.
* Unclusterize data with IMPORT
TRY.
IMPORT tline = lt_tline FROM INTERNAL TABLE lt_stxl_raw ACCEPTING TRUNCATION IGNORING CONVERSION ERRORS.
* CATCH SYSTEM-EXCEPTIONS cx_sy_import_format_error = 1 OTHERS = 2.
CATCH cx_sy_import_mismatch_error.
MOVE-CORRESPONDING ls_stxl TO ls_zstxl.
ls_zstxl-error = 'I'.
GET TIME STAMP FIELD ls_zstxl-timestamp.
MODIFY zstxl FROM ls_zstxl.
* MESSAGE i398(00) WITH 'Error Declusturization' ls_stxl-tdobject ls_stxl-tdname.
CATCH cx_sy_compression_error.
MOVE-CORRESPONDING ls_stxl TO ls_zstxl.
ls_zstxl-error = 'E'.
GET TIME STAMP FIELD ls_zstxl-timestamp.
MODIFY zstxl FROM ls_zstxl.
* MESSAGE i398(00) WITH 'Error Declusturization : Compression' ls_stxl-tdobject ls_stxl-tdname.
*
ENDTRY.

LOOP AT lt_tline INTO wa_tline .
* CONCATENATE lv_string_line wa_tline-tdline INTO lv_string_line SEPARATED BY space.
IF wa_tline-tdformat IS INITIAL.
CONCATENATE lv_string_line wa_tline-tdline INTO lv_string_line SEPARATED BY space.
ELSE.
CONCATENATE lv_string_line cl_abap_char_utilities=>cr_lf wa_tline-tdline INTO lv_string_line SEPARATED BY space.
ENDIF.
ENDLOOP.
IF sy-subrc <> 0.
* No Text Found
skip_record.
ELSE.
<wa_r_stxl>-srtf2_max = ls_stxl-srtf2. " Force it to have always the same key for line1
* <wa_r_stxl>-clustr = ls_stxl-srtf2. " SAVE the VAlue from Oringal Key into non used field
<wa_r_stxl>-blob_line = lv_string_line.
ENDIF.
ENDIF.
ELSE.
* OUT of FILTER
skip_record.
ENDIF.