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: 

Store PDF as GOS attachment

Former Member
0 Kudos

Hello,

I want to store a PDF file from the archive server as a GOS attachment. I get the PDF data with "ARCHIVOBJECT_GET_TABLE" and its stored in tables type tbl1024 and type DOCS. My question is, how to convert it to type SOLI so i can store it with "SO_OBJECT_INSERT". I tried everything, but when i tried to open the attachment, i got an error, saying the file is corrupted.

1 ACCEPTED SOLUTION

Former Member

Solved.

Here is the code if someone need it:

   CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
     EXPORTING
       input_length = in_len
*      FIRST_LINE   = 0
*      LAST_LINE    = 0
     IMPORTING
       buffer       = lv_xstring
     TABLES
       binary_tab   = lt_binarchivobject
     EXCEPTIONS
       failed       = 1
       OTHERS       = 2.
   IF sy-subrc <> 0.
"error
   ENDIF.


   CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
     EXPORTING
       buffer          = lv_xstring
*      append_to_table = 'X'
     IMPORTING
       output_length   = lv_solix_length
     TABLES
       binary_tab      = lt_solixtab.


   DATA: wa_soli TYPE soli,
         wa_solix TYPE solix,
         lt_mappe TYPE STANDARD TABLE OF soli.


   FIELD-SYMBOLS: <ptr_text> TYPE soli,
                  <ptr_x>    TYPE any,
                  <ptr_hex>  TYPE solix,
                  <table>.


   REFRESH lt_mappe.
   LOOP AT lt_solixtab INTO wa_solix.
     CLEAR wa_soli.
     ASSIGN wa_soli TO <ptr_hex> CASTING.
     MOVE wa_solix TO <ptr_hex>.
     APPEND wa_soli TO lt_mappe.
   ENDLOOP.

3 REPLIES 3

NTeunckens
Active Contributor
0 Kudos

Please add some of your Code so we can actually see what Conversion you have already done (if any).

Furthermore : Google'ing "SAP convert PDF to SOLIX" results in a lot of Information to get you started ...

Former Member

Solved.

Here is the code if someone need it:

   CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
     EXPORTING
       input_length = in_len
*      FIRST_LINE   = 0
*      LAST_LINE    = 0
     IMPORTING
       buffer       = lv_xstring
     TABLES
       binary_tab   = lt_binarchivobject
     EXCEPTIONS
       failed       = 1
       OTHERS       = 2.
   IF sy-subrc <> 0.
"error
   ENDIF.


   CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
     EXPORTING
       buffer          = lv_xstring
*      append_to_table = 'X'
     IMPORTING
       output_length   = lv_solix_length
     TABLES
       binary_tab      = lt_solixtab.


   DATA: wa_soli TYPE soli,
         wa_solix TYPE solix,
         lt_mappe TYPE STANDARD TABLE OF soli.


   FIELD-SYMBOLS: <ptr_text> TYPE soli,
                  <ptr_x>    TYPE any,
                  <ptr_hex>  TYPE solix,
                  <table>.


   REFRESH lt_mappe.
   LOOP AT lt_solixtab INTO wa_solix.
     CLEAR wa_soli.
     ASSIGN wa_soli TO <ptr_hex> CASTING.
     MOVE wa_solix TO <ptr_hex>.
     APPEND wa_soli TO lt_mappe.
   ENDLOOP.

VHMG
Discoverer
0 Kudos

Thanks for the information, it works correctly. I attach this code that works and can be improved.

Attach PDF file to FB01, from a BASE64 STRING.

 

DATA: twebpdf         TYPE string,
fic_binario     TYPE xstring,
gs_fol_id       TYPE soodk,
gv_ext          TYPE sood1-file_ext,
gv_fname        TYPE sood1-objdes,
gs_obj_id       TYPE soodk,
lv_solix_length TYPE i,
lt_solixtab     TYPE STANDARD TABLE OF solix,
wa_soli         TYPE soli,
wa_solix        TYPE solix,
lt_mappe        TYPE STANDARD TABLE OF soli,
ls_obj_data     TYPE sood1,
lt_objhead      TYPE STANDARD TABLE OF soli,
ls_folmem_k     TYPE sofmk,
ls_note         TYPE borident,
lv_ep_note      TYPE borident-objkey,
ls_object       TYPE borident.

FIELD-SYMBOLS: <ptr_text> TYPE soli,
         <ptr_x>    TYPE any,
         <ptr_hex>  TYPE solix,
         <table>.


" PDF string base64
twebpdf = wa_header-pdf.

" Decode base64 a xstring
CALL FUNCTION 'SSFC_BASE64_DECODE'
EXPORTING
b64data = twebpdf
IMPORTING
bindata = fic_binario.

" Conversion xstring a solix
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
buffer        = fic_binario
IMPORTING
output_length = lv_solix_length
TABLES
binary_tab    = lt_solixtab.


REFRESH lt_mappe.
LOOP AT lt_solixtab INTO wa_solix.
CLEAR wa_soli.
ASSIGN wa_soli TO <ptr_hex> CASTING.
MOVE wa_solix TO <ptr_hex>.
APPEND wa_soli TO lt_mappe.
ENDLOOP.

CALL FUNCTION 'SO_FOLDER_ROOT_ID_GET'
EXPORTING
region    = 'B'
IMPORTING
folder_id = gs_fol_id
EXCEPTIONS
OTHERS    = 1.

CONCATENATE i_obj_key+10(4) i_obj_key+0(10) i_obj_key+14(4) '.PDF' INTO gv_fname.
CONDENSE gv_fname NO-GAPS.

ls_obj_data-objsns   = 'O'.
ls_obj_data-objla    = sy-langu.
ls_obj_data-objdes   = gv_fname.
ls_obj_data-file_ext = 'PDF'.
ls_obj_data-objlen   = lines( lt_mappe ) * 255.
CONDENSE ls_obj_data-objlen.

CALL FUNCTION 'SO_OBJECT_INSERT'
EXPORTING
folder_id             = gs_fol_id
object_type           = 'EXT'
object_hd_change      = ls_obj_data
IMPORTING
object_id             = gs_obj_id
TABLES
objhead               = lt_objhead
objcont               = lt_mappe
EXCEPTIONS
active_user_not_exist = 35
folder_not_exist      = 6
object_type_not_exist = 17
owner_not_exist       = 22
parameter_error       = 23
OTHERS                = 1000.


CONCATENATE i_obj_key+10(4) i_obj_key+0(10) i_obj_key+14(4) INTO ls_object-objkey RESPECTING BLANKS.

ls_object-objtype = 'FIPP'.
ls_note-objtype   = 'MESSAGE'.

CONCATENATE gs_fol_id-objtp gs_fol_id-objyr gs_fol_id-objno
      gs_obj_id-objtp gs_obj_id-objyr gs_obj_id-objno
      INTO ls_note-objkey.

CALL FUNCTION 'BINARY_RELATION_CREATE_COMMIT'
EXPORTING
obj_rolea    = ls_object
obj_roleb    = ls_note
relationtype = 'ATTA'
EXCEPTIONS
OTHERS       = 1.