‎2010 Aug 19 12:25 AM
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
‎2010 Aug 19 5:46 AM
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
‎2010 Aug 19 6:01 AM
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
‎2010 Aug 25 9:08 AM
‎2010 Dec 01 6:31 PM
‎2010 Dec 02 8:54 AM
* -------- 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.