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

E-mail functionality using so_new_document_att_send_api1

Former Member
0 Likes
749

Hi

We Implemented E-mail functionality in our tool useing "so_new_document_att_send_api1" standard FM but here im unable to attach excel document .How to attach a excel document in this standard FM plz help.

Asif

4 REPLIES 4
Read only

Former Member
0 Likes
595

hi try this code

&----


*& Report ZTEST_2 *

*& *

&----


*& *

*& *

&----


&----


*& Report ZTEST_2 *

*& *

&----


*& *

*& *

&----


REPORT ztest_2 .

TYPES : BEGIN OF t_email_update_iw32,

aufnr LIKE viaufks-aufnr,

vornr LIKE afvc-vornr,

text(220),

END OF t_email_update_iw32.

DATA : gt_email_update_iw32 TYPE STANDARD TABLE OF t_email_update_iw32,

gw_email_update_iw32 TYPE t_email_update_iw32.

TYPES : BEGIN OF t_email_date_error,

aufnr LIKE viaufks-aufnr,

prueflos LIKE qamr-prueflos,

merknr LIKE qamr-merknr,

text(220),

END OF t_email_date_error.

DATA : gt_email_date_error TYPE STANDARD TABLE OF t_email_date_error,

gw_email_date_error TYPE t_email_date_error.

TYPES : BEGIN OF t_email_conf_doc_error,

aufnr LIKE viaufks-aufnr,

vornr LIKE afvc-vornr,

text(220),

END OF t_email_conf_doc_error.

DATA : gt_email_conf_doc_error TYPE STANDARD TABLE OF

t_email_conf_doc_error,

gw_email_conf_doc_error TYPE t_email_conf_doc_error.

SELECTION-SCREEN : BEGIN OF BLOCK b4 WITH FRAME TITLE text-004.

PARAMETERS : cb_email AS CHECKBOX DEFAULT 'X'.

*SELECTION-SCREEN BEGIN OF LINE.

*SELECTION-SCREEN COMMENT (16) text-007 FOR FIELD p_email1.

PARAMETERS : p_email LIKE somlreci1-receiver,

p_email1 LIKE adr6-smtp_addr.

PARAMETERS : p_table1 AS CHECKBOX,

p_table2 AS CHECKBOX,

p_table3 AS CHECKBOX.

SELECTION-SCREEN : END OF BLOCK b4.

CLEAR gw_email_update_iw32.

REFRESH gt_email_update_iw32.

gw_email_update_iw32-aufnr = '1234567'.

gw_email_update_iw32-vornr = '0010'.

gw_email_update_iw32-text = 'This is table1'.

APPEND gw_email_update_iw32 TO gt_email_update_iw32.

CLEAR gw_email_update_iw32.

gw_email_update_iw32-aufnr = '4564578'.

gw_email_update_iw32-vornr = '0020'.

gw_email_update_iw32-text = 'This is table1'.

APPEND gw_email_update_iw32 TO gt_email_update_iw32.

gw_email_date_error-aufnr = '222615'.

gw_email_date_error-prueflos = '1111'.

gw_email_date_error-merknr = '2222'.

gw_email_date_error-text = 'This is table2'.

APPEND gw_email_date_error TO gt_email_date_error.

gw_email_date_error-aufnr = '222615'.

gw_email_date_error-prueflos = '3333'.

gw_email_date_error-merknr = '4444'.

gw_email_date_error-text = 'This is table2'.

APPEND gw_email_date_error TO gt_email_date_error.

gw_email_conf_doc_error-aufnr = '9900107987'.

gw_email_conf_doc_error-vornr = '999999'.

gw_email_conf_doc_error-text = 'This is table3'.

APPEND gw_email_conf_doc_error TO gt_email_conf_doc_error.

gw_email_conf_doc_error-aufnr = '9900107987'.

gw_email_conf_doc_error-vornr = '999999'.

gw_email_conf_doc_error-text = 'This is table3'.

APPEND gw_email_conf_doc_error TO gt_email_conf_doc_error.

DATA : lw_space VALUE ''.

SET PARAMETER ID 'ZPDF' FIELD lw_space.

DATA : pripar LIKE pri_params.

CALL FUNCTION 'GET_PRINT_PARAMETERS'

