Application Development and Automation 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: 
Read only

Error while sending by email a PDF from SMARTFORM

Former Member
0 Likes
662

Hi all.

Wer'e upgrading to EP4 and I can send smartform PDF by email but get an error message while trying to open it.

*FORM convert_otf_2_pdf.

call function 'CONVERT_OTF_2_PDF'

importing

bin_filesize = lv_len_in

tables

otf = gs_return-otfdata[]

doctab_archive = it_docs[]

lines = lt_tline[]

exceptions

err_conv_not_possible = 1

err_otf_mc_noendmarker = 2

others = 3.

if sy-subrc ne 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

endif.

*then to send it as Email attachemnt we need to format the PDF data

call function 'SX_TABLE_LINE_WIDTH_CHANGE'

exporting

line_width_dst = '255'

tables

content_in = lt_tline

content_out = lt_objbin

exceptions

err_line_width_src_too_long = 1

err_line_width_dst_too_long = 2

err_conv_failed = 3

others = 4.

clear ls_solisti.

ls_solisti = 'Payment Notification'.

append ls_solisti to lt_objtxt.

  • DESCRIBE TABLE lt_objtxt LINES lv_lines.

  • READ TABLE lt_objtxt INDEX lv_lines.

ls_doc_chg-obj_name = 'Payment Notification'.

ls_doc_chg-expiry_dat = sy-datum + 10.

ls_doc_chg-obj_descr = 'Payment Notification'.

ls_doc_chg-sensitivty = 'F'.

ls_doc_chg-doc_size = 255.

ls_objpack-head_start = 1.

ls_objpack-head_num = 0.

ls_objpack-body_start = 1.

ls_objpack-body_num = 1. "lv_lines.

ls_objpack-doc_type = 'RAW'.

append ls_objpack to lt_objpack.

  • (pdf-Attachment)

ls_objpack-transf_bin = 'X'.

ls_objpack-head_start = 1.

ls_objpack-head_num = 0.

ls_objpack-body_start = 1.

describe table lt_objbin lines lv_lines.

"READ TABLE lt_objbin INDEX lv_lines.

ls_objpack-doc_size = lv_lines * 255 .

ls_objpack-body_num = lv_lines.

ls_objpack-doc_type = 'PDF'.

ls_objpack-obj_name = 'NOTIF'.

ls_objpack-obj_descr = 'Payment Notif.'.

append ls_objpack to lt_objpack.

clear lt_dli[].

lv_name = p_list.

call function 'SO_DLI_READ_API1'

exporting

dli_name = lv_name

dli_id = '000000000001'

shared_dli = 'X'

tables

dli_entries = lt_dli

exceptions

dli_not_exist = 1

operation_no_authorization = 2

parameter_error = 3

x_error = 4

others = 5.

if sy-subrc eq 0 and

lt_dli[] is not initial.

  • clear ls_reclist.

ls_reclist-receiver = p_list.

ls_reclist-rec_type = 'C'.

append ls_reclist to lt_reclist.

endif.

call function 'SO_NEW_DOCUMENT_ATT_SEND_API1'

exporting

document_data = ls_doc_chg

put_in_outbox = ''

tables

packing_list = lt_objpack

object_header = ls_objhead

contents_bin = lt_objbin

contents_txt = lt_objtxt

receivers = lt_reclist

exceptions

too_many_receivers = 1

document_not_sent = 2

document_type_not_exist = 3

operation_no_authorization = 4

parameter_error = 5

x_error = 6

enqueue_error = 7

others = 8.

What's wrong ??

Thanks all,

Rebeka

5 REPLIES 5
Read only

aakash_chalasani
Explorer
0 Likes
617

Hello,

Try below code

LOOP AT gt_check_data INTO gw_inc_payment.

CLEAR wa_pa0105.

READ TABLE gt_pa0105 INTO wa_pa0105

WITH KEY pernr = gw_inc_payment-pernr.

IF sy-subrc = 0. ELSE. CONDENSE wa_pa0105-usrid_long NO-GAPS.

TRANSLATE wa_pa0105-usrid_long TO LOWER CASE.

ENDIF.

CALL FUNCTION 'ZHR_ITA_MAIL_PDF'

EXPORTING

im_incentive = gw_ita_inc

im_flag = 'X'

IMPORTING

ls_job_output_info = ls_op_info

EXCEPTIONS

cntl_error_ctrl = 1

cntl_error_cont = 2

cntl_error_load = 3

cntl_error_show = 4

OTHERS = 5.

IF sy-subrc <> 0.

MESSAGE text-024 TYPE 'E'.

ELSE.

CLEAR gt_tline[].

CALL FUNCTION 'CONVERT_OTF'

EXPORTING

format = 'PDF'

IMPORTING

bin_filesize = g_pdfsize

TABLES

otf = ls_op_info-otfdata

lines = gt_tline

EXCEPTIONS

