2015 Mar 03 10:17 AM
Hello i am trying to send a pdf as an attchment and using SO_DOCUMENT_SEND_API1 for this.
but fm gives sy-subrc = 2 which is document_not_sent exception.
i searched everywhere but couldnt find th mistake.
any help would be appriciated.
here is my source code.
CALL FUNCTION 'CONVERT_OTF'
EXPORTING
FORMAT = 'PDF'
MAX_LINEWIDTH = 132
* ARCHIVE_INDEX = ' '
* COPYNUMBER = 0
* ASCII_BIDI_VIS2LOG = ' '
* PDF_DELETE_OTFTAB = ' '
* IMPORTING
* BIN_FILESIZE = lv_len
* BIN_FILE = g_binfil
TABLES
OTF = lt_otfdata
LINES = lt_pdfdata
EXCEPTIONS
ERR_MAX_LINEWIDTH = 1
ERR_FORMAT = 2
ERR_CONV_NOT_POSSIBLE = 3
ERR_BAD_OTF = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
FREE: lt_receivers, lt_packing_list,
lt_contents_bin, lt_contents_txt.
* Assigning the Description of the object sent in the mail
CLEAR ls_document_data.
ls_document_data-obj_name = 'TİTLE'.
ls_document_data-obj_descr = 'TITLE'.
ls_document_data-expiry_dat = sy-datum + 10.
ls_document_data-sensitivty = 'F'.
* LOOP AT gt_mail.
CLEAR : lt_receivers.
lt_receivers-receiver = '[email protected]'.
lt_receivers-rec_type = 'U'.
lt_receivers-com_type = 'INT'.
APPEND lt_receivers.
lt_receivers-COPY = mail_bm.
lt_receivers-rec_type = 'U'.
lt_receivers-com_type = 'INT'.
APPEND lt_receivers.
* ENDLOOP.
CLEAR: lt_contents_txt.
lt_contents_txt-line = 'title1,'.
APPEND lt_contents_txt.CLEAR lt_contents_txt.
APPEND lt_contents_txt.
CONCATENATE 'titl2'
' title3.' INTO lt_contents_txt-line
SEPARATED BY space.
APPEND lt_contents_txt.CLEAR lt_contents_txt.
APPEND lt_contents_txt.
lt_contents_txt-line = 'title4'.
APPEND lt_contents_txt.CLEAR lt_contents_txt.
CLEAR lt_packing_list.
lt_packing_list-transf_bin = space.
lt_packing_list-head_start = 1.
lt_packing_list-head_num = 0.
lt_packing_list-body_start = 1.
lt_packing_list-body_num = LINES( lt_contents_txt ).
lt_packing_list-doc_type = 'RAW'.
APPEND lt_packing_list. CLEAR lt_packing_list.
ls_document_data-doc_size = LINES( lt_contents_txt ) * 255.
CALL FUNCTION 'SX_TABLE_LINE_WIDTH_CHANGE'
EXPORTING
line_width_src = 134
line_width_dst = 255
TABLES
content_in = lt_pdfdata
content_out = lt_contents_bin
EXCEPTIONS
err_line_width_src_too_long = 1
err_line_width_dst_too_long = 2
err_conv_failed = 3
OTHERS = 4.
*Filling the details in SAPoffice: Description of Imported Object
*Components table
DESCRIBE TABLE lt_contents_bin LINES lv_tab_lines.
CLEAR lt_contents_bin.
READ TABLE lt_contents_bin INDEX lv_tab_lines.
IF sy-subrc = 0.
CLEAR: lt_packing_list.
lt_packing_list-transf_bin = 'X'.
lt_packing_list-head_start = 1.
lt_packing_list-head_num = 1.
lt_packing_list-body_start = 1.
lt_packing_list-body_num = lv_tab_lines.
lt_packing_list-obj_langu = sy-langu.
lt_packing_list-doc_type = 'PDF'.
lt_packing_list-obj_name = 'ATTACHMENT'.
lt_packing_list-obj_descr = 'RISK TALEP FORMU.PDF'.
lt_packing_list-doc_size = lv_tab_lines * 255.
APPEND lt_packing_list.CLEAR lt_packing_list.
ENDIF.
lv_put_in_outbox = lv_commit_work = 'X'.
CALL FUNCTION 'SO_DOCUMENT_SEND_API1'
EXPORTING
document_data = ls_document_data
put_in_outbox = lv_put_in_outbox
* sender_address = lv_sender_address
* sender_address_type = lv_sender_address_type
commit_work = lv_commit_work
TABLES
packing_list = lt_packing_list
object_header = lt_object_header
contents_bin = lt_contents_bin
contents_txt = lt_contents_txt
* contents_hex = lt_contents_hex
object_para = lt_object_para
object_parb = lt_object_parb
receivers = lt_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 eq 0.
* gt_data-gonderx = 'X'.
* modify gt_data.
* MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
2015 Mar 03 2:13 PM
2015 Mar 03 3:31 PM
Hi,
Please see the following code which I used which is perfectly working.
Please change your lines of code for DOC_SIZE and SENSITIVITY as per BOLD lines in below code.
DESCRIBE TABLE li_contents LINES l_lines_cnt.
READ TABLE li_contents INTO lst_contents INDEX l_lines_cnt.
***** Step 2 - Fill the document data, specify the mail body size
** Document Data
** Subject Line in the mail
lst_document_data-obj_name = 'FI_AP'.
lst_document_data-obj_descr = 'Audit Trail File'. " Title of Mail
lst_document_data-sensitivty = 'F'.
lst_document_data-doc_size = ( l_lines_cnt - 1 ) * 255 + strlen( lst_contents ).
*-------------- Created Text Element
lst_object_header = ' Audit Trail File Log'. "#EC *
APPEND lst_object_header TO li_object_header.
CLEAR: lst_object_header.
I hope the line as per below code are not really required
Just comment these section and make the changes as per BOLD lines above and see.
Also see if CALL FUNCTION 'SX_TABLE_LINE_WIDTH_CHANGE' is executing without any exceptions.
Regards,
Rafi
2015 Mar 04 4:30 PM
thanks for your reply.
i did what you have asked me but result hasnt changed.What might be wrong ?
CALL FUNCTION 'SX_TABLE_LINE_WIDTH_CHANGE returns 0 as sy-subrc so no exceptions.
here is my new code :
LEAR: lt_contents_txt.
lt_contents_txt-line = 'Sayın yetkili,'.
APPEND lt_contents_txt.CLEAR lt_contents_txt.
APPEND lt_contents_txt.
CONCATENATE 'Ekte tarafınıza ait limit formu'
' bulunmaktadır.' INTO lt_contents_txt-line
SEPARATED BY space.
APPEND lt_contents_txt.CLEAR lt_contents_txt.
APPEND lt_contents_txt.
lt_contents_txt-line = 'Saygılarımızla,'.
APPEND lt_contents_txt.CLEAR lt_contents_txt.
CLEAR lt_packing_list.
lt_packing_list-transf_bin = space.
lt_packing_list-head_start = 1.
lt_packing_list-head_num = 0.
lt_packing_list-body_start = 1.
lt_packing_list-body_num = LINES( lt_contents_txt ).
lt_packing_list-doc_type = 'RAW'.
APPEND lt_packing_list.
CLEAR lt_packing_list.
CALL FUNCTION 'SX_TABLE_LINE_WIDTH_CHANGE'
EXPORTING
line_width_src = 134
line_width_dst = 255
TABLES
content_in = lt_pdfdata
content_out = lt_contents_bin
EXCEPTIONS
err_line_width_src_too_long = 1
err_line_width_dst_too_long = 2
err_conv_failed = 3
OTHERS = 4.
*Filling the details in SAPoffice: Description of Imported Object
*Components table
DESCRIBE TABLE lt_contents_bin LINES lv_tab_lines.
CLEAR lt_contents_bin.
READ TABLE lt_contents_bin into lt_cont INDEX lv_tab_lines.
IF sy-subrc = 0.
CLEAR: lt_packing_list.
* lt_packing_list-transf_bin = 'X'.
* lt_packing_list-head_start = 1.
* lt_packing_list-head_num = 1.
* lt_packing_list-body_start = 1.
* lt_packing_list-body_num = lv_tab_lines.
lt_packing_list-obj_langu = sy-langu.
lt_packing_list-doc_type = 'PDF'.
lt_packing_list-obj_name = 'ATTACHMENT'.
lt_packing_list-obj_descr = 'ZFUAR ÇIKTI.PDF'.
lt_packing_list-doc_size = lv_tab_lines * 255.
APPEND lt_packing_list.CLEAR lt_packing_list.
ENDIF.
CLEAR ls_document_data.
ls_document_data-obj_name = 'SMARTFORM'.
ls_document_data-obj_descr = 'SMARTFORM'.
ls_document_data-expiry_dat = sy-datum + 10.
ls_document_data-sensitivty = 'F'.
ls_document_data-doc_size = ( lv_tab_lines - 1 ) * 255 +
strlen( lt_cont ).
lv_put_in_outbox = lv_commit_work = 'X'.
2015 Mar 04 5:13 PM
2015 Mar 04 5:16 PM
2015 Mar 04 8:05 PM
hi,
i have checked them all for at least 2 times.it is still giving me exception 2.
is there basis like adjustment in sap to enable send mails ? because there is nothing in SOST.
thank you for your answers.
2015 Mar 05 9:22 AM
Hi,
Please paste here once again your latest code.
If it is still difficult with FM SO_DOCUMENT_SEND_AP1I then you can use the class CL_BCS it is very simpler than SO_DOCUMENT_SEND_AP1I.
Regards,
Rafi
2015 Mar 05 9:23 AM
hi,
i have found the problem.
mail arrangements of the system has not been done so sender adress has to be filled manually.
2015 Mar 05 9:30 AM
Hi,
The code goes here
types:
**For Email Body
ty_email_body TYPE STANDARD TABLE OF solisti1 .
**Declaration for mail sending using classes
DATA: l_send_request TYPE REF TO cl_bcs,
l_document TYPE REF TO cl_document_bcs,
l_recipient TYPE REF TO if_recipient_bcs,
l_bcs_exception TYPE REF TO cx_bcs,
l_lines TYPE i, " Lines count
l_size TYPE sood-objlen. " Size of Attachment
* l_extension TYPE soodk-objtp VALUE 'RAW'. " TXT format
DATA: l_sent_to_all TYPE os_boolean,
l_subject TYPE sood-objdes,
l_error TYPE sy-subrc,
l_attach_head TYPE soli_tab.
TRY.
* -------- create persistent send request ------------------------
l_send_request = cl_bcs=>create_persistent( ).
* -------- create and set document with attachment ---------------
* create document object from internal table with text
l_subject = i_mail_subject.
l_document = cl_document_bcs=>create_document(
i_type = i_extension
i_text = i_email_text
i_subject = l_subject ).
* Attachment for records
l_lines = lines( i_attachment ).
l_size = l_lines * 255.
l_document->add_attachment(
i_attachment_type = i_extension
i_attachment_subject = l_subject
i_attachment_size = l_size
i_att_content_text = i_attachment ).
* add document object to send request
l_send_request->set_document( l_document ).
* --------- add recipient (e-mail address) -----------------------
* create recipient object
l_recipient = cl_cam_address_bcs=>create_internet_address( i_email_address ).
* add recipient object to send request
l_send_request->add_recipient( l_recipient ).
* ---------- send document ---------------------------------------
l_sent_to_all = l_send_request->send( i_with_error_screen = 'X' ).
IF l_sent_to_all IS NOT INITIAL.
COMMIT WORK.
* Populate error return code
l_error = sy-subrc.
ELSE.
l_error = 4.
ENDIF.
* ------------ exception handling ----------------------------------
CATCH cx_bcs INTO l_bcs_exception.
l_error = 4.
ENDTRY.