EXPORTING

in_parameters = pripar

line_size = 255

layout = 'X_65_132'

no_dialog = 'X'

IMPORTING

out_parameters = pripar

EXCEPTIONS

archive_info_not_found = 1

invalid_print_params = 2

invalid_archive_params = 3

OTHERS = 4.

NEW-PAGE PRINT ON PARAMETERS pripar NO DIALOG .

RESERVE 5 LINES.

DATA : text1(10) TYPE c VALUE 'AUFNR',

text2(10) TYPE c VALUE 'VORNR',

text3(50) TYPE c VALUE 'TEXT'.

IF p_table1 = 'X'.

WRITE AT 10 text1. WRITE AT 30 text2 . WRITE AT 30 text3.

LOOP AT gt_email_update_iw32 INTO gw_email_update_iw32.

WRITE : / gw_email_update_iw32-aufnr , gw_email_update_iw32-vornr ,

gw_email_update_iw32-text.

ENDLOOP.

ENDIF.

WRITE : / sy-uline .

IF p_table2 = 'X'.

WRITE : / 'AUFNR' , 'PRUEFLOS' , 'MERKNR', 'TEXT' .

LOOP AT gt_email_date_error INTO gw_email_date_error.

WRITE : / gw_email_date_error-aufnr, gw_email_date_error-prueflos,

gw_email_date_error-merknr,gw_email_date_error-text.

ENDLOOP.

ENDIF.

WRITE : / sy-uline .

IF p_table3 = 'X'.

WRITE : / 'AUFNR' , 'VORNR' , 'TEXT' .

LOOP AT gt_email_conf_doc_error INTO gw_email_conf_doc_error.

WRITE : / gw_email_conf_doc_error-aufnr,

gw_email_conf_doc_error-vornr, gw_email_conf_doc_error-text.

ENDLOOP.

ENDIF.

NEW-PAGE PRINT OFF.

DATA : mtab_pdf LIKE tline OCCURS 0 WITH HEADER LINE.

DATA : rqident LIKE tsp01-rqident ,

rqcretime LIKE tsp01-rqcretime .

SELECT rqident rqcretime FROM tsp01

INTO (rqident,rqcretime)

WHERE rqowner = sy-uname

ORDER BY rqcretime DESCENDING.

EXIT.

ENDSELECT.

DATA: spool_id LIKE tsp01-rqident.

MOVE rqident TO spool_id.

DATA : p_file LIKE rlgrap-filename VALUE 'C:\file.pdf' ,

numbytes TYPE i,

cancel.

CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'

EXPORTING

src_spoolid = spool_id

  • NO_DIALOG =

  • DST_DEVICE =

  • PDF_DESTINATION =

IMPORTING

pdf_bytecount = numbytes

  • PDF_SPOOLID =

  • LIST_PAGECOUNT =

  • BTC_JOBNAME =

  • BTC_JOBCOUNT =

TABLES

pdf = mtab_pdf

EXCEPTIONS

err_no_abap_spooljob = 1

err_no_spooljob = 2

err_no_permission = 3

err_conv_not_possible = 4

err_bad_destdevice = 5

user_cancelled = 6

err_spoolerror = 7

err_temseerror = 8

err_btcjob_open_failed = 9

err_btcjob_submit_failed = 10

err_btcjob_close_failed = 11

OTHERS = 12

.

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.

  • end

DATA : w_buffer TYPE string. "To convert from 132 to 255

DATA : i_record LIKE solisti1 OCCURS 0 WITH HEADER LINE.

LOOP AT mtab_pdf.

  • Replacing space by ~

TRANSLATE mtab_pdf USING ' ~'.

CONCATENATE w_buffer mtab_pdf INTO w_buffer.

ENDLOOP.

  • Replacing ~ by space

TRANSLATE w_buffer USING '~ ' .

DO.

i_record = w_buffer.

  • Appending 255 characters as a record

APPEND i_record.

SHIFT w_buffer LEFT BY 255 PLACES.

IF w_buffer IS INITIAL.

EXIT.

ENDIF.

ENDDO.

*start try

DATA: objpack LIKE sopcklsti1 OCCURS 2 WITH HEADER LINE.

DATA: objhead LIKE solisti1 OCCURS 1 WITH HEADER LINE.

