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

document_not_sent exception with fm SO_DOCUMENT_SEND_API1

f_cemunal
Participant
0 Likes
1,581

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.

9 REPLIES 9
Read only

f_cemunal
Participant
0 Likes
1,460

any ideas ?

Read only

Former Member
0 Likes
1,460

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


  1. lt_packing_list-transf_bin = 'X'
  2. lt_packing_list-head_start = 1
  3. lt_packing_list-head_num = 1
  4. lt_packing_list-body_start = 1
  5. lt_packing_list-body_num = lv_tab_lines

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


Read only

0 Likes
1,460

hello,

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'.



Read only

Former Member
0 Likes
1,460

Hi,


Can you please cross check with the below link code




Regards,

Rafi

Read only

Former Member
0 Likes
1,460

Hi,

Please refer this as well.

Convert Spool to PDF

Regards,

Rafi

Read only

0 Likes
1,460

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.

Read only

Former Member
0 Likes
1,460

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

Read only

0 Likes
1,460

hi,

i have found the problem.

mail arrangements of the system has not been done so sender adress has to be filled manually.

Read only

Former Member
0 Likes
1,460

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.