How to send mail with attachment of SAP Script in Workflow: Once the release of the  PO is completed ( after released all level ) the script output of the particular PO has to send the initiator as attachment.

Step 1 :  Create step ( activity ) in workflow for getting the spool request of the release PO .

 

The code for getting the spool request is as follows

*fetching the spool request.

select single rqident

from TSP01

into l_rqident

where rqtitle = object-key-purchaseorder.

if sy-subrc = 0.

spool_generate = ‘X’.

endif.

SWC_SET_ELEMENT CONTAINER ‘spool_generate’ SPOOL_GENERATE.

Step 2 : As the spool request generation will take some time , put the wait step with condition that until spool is getting generated ( &spool_generate& = ‘X’. )

Step 3 : Create step ( activity ) for attaching the PO.

The code is as below

BEGIN_METHOD POMAIL_ATTCHMNT CHANGING CONTAINER.

DATA:

MAIL_ID TYPE ADR6-SMTP_ADDR,

PO_NUMBER TYPE EKKO-EBELN.

SWC_GET_ELEMENT CONTAINER ‘mail_id’ MAIL_ID.

SWC_GET_ELEMENT CONTAINER ‘PO_Number’ PO_NUMBER.

” calling FM for Mail attachment .

CALL FUNCTION ‘ZMM_PO_EMAIL_ATTACHMENT’

EXPORTING

I_EBELN       = PO_NUMBER ” passing the PO

I_EMAIL       = MAIL_ID. ” passing the mail id of initiator.

END_METHOD.

In the above function module , I am writing the code for getting PDF output from the spool number and make the bin file and passing the same to the SO_NEW_DOCUMENT_ATT_SEND_API1. and sending the attachment with the notification. Find the detailed code below.

“————————————————————

” Constants Declarations

“————————————————————

CONSTANTS: lc_pdf        TYPE char3      VALUE ‘PDF’,

lc_obj_name   TYPE so_obj_nam VALUE ‘SCRIPT’,

lc_express    TYPE char1      VALUE ‘X’,

lc_rec_type   TYPE char1      VALUE ‘U’,

lc_sensitivty TYPE so_obj_sns VALUE ‘F’,

lc_doc_type   TYPE so_obj_tp  VALUE ‘RAW’,

lc_in_out     TYPE sonvflag  VALUE ‘X’,

lc_no(1)      TYPE c          VALUE ‘ ‘,