DATA: objbin LIKE solisti1 OCCURS 10 WITH HEADER LINE.

DATA: objtxt LIKE solisti1 OCCURS 10 WITH HEADER LINE.

DATA: reclist LIKE somlreci1 OCCURS 5 WITH HEADER LINE.

DATA: doc_chng LIKE sodocchgi1.

DATA : tab_lines TYPE c.

doc_chng-obj_name = 'TEST'.

doc_chng-obj_descr = 'Mail came successfully'.

objtxt = 'Regards'.

APPEND objtxt.

objtxt = 'Nitin'.

APPEND objtxt.

objtxt = 'hahaha'.

APPEND objtxt.

DESCRIBE TABLE objtxt LINES tab_lines.

READ TABLE objtxt INDEX tab_lines.

doc_chng-doc_size = ( tab_lines - 1 ) * 255 + STRLEN( objtxt ).

  • * ERSTELLEN DES EINTRAGS ZUM KOMPRIMIERTEN DOKUMENT

CLEAR objpack-transf_bin.

objpack-head_start = 1.

objpack-head_num = 0.

objpack-body_start = 1.

objpack-body_num = tab_lines.

objpack-doc_type = 'RAW'.

APPEND objpack.

  • * ERSTELLEN DER ANLAGE FUR DAS DOKUMENT

**OBJBIN = '\O/ '. APPEND OBJBIN.

**OBJBIN = ' '. APPEND OBJBIN.

**OBJBIN = ' / \ '. APPEND OBJBIN.

LOOP AT i_record.

objbin[] = i_record[].

ENDLOOP.

DESCRIBE TABLE objbin LINES tab_lines.

*objhead = 'picasso.txt'. APPEND objhead.

  • * Erstellen des Eintrags zur komprimierten Anlage

objpack-transf_bin = 'X'.

objpack-head_start = 1.

objpack-head_num = 1.

objpack-body_start = 1.

objpack-body_num = tab_lines.

objpack-doc_type = 'PDF'.

objpack-obj_name = 'PDF File received '.

objpack-obj_descr = 'PDF File received '.

*objpack-doc_size = ( tab_lines ) * 255 .

APPEND objpack.

  • * Fullen der Empfangerliste

refresh reclist.

reclist-rec_type = 'U'.

reclist-receiver = p_email1.

APPEND reclist.

reclist-rec_type = 'B'.

reclist-receiver = sy-uname.

APPEND reclist.

reclist-rec_type = 'U'.

reclist-receiver = p_email.

APPEND reclist.

CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'

EXPORTING

document_data = doc_chng

put_in_outbox = 'X'

TABLES

packing_list = objpack

  • object_header = objhead

contents_bin = objbin

contents_txt = objtxt

receivers = reclist

EXCEPTIONS

too_many_receivers = 1

document_not_sent = 2

operation_no_authorization = 4

OTHERS = 99.

Read only

Former Member
0 Likes
595

copy paste the below given code.it works perfect..

  • Local TYPES declaration

TYPES : BEGIN OF ty_s_smtpadd,

smtp_addr TYPE zglt_distr_list-smtp_addr,

END OF ty_s_smtpadd,

ty_t_smtpadd TYPE STANDARD TABLE OF ty_s_smtpadd.

  • Local Data Declarations

DATA:

  • Variables

lv_tab_lines TYPE sy-tabix,

  • Internal Tables

lt_objpack TYPE STANDARD TABLE OF sopcklsti1, "Number of text lines

lt_reclist TYPE STANDARD TABLE OF somlreci1, "Reciver's details

lt_objhead TYPE STANDARD TABLE OF solisti1, " Column Length

  • Workareas

ls_objpack TYPE sopcklsti1, "Number of text lines

ls_reclist TYPE somlreci1, "Reciver's details

ls_doc_chng TYPE sodocchgi1, "Mail Subject details

ls_objhead TYPE solisti1,

lt_contents TYPE STANDARD TABLE OF solisti1,

ls_contents TYPE solisti1,

ls_err_rec TYPE ty_output,

lc_x(1) TYPE c VALUE gc_x,

lv_lines TYPE i,

lv_hex1(1) TYPE c. "Carriage return