err_max_linewidth = 1

err_format = 2

err_conv_not_possible = 3

err_bad_otf = 4

OTHERS = 5.

IF sy-subrc <> 0.

IF gt_tline IS INITIAL.

MESSAGE text-023 TYPE 'E'.

ENDIF.

ELSE.

  • Data handling with required length

LOOP AT gt_tline INTO gw_tline.

lv_pos = 255 - lv_len.

IF lv_pos > 134. "length of pdf_table

lv_pos = 134.

ENDIF.

gw_objbin+lv_len = gw_tline(lv_pos).

lv_len = lv_len + lv_pos.

IF lv_len = 255. "length of out (contents_bin)

APPEND gw_objbin TO gt_objbin.

CLEAR: gw_objbin, lv_len.

IF lv_pos < 134.

gw_objbin = gw_tline+lv_pos.

lv_len = 134 - lv_pos.

ENDIF.

ENDIF.

ENDLOOP.

IF lv_len > 0.

APPEND gw_objbin TO gt_objbin.

ENDIF.

CLEAR gw_objbin.

  • Mail process with the PDF attachment

PERFORM mail_process_attach USING wa_pa0105-usrid_long.

ENDIF.

ENDIF.

ENDLOOP.

FORM mail_process_attach USING lv_receive TYPE comm_id_long.

**//--- For Sending eMail

DATA : it_packing_list TYPE TABLE OF sopcklsti1,

wa_packing_list TYPE sopcklsti1,

it_receivers TYPE TABLE OF somlreci1,

wa_receivers TYPE somlreci1,

it_message TYPE TABLE OF solisti1,

wa_message TYPE solisti1,

it_line TYPE STANDARD TABLE OF tline,

wa_line TYPE tline,

it_attachment TYPE TABLE OF solisti1,

wa_attachment TYPE solisti1,

wa_doc_data TYPE sodocchgi1,

lv_cnt TYPE i,

lv_tablines TYPE i,

lv_subject TYPE so_obj_des,

lv_incref TYPE string.

*--Populating Mail Recepients

wa_receivers-rec_type = 'U'.

wa_receivers-com_type = 'INT'.

wa_receivers-notif_del = 'X'.

wa_receivers-notif_ndel = 'X'.

wa_receivers-express = 'X'.

  • assgining a receiver's mail id

wa_receivers-receiver = lv_receive.

APPEND wa_receivers TO it_receivers.

CLEAR wa_receivers.

*--Populating the body

CALL FUNCTION 'READ_TEXT'

EXPORTING

client = sy-mandt

id = 'ST'

language = sy-langu

name = gc_so10_name

object = 'TEXT'

TABLES

lines = it_line

EXCEPTIONS

id = 1

language = 2

name = 3

not_found = 4

object = 5

reference_check = 6

wrong_access_to_archive = 7

OTHERS = 8.

IF sy-subrc = 0.

LOOP AT it_line INTO wa_line.

wa_message-line = wa_line-tdline.

APPEND wa_message TO it_message.

CLEAR : wa_line, wa_message.

ENDLOOP.

ENDIF.

*//--- Populate the subject/generic message attributes

wa_doc_data-obj_langu = sy-langu.

READ TABLE it_attachment INTO wa_attachment INDEX lv_cnt.

wa_doc_data-doc_size = ( lv_cnt - 1 ) * 255 + STRLEN( wa_attachment ).

wa_doc_data-obj_name = 'SAPRPT'.

*//--- Subject Begin

CLEAR : lv_subject.

lv_subject = gw_inc_payment-pernr.

SHIFT lv_subject LEFT DELETING LEADING '0'.

CONCATENATE text-009 '(' lv_subject ')'

INTO wa_doc_data-obj_descr

SEPARATED BY space.

*//--- Subject End

wa_doc_data-sensitivty = 'F'.

*--Describe the body of the message

CLEAR : wa_packing_list, it_packing_list[].

wa_packing_list-transf_bin = space.

wa_packing_list-head_start = 1.

wa_packing_list-head_num = 0.

wa_packing_list-body_start = 1.

DESCRIBE TABLE it_message LINES wa_packing_list-body_num.

wa_packing_list-doc_type = 'RAW'.

APPEND wa_packing_list TO it_packing_list.

  • Filling the attachment table

DESCRIBE TABLE gt_objbin LINES lv_tablines.

wa_packing_list-transf_bin = 'X'.

wa_packing_list-head_start = 1.

wa_packing_list-head_num = 0.

wa_packing_list-body_start = 1.

wa_packing_list-body_num = lv_tablines.

wa_packing_list-doc_type = 'PDF'.

wa_packing_list-obj_name = 'ATTACHMENT'(a01).

*//--- Attachment File Name - Begin

CLEAR : lv_subject.

lv_subject = gw_inc_payment-pernr.

lv_incref = gw_inc_payment-incref.

SHIFT lv_subject LEFT DELETING LEADING '0'.