lc_device(4TYPE c          VALUE ‘LOCL’.

“————————————————————

” Internal Tables Declarations

“————————————————————

DATA : lint_objpack      TYPE TABLE OF sopcklsti1,

lint_objbin       TYPE TABLE OF solisti1,

lint_objtxt       TYPE TABLE OF solisti1,

lint_reclist      TYPE TABLE OF somlreci1,

lint_pdf_output   TYPE TABLE OF tline,

lint_mess_att     TYPE TABLE OF solisti1.

“————————————————————

” Work Area Declarations

“————————————————————

DATA : lfs_objpack       TYPE sopcklsti1,

lfs_objbin        TYPE solisti1,

lfs_objtxt        TYPE solisti1,

lfs_reclist       TYPE somlreci1,

lfs_doc_chng      TYPE sodocchgi1,

lfs_tsp01         TYPE tsp01,

lfs_pdf_output    TYPE tline,

lfs_mess_att      TYPE solisti1.

“————————————————————

” Local Varaibles Declarations

“————————————————————

DATA : lwf_lines_txt     TYPE i,

lwf_lines_bin     TYPE i,

lwf_buffer        TYPE string.

“————————————————————

” Logic started..

“————————————————————

IF i_ebeln IS NOT INITIAL

AND i_email IS NOT INITIAL.

** To get the spool no from the purchase document number..

SELECT SINGLE *

FROM tsp01

INTO lfs_tsp01

WHERE rqtitle = i_ebeln.

IF sysubrc = 0.

** To set the local language..

SET LOCALE LANGUAGE sylangu.

** To get the PDF output from the spool no..

CALL FUNCTION ‘CONVERT_OTFSPOOLJOB_2_PDF’

EXPORTING

src_spoolid              = lfs_tsp01rqident

no_dialog                = lc_no

dst_device               = lc_device

TABLES

pdf                      = lint_pdf_output

EXCEPTIONS

err_no_otf_spooljob      = 1

err_no_spooljob          = 2

err_no_permission        = 3

err_conv_not_possible    = 4

err_bad_dstdevice        = 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 sysubrc = 0.

“————————————————————

” Transfer the 132-long strings to 255-long strings

“————————————————————

LOOP AT lint_pdf_output INTO lfs_pdf_output.

TRANSLATE lfs_pdf_output USING ‘ ~’.

CONCATENATE lwf_buffer lfs_pdf_output INTO lwf_buffer.

ENDLOOP.

**

TRANSLATE lwf_buffer USING ‘~ ‘.

DO.

lfs_mess_att = lwf_buffer.

APPEND lfs_mess_att TO lint_mess_att.

SHIFT lwf_buffer LEFT BY 255 PLACES.

IF lwf_buffer IS INITIAL.

EXIT.

ENDIF.

ENDDO.

ENDIF.

“————————————————————

” To add the recipients email address

“————————————————————

lfs_reclistreceiver = i_email.

lfs_reclistexpress  = lc_express.

lfs_reclistrec_type = lc_rec_type.

APPEND lfs_reclist TO lint_reclist.

CLEAR  lfs_reclist.

“————————————————————

” Mail Content

“————————————————————

** for Header

lfs_objtxt = ‘Dear User,’.

APPEND lfs_objtxt TO lint_objtxt.

CLEAR lfs_objtxt.

** For space

APPEND lfs_objtxt TO lint_objtxt.

CLEAR lfs_objtxt.

** For content

CONCATENATE ‘Purchase order : ‘ i_ebeln ‘, has been approved.’ INTO lfs_objtxt.

APPEND lfs_objtxt TO lint_objtxt.

CLEAR lfs_objtxt.

** For space

APPEND lfs_objtxt TO lint_objtxt.

CLEAR lfs_objtxt.

** For footer

lfs_objtxt = ‘This is an auto generated email, please do not reply.’.

APPEND lfs_objtxt TO lint_objtxt.

CLEAR lfs_objtxt.

“————————————————————

” Mail Header

“————————————————————

DESCRIBE TABLE lint_objtxt LINES lwf_lines_txt.

lfs_doc_chngobj_name   = lc_obj_name.

lfs_doc_chngobj_langu  = sylangu.

CONCATENATE ‘Purchase order: ‘ i_ebeln ‘, has been approved’ INTO lfs_doc_chngobj_descr.

lfs_doc_chngsensitivty = lc_sensitivty.

lfs_doc_chngdoc_size   = 1.

“————————————————————

” Pack to main body as RAW.

“————————————————————

CLEAR lfs_objpacktransf_bin.

lfs_objpackhead_start = 1.

lfs_objpackhead_num   = 0.

lfs_objpackbody_start = 1.

lfs_objpackbody_num   = lwf_lines_txt.

lfs_objpackdoc_type   = lc_doc_type.

APPEND lfs_objpack TO lint_objpack.

“————————————————————

” Packing as PDF.

“————————————————————

CLEAR lwf_lines_bin.

DESCRIBE TABLE lint_mess_att LINES lwf_lines_bin.

lfs_objpacktransf_bin = abap_true.

lfs_objpackhead_start = 1.

lfs_objpackhead_num   = 1.

lfs_objpackbody_start = 1.

lfs_objpackbody_num   = lwf_lines_bin.

lfs_objpackdoc_type   = lc_pdf.

CONCATENATE ‘Purchase order: ‘ i_ebeln ‘, has been approved’ INTO lfs_objpackobj_name.

CONCATENATE ‘Purchase order’ ‘:’ i_ebeln INTO lfs_objpackobj_descr.

**

lfs_objpackdoc_size = lwf_lines_bin * 255.

APPEND lfs_objpack TO lint_objpack.

“————————————————————

” To send the smartform as attachment in Mail to the above receipent

“————————————————————

CALL FUNCTION ‘SO_NEW_DOCUMENT_ATT_SEND_API1’

EXPORTING

document_data              = lfs_doc_chng

put_in_outbox              = lc_in_out

TABLES

packing_list               = lint_objpack

contents_bin               = lint_mess_att

contents_txt               = lint_objtxt

receivers                  = lint_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.

IF sysubrc = 0.

COMMIT WORK.

ENDIF.

ENDIF.

ENDIF.

ENDFUNCTION.

 

New NetWeaver Information at SAP.com

Very Helpfull

 

 

User Rating: Be the first one !