lv_hex1 = cl_abap_char_utilities=>cr_lf.

  • Local Constant Declarations

CONSTANTS:

lc_rec_typ(1) TYPE c VALUE 'U',

lc_doc_typ_raw TYPE so_obj_tp VALUE 'RAW',

lc_doc_typ_xls TYPE so_obj_tp VALUE 'XLS',

lc_tab(1) TYPE c VALUE cl_abap_char_utilities=>horizontal_tab.

  • Creating the document to be sent

ls_doc_chng-obj_name = sy-repid.

  • Prepare the Mail Subject

ls_doc_chng-obj_descr = 'Unpaid AP Invoices log.xls'(h05).

  • Object Description

ls_objhead = ls_doc_chng-obj_descr.

APPEND ls_objhead TO lt_objhead.

  • Populate body of the email

PERFORM populate_email_body.

DESCRIBE TABLE gt_objtxt LINES lv_tab_lines.

READ TABLE gt_objtxt INTO gs_objtxt INDEX lv_tab_lines.

ls_doc_chng-doc_size = ( lv_tab_lines - 1 ) * 255 +

STRLEN( gs_objtxt ).

  • Creating the entry for the compressed document

CLEAR ls_objpack-transf_bin.

ls_objpack-head_start = 1.

ls_objpack-head_num = 0.

ls_objpack-body_start = 1.

ls_objpack-body_num = lv_tab_lines.

ls_objpack-doc_type = lc_doc_typ_raw. "RAW

APPEND ls_objpack TO lt_objpack.

CLEAR ls_objpack.

  • Email details

ls_reclist-receiver = p_mail.

ls_reclist-rec_type = lc_rec_typ.

ls_reclist-com_type = 'INT'.

APPEND ls_reclist TO lt_reclist.

CLEAR : ls_reclist.

DESCRIBE TABLE gt_error LINES lv_lines.

  • Send attachment only it the error file is not empty

IF gt_error[] IS NOT INITIAL.

  • Prepare the Error log attachment

  • Header details

CONCATENATE 'GL Account'(h38)

'Journal Batch'(h09)

'Store'(h10)

'Division'(h11)

'Control no'(h12)

'Currency'(h13)

'Crc'(h14)

'Discount amount'(h15)

'Discount percent'(h16)

'Due date'(h17)

'Invoince cost'(h18)

'Invoice date'(h19)

'Invoice no'(h20)

'New record'(h21)

'Orginal contorl no'(h22)

'Match/Unmatch'(h23)

'OSI Trans Id'(h24)

'PO Number'(h25)

'Post date'(h26)

'Processed Flag'(h27)

'Retail AMount'(h28)

'Source Code'(h29)

'Time Stamp'(h30)

'Vendor No'(h31)

'Alpha Flag'(h32)

'Object Key'(h33)

'GL ind'(h34)

'Payment Block'(h35)

'Payable ID'(h36)

'Change/Create'(h37)

INTO ls_contents-line

SEPARATED BY lc_tab.

CONCATENATE ls_contents lv_hex1 INTO ls_contents.

APPEND ls_contents TO lt_contents.

CLEAR ls_contents.

LOOP AT gt_error INTO ls_err_rec.

CONCATENATE

ls_err_rec-glaccnt

ls_err_rec-batchno

ls_err_rec-store

ls_err_rec-division

ls_err_rec-cntrlno

ls_err_rec-country

ls_err_rec-currency

ls_err_rec-disamnt

ls_err_rec-disper

ls_err_rec-duedate

ls_err_rec-invcst

ls_err_rec-invdate

ls_err_rec-invoiceno

ls_err_rec-nerecflg

ls_err_rec-orgcntrlno

ls_err_rec-matunmflg

ls_err_rec-transid

ls_err_rec-ponumb

ls_err_rec-postdate

ls_err_rec-procflag

ls_err_rec-retailamnt

ls_err_rec-sourccode

ls_err_rec-timestmp

ls_err_rec-vendor

ls_err_rec-alphaflg

ls_err_rec-objectkey

ls_err_rec-glind

ls_err_rec-paymntblk

ls_err_rec-payabid

ls_err_rec-chcrind

'Legacy Country Key Does Not Exists'(m12)

INTO ls_contents-line SEPARATED BY lc_tab.

