|
Content Author: Fernando Faian
I have read the hint about "Sending mail with attachment
report".
I had that needed last year too. See attachment a function group with two functions. The second one has that functionality to send email or fax (SAP office) with attachment objects in background job using SO_ATTACHMENT_INSERT function. Pay attention because it’s working with output list from spool converted to pdf. ================================================================================= z_send_email_fax_global FUNCTION-POOL z_gfaian_mail_fax. "MESSAGE-ID .. *----------------------------------------------------------------------- * WORK TABLE AREAS *----------------------------------------------------------------------- TABLES: tsp01. *----------------------------------------------------------------------- * INTERNAL TABLES *----------------------------------------------------------------------- DATA: lt_rec_tab LIKE STANDARD TABLE OF soos1 WITH HEADER LINE, lt_note_text LIKE STANDARD TABLE OF soli WITH HEADER LINE, lt_attachments LIKE STANDARD TABLE OF sood5 WITH HEADER LINE. DATA: lt_objcont LIKE STANDARD TABLE OF soli WITH HEADER LINE, lt_objhead LIKE STANDARD TABLE OF soli WITH HEADER LINE. DATA: pdf_format LIKE STANDARD TABLE OF tline WITH HEADER LINE. TYPES: BEGIN OF y_files, file(60) TYPE c, END OF y_files. DATA: lt_files TYPE STANDARD TABLE OF y_files WITH HEADER LINE. DATA: l_objcont LIKE soli OCCURS 0 WITH HEADER LINE. DATA: l_objhead LIKE soli OCCURS 0 WITH HEADER LINE. *----------------------------------------------------------------------- * STRUCTURES *----------------------------------------------------------------------- DATA: folder_id LIKE soodk, object_id LIKE soodk, link_folder_id LIKE soodk, g_document LIKE sood4, * g_header_data LIKE sood2, g_folmem_data LIKE sofm2, g_header_data LIKE sood2, g_receive_data LIKE soos6, g_ref_document LIKE sood4, g_new_parent LIKE soodk, l_folder_id LIKE sofdk, v_email(50). DATA: hd_dat like sood1. *----------------------------------------------------------------------- * VARIABLES *----------------------------------------------------------------------- DATA: client LIKE tst01-dclient, name LIKE tst01-dname, objtype LIKE rststype-type, type LIKE rststype-type. DATA: numbytes TYPE i, arc_idx LIKE toa_dara, pdfspoolid LIKE tsp01-rqident, jobname LIKE tbtcjob-jobname, jobcount LIKE tbtcjob-jobcount, is_otf. DATA: outbox_flag LIKE sonv-flag VALUE 'X', store_flag LIKE sonv-flag, delete_flag LIKE sonv-flag, owner LIKE soud-usrnam, on LIKE sonv-flag VALUE 'X', sent_to_all LIKE sonv-flag, g_authority LIKE sofa-usracc, w_objdes LIKE sood4-objdes. DATA: c_file LIKE rlgrap-filename, n_spool(6) TYPE n. DATA: cancel. DATA: desired_type LIKE sood-objtp, real_type LIKE sood-objtp, attach_type LIKE sood-objtp, otf LIKE sood-objtp VALUE 'OTF', " SAPscript Ausgabeformat ali LIKE sood-objtp VALUE 'ALI'. " ABAP lists *----------------------------------------------------------------------- * CONSTANTS *----------------------------------------------------------------------- CONSTANTS: ou_fol LIKE sofh-folrg VALUE 'O', c_objtp LIKE g_document-objtp VALUE 'RAW', c_file_ext LIKE g_document-file_ext VALUE 'TXT'. ================================================================================= z_send_email_fax2 FUNCTION z_faian_mail_fax2. *"---------------------------------------------------------------------- *"*"Interface local: *" IMPORTING *" REFERENCE(SRC_SPOOLID) LIKE TSP01-RQIDENT *" REFERENCE(FAX_MAIL_NUMBER) TYPE SO_NAME *" REFERENCE(HEADER_MAIL) TYPE SO_OBJ_DES *" REFERENCE(OBJECT_TYPE) TYPE SO_ESCAPE *" TABLES *" LT_BODY_EMAIL STRUCTURE SOLI *" EXCEPTIONS *" ERR_NO_ABAP_SPOOLJOB *"---------------------------------------------------------------------- * Fist part: Verify if the spool really exists SELECT SINGLE * FROM tsp01 WHERE rqident = src_spoolid. IF sy-subrc NE 0. RAISE err_no_abap_spooljob. "doesn't exist ELSE. client = tsp01-rqclient. name = tsp01-rqo1name. CALL FUNCTION 'RSTS_GET_ATTRIBUTES' EXPORTING authority = 'SP01' client = client name = name part = 1 IMPORTING type = type objtype = objtype EXCEPTIONS fb_error = 1 fb_rsts_other = 2 no_object = 3 no_permission = 4 OTHERS = 5. IF objtype(3) = 'OTF'. desired_type = otf. ELSE. desired_type = ali. ENDIF. CALL FUNCTION 'RSPO_RETURN_SPOOLJOB' EXPORTING rqident = src_spoolid desired_type = desired_type IMPORTING real_type = real_type TABLES buffer = l_objcont EXCEPTIONS no_such_job = 14 type_no_match = 94 job_contains_no_data = 54 no_permission = 21 can_not_access = 21 read_error = 54. IF sy-subrc EQ 0. attach_type = real_type. ENDIF. CALL FUNCTION 'SO_FOLDER_ROOT_ID_GET' EXPORTING owner = sy-uname region = ou_fol IMPORTING folder_id = l_folder_id EXCEPTIONS OTHERS = 5. * fill out informations about the header of the email CLEAR: g_document. g_document-foltp = l_folder_id-foltp. g_document-folyr = l_folder_id-folyr. g_document-folno = l_folder_id-folno. g_document-objtp = c_objtp. g_document-objdes = header_mail. g_document-file_ext = c_file_ext. g_header_data-objdes = header_mail. CALL FUNCTION 'SO_DOCUMENT_REPOSITORY_MANAGER' EXPORTING method = 'SAVE' office_user = sy-uname IMPORTING authority = g_authority TABLES objcont = lt_body_email attachments = lt_attachments CHANGING document = g_document header_data = g_header_data EXCEPTIONS OTHERS = 1. folder_id-objtp = l_folder_id-foltp. folder_id-objyr = l_folder_id-folyr. folder_id-objno = l_folder_id-folno. object_id-objtp = c_objtp. object_id-objyr = g_document-objyr. object_id-objno = g_document-objno. link_folder_id-objtp = l_folder_id-foltp. link_folder_id-objyr = l_folder_id-folyr. link_folder_id-objno = l_folder_id-folno. REFRESH lt_rec_tab. * CLEAR lt_rec_tab. * lt_rec_tab-sel = 'X'. * lt_rec_tab-recesc = object_type. "This field for FAX/MAIL * lt_rec_tab-recnam = 'U-'. * lt_rec_tab-deliver = 'X'. * lt_rec_tab-not_deli = 'X'. * lt_rec_tab-read = 'X'. * lt_rec_tab-mailstatus = 'E'. * lt_rec_tab-adr_name = fax_mail_number. * lt_rec_tab-sortfield = fax_mail_number. * lt_rec_tab-recextnam = fax_mail_number. * lt_rec_tab-sortclass = '5'. * APPEND lt_rec_tab. lt_rec_tab-recextnam = fax_mail_number. lt_rec_tab-recesc = object_type. lt_rec_tab-sndart = 'INT'. lt_rec_tab-sndpri = 1. APPEND lt_rec_tab. lt_files-file = c_file. APPEND lt_files. * begin of insertion by faianf01 hd_dat-objdes = header_mail. CALL FUNCTION 'SO_ATTACHMENT_INSERT' EXPORTING object_id = object_id attach_type = attach_type object_hd_change = hd_dat owner = sy-uname TABLES objcont = l_objcont objhead = l_objhead EXCEPTIONS active_user_not_exist = 35 communication_failure = 71 object_type_not_exist = 17 operation_no_authorization = 21 owner_not_exist = 22 parameter_error = 23 substitute_not_active = 31 substitute_not_defined = 32 system_failure = 72 x_error = 1000. IF sy-subrc > 0. ENDIF. * end of insertion by faianf01 * send email from SAPOFFICE CALL FUNCTION 'SO_OBJECT_SEND' EXPORTING folder_id = folder_id object_id = object_id outbox_flag = outbox_flag link_folder_id = link_folder_id owner = sy-uname * check_send_authority = 'X' TABLES receivers = lt_rec_tab * note_text = lt_note_text EXCEPTIONS active_user_not_exist = 35 communication_failure = 71 component_not_available = 1 folder_no_authorization = 5 folder_not_exist = 6 forwarder_not_exist = 8 object_no_authorization = 13 object_not_exist = 14 object_not_sent = 15 operation_no_authorization = 21 owner_not_exist = 22 parameter_error = 23 substitute_not_active = 31 substitute_not_defined = 32 system_failure = 72 too_much_receivers = 73 user_not_exist = 35. ENDIF. ENDFUNCTION. ================================================================================= z_send_email_fax FUNCTION ZCBFS_SEND_MAIL. *"---------------------------------------------------------------------- *"*"Interface local: *" IMPORTING *" REFERENCE(SRC_SPOOLID) LIKE TSP01-RQIDENT *" REFERENCE(HEADER_MAIL) TYPE SO_OBJ_DES *" TABLES *" LIST_FAX_MAIL_NUMBER STRUCTURE SOLI *" EXCEPTIONS *" ERR_NO_ABAP_SPOOLJOB *"---------------------------------------------------------------------- DATA: vg_achou(1) TYPE n. * Fist part: Verify if the spool really exists vg_achou = 1. DO 60 TIMES. SELECT SINGLE * FROM tsp01 WHERE rqident = src_spoolid. IF sy-subrc IS INITIAL. CLEAR vg_achou. EXIT. ELSE. WAIT UP TO 1 SECONDS. ENDIF. ENDDO. IF vg_achou = 1. RAISE err_no_abap_spooljob. "doesn't exist ENDIF. client = tsp01-rqclient. name = tsp01-rqo1name. CALL FUNCTION 'RSTS_GET_ATTRIBUTES' EXPORTING authority = 'SP01' client = client name = name part = 1 IMPORTING type = type objtype = objtype EXCEPTIONS fb_error = 1 fb_rsts_other = 2 no_object = 3 no_permission = 4 OTHERS = 5. IF objtype(3) = 'OTF'. desired_type = otf. ELSE. desired_type = ali. ENDIF. CALL FUNCTION 'RSPO_RETURN_SPOOLJOB' EXPORTING rqident = src_spoolid desired_type = desired_type IMPORTING real_type = real_type TABLES buffer = l_objcont EXCEPTIONS no_such_job = 14 type_no_match = 94 job_contains_no_data = 54 no_permission = 21 can_not_access = 21 read_error = 54. IF sy-subrc EQ 0. attach_type = real_type. ENDIF. CALL FUNCTION 'SO_FOLDER_ROOT_ID_GET' EXPORTING owner = sy-uname region = ou_fol IMPORTING folder_id = l_folder_id EXCEPTIONS OTHERS = 5. * fill out informations about the header of the email CLEAR: g_document. g_document-foltp = l_folder_id-foltp. g_document-folyr = l_folder_id-folyr. g_document-folno = l_folder_id-folno. g_document-objtp = c_objtp. g_document-objdes = header_mail. g_document-file_ext = c_file_ext. g_header_data-objdes = header_mail. CALL FUNCTION 'SO_DOCUMENT_REPOSITORY_MANAGER' EXPORTING method = 'SAVE' office_user = sy-uname IMPORTING authority = g_authority TABLES attachments = lt_attachments CHANGING document = g_document header_data = g_header_data EXCEPTIONS OTHERS = 1. folder_id-objtp = l_folder_id-foltp. folder_id-objyr = l_folder_id-folyr. folder_id-objno = l_folder_id-folno. object_id-objtp = c_objtp. object_id-objyr = g_document-objyr. object_id-objno = g_document-objno. link_folder_id-objtp = l_folder_id-foltp. link_folder_id-objyr = l_folder_id-folyr. link_folder_id-objno = l_folder_id-folno. REFRESH lt_rec_tab. LOOP AT LIST_FAX_MAIL_NUMBER. lt_rec_tab-recextnam = LIST_FAX_MAIL_NUMBER-LINE. lt_rec_tab-recesc = 'U'. lt_rec_tab-sndart = 'INT'. lt_rec_tab-sndpri = 1. APPEND lt_rec_tab. ENDLOOP. lt_files-file = c_file. APPEND lt_files. hd_dat-objdes = header_mail. CALL FUNCTION 'SO_ATTACHMENT_INSERT' EXPORTING object_id = object_id attach_type = attach_type object_hd_change = hd_dat owner = sy-uname TABLES objcont = l_objcont objhead = l_objhead EXCEPTIONS active_user_not_exist = 35 communication_failure = 71 object_type_not_exist = 17 operation_no_authorization = 21 owner_not_exist = 22 parameter_error = 23 substitute_not_active = 31 substitute_not_defined = 32 system_failure = 72 x_error = 1000. IF sy-subrc > 0. ENDIF. * send email from SAPOFFICE CALL FUNCTION 'SO_OBJECT_SEND' EXPORTING folder_id = folder_id object_id = object_id outbox_flag = outbox_flag link_folder_id = link_folder_id owner = sy-uname TABLES receivers = lt_rec_tab note_text = lt_note_text EXCEPTIONS active_user_not_exist = 35 communication_failure = 71 component_not_available = 1 folder_no_authorization = 5 folder_not_exist = 6 forwarder_not_exist = 8 object_no_authorization = 13 object_not_exist = 14 object_not_sent = 15 operation_no_authorization = 21 owner_not_exist = 22 parameter_error = 23 substitute_not_active = 31 substitute_not_defined = 32 system_failure = 72 too_much_receivers = 73 user_not_exist = 35. ENDFUNCTION. ================================================================================= |
|
Related ABAP Topics:
Get help for your ABAP problems
More ABAP Tips
BDC Programming Tips - Sapscripts Tips - Smartforms Tips SAP Basis, ABAP Programming and Other IMG Stuff http://www.erpgreat.com All the site contents are Copyright © www.erpgreat.com
and the content authors. All rights reserved.
|