SHIFT lv_incref LEFT DELETING LEADING '0'.

CONCATENATE text-011

lv_subject

gw_inc_payment-itafy

lv_incref

INTO wa_packing_list-obj_descr

SEPARATED BY '_'.

*//--- Attachment File Name - End

wa_packing_list-doc_size = lv_tablines * 255.

APPEND wa_packing_list TO it_packing_list.

CLEAR wa_packing_list.

  • calling the function module to send the mail

CALL FUNCTION 'SO_DOCUMENT_SEND_API1'

EXPORTING

document_data = wa_doc_data

put_in_outbox = 'X'

sender_address = gc_sender

sender_address_type = 'INT'

commit_work = 'X'

TABLES

packing_list = it_packing_list

contents_bin = gt_objbin[]

contents_txt = it_message

receivers = it_receivers

EXCEPTIONS

too_many_receivers = 1

document_not_sent = 2

document_type_not_exist = 3

operation_no_authorization = 4

parameter_error = 5

x_error = 6

enqueue_error = 7

OTHERS = 8.

IF sy-subrc <> 0.

gw_inc_payment-zmail = '0'.

gw_inc_payment-mail_status = text-022.

gw_ita_inc-zmail = '0'.

MODIFY gt_inc_payment FROM gw_inc_payment

TRANSPORTING zmail WHERE incref = gw_inc_payment-incref

AND pernr = gw_inc_payment-pernr.

MODIFY zhr_ita_inc_payk FROM gw_ita_inc.

MESSAGE text-013 TYPE 'E'.

CLEAR gw_ita_inc.

ELSE.

gw_inc_payment-zmail = '1'.

gw_inc_payment-mail_status = text-021.

gw_ita_inc-zmail = '1'.

MODIFY gt_inc_payment FROM gw_inc_payment

TRANSPORTING zmail mail_status

WHERE incref = gw_inc_payment-incref AND

pernr = gw_inc_payment-pernr.

IF sy-subrc = 0.

MODIFY zhr_ita_inc_payk FROM gw_ita_inc.

IF sy-subrc = 0.

MESSAGE text-012 TYPE 'S'.

ENDIF.

ENDIF.

CLEAR gw_ita_inc.

ENDIF.

CLEAR : it_packing_list,

gt_objbin[],

it_message[],

it_receivers[],

wa_doc_data.

ENDFORM. " MAIL_PROCESS_ATTACH

regards

Read only

Former Member
0 Likes
617

Hi,

Can you please just explain your issue?

If i am getting your issue correctly, then you need to use FM 'CONVERT_OTF_2_PDF' as shown below.

You need to import 1 more parameter 'BIN_FILE' whcih you can use further to convert data into binary format.

call function 'CONVERT_OTF_2_PDF' 
importing 
   bin_filesize             = lv_len_in 
   BIN_FILE                 = V_PDF_XSTRING
tables 
   otf = gs_return-otfdata[] 
   doctab_archive = it_docs[] 
   lines = lt_tline[] .

CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
      EXPORTING
        BUFFER     = V_PDF_XSTRING
      TABLES
        BINARY_TAB = I_CONTENT_BIN.

Thanks,

Archana

Read only

Former Member
0 Likes
617

I changed the email sending methods.

Read only

0 Likes
617

Can you please write what method are you using.

Thanks,

AP

Read only

0 Likes
617

*     -------- create persistent send request ------------------------
go_send_request = cl_bcs=>create_persistent( ).


*     -------- create and set document -------------------------------
      GV_pdf_content = cl_document_bcs=>xstring_to_solix( GV_pdf_xstring ).

      Go_document = cl_document_bcs=>create_document(
            i_type    = 'PDF'
            i_hex     = GV_pdf_content
            i_length  = Gv_pdf_size
            i_subject = 'Invoice for NA and CA' ).  "#EC NOTEXT

*     add document object to send request
      GO_send_request->set_document( GO_document ).

*     --------- add recipient (e-mail address) -----------------------
*     create recipient object
       go_recipient = cl_cam_address_bcs=>create_internet_address( LV_EMAIL )."EMAIL id 
*      go_recipient = cl_cam_address_bcs=>create_internet_address( 'EMAIL ID' ).

*     add recipient object to send request
      GO_send_request->add_recipient( GO_recipient ).

*     ---------- send document ---------------------------------------
      GV_sent_to_all = GO_send_request->send( i_with_error_screen = 'X' ).

      commit work.

      if GV_sent_to_all is initial.
        message i500(sbcoms) with LV_EMAIL.
*        message i500(sbcoms) with 'EMAIL ID'.
      else.
        message s022(so).
      endif.

*   ------------ exception handling ----------------------------------
*   replace this rudimentary exception handling with your own one !!!
    catch cx_bcs into Go_bcs_exception.
      message i865(so) with go_bcs_exception->error_type.
  endtry.