IF lv_lines NE sy-tabix.

CONCATENATE ls_contents lv_hex1 INTO ls_contents.

ENDIF.

APPEND ls_contents TO lt_contents.

CLEAR ls_contents.

ENDLOOP.

DESCRIBE TABLE lt_contents LINES lv_tab_lines.

READ TABLE lt_contents INTO ls_contents INDEX lv_tab_lines.

ls_objpack-transf_bin = lc_x.

ls_objpack-head_start = 1.

ls_objpack-head_num = 1.

ls_objpack-body_start = 1.

ls_objpack-body_num = lv_tab_lines.

ls_objpack-doc_type = lc_doc_typ_xls.

ls_objpack-obj_name = 'ATTACHMENT'(h07).

ls_objpack-doc_size = lv_tab_lines * 255.

APPEND ls_objpack TO lt_objpack.

CLEAR ls_objpack.

  • Send Email with attachment

CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'

EXPORTING

document_data = ls_doc_chng

put_in_outbox = lc_x

commit_work = lc_x

TABLES

packing_list = lt_objpack

object_header = lt_objhead

contents_bin = lt_contents

contents_txt = gt_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.

CASE sy-subrc .

WHEN 0.

  • Mail successfully delivered

CONCATENATE 'Error file send to '(m13) p_mail INTO gs_err-line.

APPEND gs_err TO gt_err.

CLEAR gs_err.

WHEN OTHERS.

  • Do nothing

ENDCASE.

ENDIF.

Read only

Former Member
0 Likes
595

Hi

Good

Hi I guess you may not be able to get ur excel attach in a proper format. This could be because of the delimeters you are using between the fields. Try the following to fill the objbin table.

let me know the problem clearly if you are not done with this.

call function 'SAP_CONVERT_TO_TXT_FORMAT'

exporting

i_line_header = 'X'

tables

i_tab_sap_data = gt_outtab6

changing

i_tab_converted_data = wa_data

exceptions

conversion_failed = 1

others = 2.

loop at wa_data into wa_format_data.

move wa_format_data+0(255) to gt_objbin.

append gt_objbin.

clear gt_objbin.

                  • use the following 4 lines only if your internal table fields total length more than 255 chars ********************

concatenate wa_format_data+255 gs_end_of_line

into gt_objbin-line.

append gt_objbin.

clear gt_objbin.

endloop.

Thanks

mrutyun^

Read only

Former Member
0 Likes
595

Hi Roshan,

Check out the below link. This might helpful for you.


  move 'Please find Component Tracker Report' to g_text.
  append g_text to i_content.

* Preparing contents of attachment with Change Log
  perform prepare_attachment.

* Creates persistent send request
  try.
      l_send_request = cl_bcs=>create_persistent( ).

* Creating Document
      l_document = cl_document_bcs=>create_document(
                                    i_type  = 'RAW'
                                    i_text  = i_content[]
                                    i_subject = 'Component Tracker Report' ).

      describe table i_attach lines g_lines.
* Size to multiplied by 2 for UNICODE enabled systems
      g_size = g_lines * 2 * 255.

* Adding Attachment
      call method l_document->add_attachment
        exporting
          i_attachment_type    = c_ext
          i_attachment_size    = g_size
          i_attachment_subject = 'Component Tracker'
          i_att_content_text   = i_attach[].

* Add document to send request
      call method l_send_request->set_document( l_document ).

* Get Sender Object
      l_uname = sy-uname.

      l_sender = cl_sapuser_bcs=>create( l_uname ).

      call method l_send_request->set_sender
        exporting
          i_sender = l_sender.

* E-Mail
      translate s_mail to lower case.

      l_recipient = cl_cam_address_bcs=>create_internet_address( s_mail )
  .

      call method l_send_request->add_recipient
        exporting
          i_recipient  = l_recipient
          i_express    = 'U'
          i_copy       = ' '
          i_blind_copy = ' '
          i_no_forward = ' '.


*Trigger E-Mail immediately
      l_send_request->set_send_immediately( 'X' ).

      call method l_send_request->send( ).

      commit work.

    catch cx_document_bcs into l_bcs_exception.

    catch cx_send_req_bcs into l_send_exception.

    catch cx_address_bcs  into l_addr_exception.

  endtry.