Quantcast
Channel: ABAP Development
Viewing all articles
Browse latest Browse all 948

How to properly convert SOLIX to XSTRING, without additional bytes

$
0
0

There are several use cases when you need to convert SOLIX table to XSTRING. For example, when you are using sap gateway for downloading files from SAP office, you will need to use conversion from solix to xstring.

 

You can use method cl_bcs_convert=>solix_to_xstring or FM  SCMS_BINARY_TO_XSTRING for this conversion.

 

Now, the issue: SOLIX is a table of RAW 255, that means every line of this table has 255 raw bytes. When you don't specify output length of XSTRING variable, empty raw bytes from the last line are converted as well which means that you will supply corrupted file. It is be readable in most cases, but for example Microsoft Word will show warning message that the file is corrupted, though it can be opened afterwards.

 

Solution is to set number of bytes that needs to be converted as can be seen in following example:

 

    DATA:      lt_file      TYPE solix_tab,      lv_length   TYPE i,      ls_doc_data TYPE sofolenti1.    CALL FUNCTION 'SO_DOCUMENT_READ_API1'      EXPORTING        document_id                = iv_id      IMPORTING        document_data             = ls_doc_data      TABLES        contents_hex               = lt_file      EXCEPTIONS        document_id_not_exist      = 1        operation_no_authorization = 2        x_error                    = 3        OTHERS                     = 4.    IF sy-subrc = 0.      lv_length = ls_doc_data-doc_size.      IF lt_att IS NOT INITIAL.        CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'          EXPORTING            input_length = lv_length          IMPORTING            buffer       = ev_xstring_content          TABLES            binary_tab   = lt_file          EXCEPTIONS            failed       = 1            OTHERS       = 2.      ENDIF.    ENDIF.

Viewing all articles
Browse latest Browse all 948

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>