Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

byte length in xstring to binary conversion is not getting as expected

former_member183990
Active Contributor
0 Kudos

Hi Gurus,

Correct me , if the below code is correct , if am converting the picture to xstring format, but at front end if i am passing the output of the FM , we weren't able to retreive the picture from this HEX_TAB[]

*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     VALUE(DOCUMENT_ID) LIKE  SOFOLENTI1-DOC_ID
*"     VALUE(FILTER) LIKE  SOFILTERI1 STRUCTURE  SOFILTERI1 DEFAULT
*"       'X '
*"  EXPORTING
*"     VALUE(DOCUMENT_DATA) LIKE  SOFOLENTI1 STRUCTURE  SOFOLENTI1
*"     VALUE(XSTRING_DATA) TYPE  XSTRING
*"  TABLES
*"      OBJECT_HEADER STRUCTURE  SOLISTI1 OPTIONAL
*"      OBJECT_CONTENT STRUCTURE  SOLISTI1 OPTIONAL
*"      OBJECT_PARA STRUCTURE  SOPARAI1 OPTIONAL
*"      OBJECT_PARB STRUCTURE  SOPARBI1 OPTIONAL
*"      ATTACHMENT_LIST STRUCTURE  SOATTLSTI1 OPTIONAL
*"      RECEIVER_LIST STRUCTURE  SORECLSTI1 OPTIONAL
*"      CONTENTS_HEX STRUCTURE  SOLIX OPTIONAL
*"      HEX_TAB STRUCTURE  ZLINE OPTIONAL
*"  EXCEPTIONS
*"      DOCUMENT_ID_NOT_EXIST
*"      OPERATION_NO_AUTHORIZATION
*"      X_ERROR
*"----------------------------------------------------------------------

    CALL FUNCTION 'SO_DOCUMENT_READ_API1'
         EXPORTING
              DOCUMENT_ID                = DOCUMENT_ID
              FILTER                     = FILTER
         IMPORTING
              DOCUMENT_DATA              = DOCUMENT_DATA
         TABLES
              OBJECT_HEADER              = OBJECT_HEADER
              OBJECT_CONTENT             = OBJECT_CONTENT
*              OBJECT_PARA                = OBJECT_PARA
*              OBJECT_PARB                = OBJECT_PARB
*              ATTACHMENT_LIST            = ATTACHMENT_LIST
*              RECEIVER_LIST              = RECEIVER_LIST
         EXCEPTIONS
              DOCUMENT_ID_NOT_EXIST      = 999
              OPERATION_NO_AUTHORIZATION = 21
              COMMUNICATION_FAILURE      = 71
              SYSTEM_FAILURE             = 72
              OTHERS                     = 4.
*    CASE SY-SUBRC.
*      WHEN 'OK'.
*        EXIT.
*      WHEN 'COMMUNICATION_FAILURE'.
*        MESSAGE A672(so) WITH 'MESS' RAISING X_ERROR.
*      WHEN 999.
*        RAISE DOCUMENT_ID_NOT_EXIST.
*      WHEN 'SYSTEM_FAILURE'.
*        MESSAGE A672(so) WITH 'MESS' RAISING X_ERROR.
*      WHEN 'OPERATION_NO_AUTHORIZATION'.
*        RAISE OPERATION_NO_AUTHORIZATION.
*      WHEN OTHERS.
*        RAISE X_ERROR.
*    ENDCASE.
*  CALL FUNCTION 'SO_CONVERT_CONTENTS_BIN'
*    EXPORTING
*      it_contents_bin = object_content[]
*    IMPORTING
*      et_contents_bin = object_content[].


DATA: ASCII_DATA     TYPE SOLISTI1,   "your data returned by SO_DOCUMENT_READ_API1
      STRING_DATA    TYPE STRING.
*      XSTRING_DATA   TYPE XSTRING.
*      HEX_TAB        TYPE TABLE OF SOLIX.

