cancel
Showing results for 
Search instead for 
Did you mean: 

How to handle combined multiple Images into a single PDF file in SAP Gateway & SAPUI5 App?

SBLSVRamana
Explorer
0 Kudos

Hi,

We have a scenario where a multiple picture will be captured in SAP UI5 app and combined into a single PDF file which will be attached to Work Order (IW33) in SAP ECC.

In frontend UI5 app, we have converted Image into Binary format and clubbed into a single a PDF file and converted to base64 file and sent to Gateway server.

In gateway DPC class, we have implemented the below code but it's showing the Pics added to PDF file clearly. i.e. The image is appearing with no image which is attached below.

* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Public Method ZCL_GOS_UTILITY=>ATTACH_DOCUMENT
* +-------------------------------------------------------------------------------------------------+
* | [--->] IV_ATTACH_KEY TYPE SO_ENTRYID
* | [--->] IV_ATTACH_TYPE TYPE SIBFTYPEID
* | [<---] ET_RETURN TYPE BAPIRET2_TAB
* | [<-->] CV_MIME_TYPE TYPE W3CONTTYPE
* | [<-->] CS_STREAM TYPE STRING
* | [<-->] CV_FILE_NAME TYPE SDOK_FILNM
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD attach_document.

DATA: ls_doc_data TYPE sodocchgi1,
ls_doc_info TYPE sofolenti1,
ls_folder_id TYPE soodk,
ls_obj_rolea TYPE borident,
ls_obj_roleb TYPE borident,

lt_obj_hdr TYPE TABLE OF solisti1,
lt_obj_cont TYPE TABLE OF solisti1,
lt_hex_cont TYPE TABLE OF solix,

lv_filename TYPE string,
lv_size TYPE so_obj_len,
lv_length TYPE i,
lv_extension TYPE soodk-objtp,
lv_msgno TYPE msgno,
lv_out_char_decoded TYPE string,
lv_xstring TYPE xstring.

DATA : obj TYPE REF TO cl_bcs_convert.
CREATE OBJECT obj.

* TOJTB table will have all BOR data

* IF cs_stream IS NOT INITIAL. "Changed by shabbi
IF cs_stream IS INITIAL.
CALL METHOD prepare_log(
EXPORTING
iv_msgid = gc_msgid
iv_msgty = gc_msgty_e
iv_msgno = '000'
CHANGING
ct_return = et_return ).
EXIT.
ENDIF.

** lt_hex_cont = cl_bcs_convert=>xstring_to_solix( lv_xstring ).
**** TRY.
**** CALL METHOD cl_bcs_convert=>string_to_solix
**** EXPORTING
**** iv_string = cs_stream
**** IMPORTING
**** et_solix = lt_hex_cont.
**** CATCH cx_bcs .
**** ENDTRY.

*** CALL METHOD cl_http_utility=>if_http_utility~decode_base64
*** EXPORTING
*** encoded = cs_stream
*** RECEIVING
*** decoded = lv_out_char_decoded.

TRY.
CALL METHOD cl_bcs_convert=>string_to_solix
EXPORTING
iv_string = cs_stream
IMPORTING
et_solix = lt_hex_cont
ev_size = lv_size.
CATCH cx_bcs .
ENDTRY.

** TRY.
** CALL METHOD cl_bcs_convert=>string_to_soli
** EXPORTING
** iv_string = cs_stream "lv_out_char_decoded
** RECEIVING
** et_soli = lt_obj_cont.
** ENDTRY.
***
*** CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
*** EXPORTING
*** text = cs_stream "lv_out_char_decoded
*** mimetype = cv_mime_type "'APPLICATION/PDF'
*** IMPORTING
*** buffer = lv_xstring. "lt_hex_cont.
***
*** CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
*** EXPORTING
*** buffer = lv_xstring
*** TABLES
*** binary_tab = lt_hex_cont.

*** CALL FUNCTION 'SSFC_BASE64_DECODE'
*** EXPORTING
*** b64data = cs_stream
*** IMPORTING
*** bindata = lv_xstring.
***
*** CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
*** EXPORTING
*** buffer = lv_xstring
*** append_to_table = 'X'
*** IMPORTING
*** output_length = lv_length
*** TABLES
*** binary_tab = lt_hex_cont.

"1.1 Get the folder id
CALL FUNCTION 'SO_FOLDER_ROOT_ID_GET'
EXPORTING
" OWNER = ' '
region = 'B'
IMPORTING
folder_id = ls_folder_id
EXCEPTIONS
communication_failure = 1
owner_not_exist = 2
system_failure = 3
x_error = 4
OTHERS = 5.

IF sy-subrc EQ 0.
ls_doc_data-obj_name = 'MESSAGE'.
ls_doc_data-obj_descr = cv_file_name.
ls_doc_data-obj_langu = 'EN'.

APPEND INITIAL LINE TO lt_obj_hdr
ASSIGNING FIELD-SYMBOL(<fs_obj_hdr>).
IF <fs_obj_hdr> IS ASSIGNED.
CONCATENATE '&SO_FILENAME=' cv_file_name INTO <fs_obj_hdr>-line.
ENDIF.
APPEND INITIAL LINE TO lt_obj_hdr
ASSIGNING <fs_obj_hdr>.
IF <fs_obj_hdr> IS ASSIGNED.
<fs_obj_hdr>-line = '&SO_FORMAT=BIN'.
ENDIF.