DATA: BYTES TYPE I.
TYPES : BEGIN OF TY_BINARY,
          BINARY_FIELD(1000) TYPE C,
        END OF TY_BINARY.

*DATA : LV_XSTRING type XSTRING.
DATA : HEX_TAB1 TYPE TABLE OF TY_BINARY WITH HEADER LINE.
"1. first I will add some example text to it
*ascii_data = OBJECT_CONTENT ."'Some text which will be converted to BIN form'.
CLEAR ASCII_DATA.
LOOP AT OBJECT_CONTENT INTO OBJECT_CONTENT.
CONCATENATE ASCII_DATA OBJECT_CONTENT  INTO ASCII_DATA ."IN BYTE MODE.CL_ABAP_CHAR_UTILITIES=>CR_LF"
CLEAR OBJECT_CONTENT.
ENDLOOP.
CLEAR STRING_DATA.
"2. then do convesrion to string
STRING_DATA = ASCII_DATA.
CLEAR XSTRING_DATA.
"3. conversion to xstring
CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
  EXPORTING
    TEXT   = STRING_DATA
  IMPORTING
    BUFFER = XSTRING_DATA.
REFRESH: HEX_TAB.
CLEAR: BYTES.
"4. convesrsion to BIN -> your SOLIX type
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
  EXPORTING
    BUFFER        = XSTRING_DATA
*  IMPORTING
*    OUTPUT_LENGTH = BYTES
  TABLES
    BINARY_TAB    = HEX_TAB1.   "here you have results you need.
HEX_TAB[] = HEX_TAB1[].

Thanks

1 REPLY 1

former_member183990
Active Contributor
0 Kudos

Solved using this

/people/siddhartha.jain/blog/2007/01/16/how-to-retrieve-a-generic-object-services-gos-or-sapoffice-document-display-it-in-a-bsp-webdynprojava-application?page=last&x-showcontent=off&x-maxdepth=0

FYI my code is attached

FUNCTION zso_document_read_api1.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     VALUE(DOCUMENT_ID) LIKE  SOFOLENTI1-DOC_ID
*"     VALUE(FILTER) LIKE  SOFILTERI1 STRUCTURE  SOFILTERI1 DEFAULT
*"       'X '
*"  EXPORTING
*"     VALUE(DOCUMENT_DATA) LIKE  SOFOLENTI1 STRUCTURE  SOFOLENTI1
*"     VALUE(XSTRING_DATA) TYPE  XSTRING
*"     VALUE(V_LEN_NUM) TYPE  I
*"  EXCEPTIONS
*"      DOCUMENT_ID_NOT_EXIST
*"      OPERATION_NO_AUTHORIZATION
*"      X_ERROR
*"----------------------------------------------------------------------
  DATA: v_len TYPE so_obj_len.
  DATA: object_header TYPE TABLE OF solisti1,
        object_content TYPE TABLE OF solisti1,
        object_hex TYPE TABLE OF solix,
        wa_object TYPE solisti1,
        input_length TYPE i,
        lin TYPE i.

*clearing the variables.
  CLEAR: xstring_data, v_len,v_len_num,document_data,lin,input_length.
  refresh: object_header, object_content,object_hex.
*Reading object in binary
  CALL FUNCTION 'SO_DOCUMENT_READ_API1'
    EXPORTING
      document_id                = document_id
      filter                     = filter
    IMPORTING
      document_data              = document_data
    TABLES
      object_header              = object_header
      object_content             = object_content
      contents_hex               = object_hex
    EXCEPTIONS
      document_id_not_exist      = 999
      operation_no_authorization = 21
      communication_failure      = 71
      system_failure             = 72
      OTHERS                     = 4.
**size of object_hex
  DESCRIBE TABLE object_hex LINES lin.
  input_length = lin * sy-tleng .

  v_len_num = input_length.
*conversion to xstring from binary.
  CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
    EXPORTING
      input_length = v_len_num
    IMPORTING
      buffer       = xstring_data
    TABLES
      binary_tab   = object_hex.

ENDFUNCTION.

Regards Jana