CALL FUNCTION 'TRINT_FILE_GET_EXTENSION'
EXPORTING
filename = cv_file_name
IMPORTING
extension = lv_extension.

* lv_extension = cv_mime_type.

"3.1 Insert the Document Attachment into BOR
CALL FUNCTION 'SO_DOCUMENT_INSERT_API1'
EXPORTING
folder_id = ls_folder_id
document_data = ls_doc_data
document_type = lv_extension
IMPORTING
document_info = ls_doc_info
TABLES
object_header = lt_obj_hdr
* object_content = lt_obj_cont
contents_hex = lt_hex_cont
EXCEPTIONS
folder_not_exist = 1
document_type_not_exist = 2
operation_no_authorization = 3
parameter_error = 4
x_error = 5
enqueue_error = 6
OTHERS = 7.

IF sy-subrc EQ 0.
ls_obj_rolea-objkey = iv_attach_key.
ls_obj_rolea-objtype = iv_attach_type.

"Attachment folder id is in g_docinfo
ls_obj_roleb-objkey = ls_doc_info-doc_id.
ls_obj_roleb-objtype = 'MESSAGE'.
"4 Create binary relation
CALL FUNCTION 'BINARY_RELATION_CREATE'
EXPORTING
obj_rolea = ls_obj_rolea
obj_roleb = ls_obj_roleb
relationtype = 'ATTA'
EXCEPTIONS
no_model = 1
internal_error = 2
unknown = 3
OTHERS = 4.

IF sy-subrc EQ 0.
COMMIT WORK.
ELSE. " Binary Relation creation error handling
CASE sy-subrc.
WHEN 1. "no_model
lv_msgno = '008'.
WHEN 2. "internal_error
lv_msgno = '009'.
WHEN 3. "unknown
lv_msgno = '010'.
WHEN 4. "OTHERS
lv_msgno = '011'.
ENDCASE.

CALL METHOD prepare_log
EXPORTING
iv_msgid = gc_msgid
iv_msgty = gc_msgty_e
iv_msgno = lv_msgno
CHANGING
ct_return = et_return.
ENDIF.

ELSE. " Insert Document to API error handling
CASE sy-subrc.
WHEN 1. "folder_not_exist
lv_msgno = '001'.
WHEN 2. "document_type_not_exist
lv_msgno = '002'.
WHEN 3. "operation_no_authorization
lv_msgno = '003'.
WHEN 4. "parameter_error
lv_msgno = '004'.
WHEN 5. "x_error
lv_msgno = '005'.
WHEN 6. "enqueue_error
lv_msgno = '006'.
WHEN 7. "OTHERS
lv_msgno = '007'.
ENDCASE.

CALL METHOD prepare_log
EXPORTING
iv_msgid = gc_msgid
iv_msgty = gc_msgty_e
iv_msgno = lv_msgno
CHANGING
ct_return = et_return.

ENDIF.

ELSE.
CASE sy-subrc.
WHEN 1. "communication_failure
lv_msgno = '012'.
WHEN 2. "owner_not_exist
lv_msgno = '013'.
WHEN 3. "system_failure
lv_msgno = '014'.
WHEN 4. "x_error
lv_msgno = '015'.
WHEN 5. "OTHERS
lv_msgno = '016'.
ENDCASE.

CALL METHOD prepare_log
EXPORTING
iv_msgid = gc_msgid
iv_msgty = gc_msgty_e
iv_msgno = lv_msgno
CHANGING
ct_return = et_return.
ENDIF.

ENDMETHOD.

* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Public Method ZCL_GOS_UTILITY=>PREPARE_LOG
* +-------------------------------------------------------------------------------------------------+
* | [--->] IV_MSGID TYPE MSGID
* | [--->] IV_MSGNO TYPE MSGNO
* | [--->] IV_MSGTY TYPE MSGTY
* | [--->] IV_MSGV1 TYPE MSGV1(optional)
* | [--->] IV_MSGV2 TYPE MSGV2(optional)
* | [--->] IV_MSGV3 TYPE MSGV3(optional)
* | [--->] IV_MSGV4 TYPE MSGV4(optional)
* | [<-->] CT_RETURN TYPE BAPIRET2_TAB
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD prepare_log.

APPEND INITIAL LINE TO ct_return
ASSIGNING FIELD-SYMBOL(<fs_return>).
IF <fs_return> IS ASSIGNED.
<fs_return>-type = iv_msgty.
<fs_return>-id = iv_msgid.
<fs_return>-number = iv_msgno.
<fs_return>-message_v1 = iv_msgv1.
<fs_return>-message_v2 = iv_msgv2.
<fs_return>-message_v3 = iv_msgv3.
<fs_return>-message_v4 = iv_msgv4.

CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
id = iv_msgid
lang = sy-langu
no = iv_msgno
v1 = iv_msgv1
v2 = iv_msgv2
v3 = iv_msgv3
v4 = iv_msgv4
IMPORTING
msg = <fs_return>-message
EXCEPTIONS
not_found = 1
OTHERS = 2.
ENDIF.

ENDMETHOD.

pic-not-converted-properly.png

Kindly help em to solve the conversion issue.

Regards,

Ramana.

Accepted Solutions (0)

Answers (0)