PDF per Mail/Fax verschicken
Aus SAP-Wiki
Zur Navigation springenZur Suche springen
Faxe wie E-Mails können per BCS (Business Communication Services) verschickt werden.
Das nötige Coding ist im Funktionsbaustein SD_PDF_SEND_DATA gekapselt.
Testbeispiel SD_INVOICE_PRINT01
- Im Programm SD_INVOICE_PRINT01 wird der Funktionsbaustein SD_PDF_SEND_DATA aufgerufen zum Verschicken einer E-Mail oder eines Faxes
- Hier wird eine PDF-Rechnung verschickt
SAP-Funktionsbaustein SD_PDF_SEND_DATA
FUNCTION sd_pdf_send_data.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*" IMPORTING
*" REFERENCE(IV_DEVICE) TYPE OUTPUT_DEVICE
*" REFERENCE(IV_EMAIL_SUBJECT) TYPE SO_OBJ_DES OPTIONAL
*" REFERENCE(IT_EMAIL_TEXT) TYPE BCSY_TEXT OPTIONAL
*" REFERENCE(IS_MAIN_DATA) TYPE FPFORMOUTPUT
*" REFERENCE(IV_LANGUAGE) TYPE SYLANGU DEFAULT SY-LANGU
*" REFERENCE(IS_ADDRESS) TYPE SDPRT_ADDR_S
*" EXPORTING
*" VALUE(EV_SEND_TO_ALL) TYPE OS_BOOLEAN
*" EXCEPTIONS
*" EXC_DOCUMENT
*" EXC_SEND_REQUEST
*" EXC_ADDRESS
*"----------------------------------------------------------------------
DATA: lo_bcs_document TYPE REF TO cl_document_bcs,
lo_send_request TYPE REF TO cl_bcs,
lo_recipient TYPE REF TO if_recipient_bcs,
lo_sender TYPE REF TO if_sender_bcs,
lo_exc_doc_bcs TYPE REF TO cx_document_bcs,
lo_exc_send_req_bcs TYPE REF TO cx_send_req_bcs,
lo_exc_address_bcs TYPE REF TO cx_address_bcs,
lv_pdf_size TYPE so_obj_len,
lt_bcs_pdf TYPE solix_tab.
*--- Call the business communication service
TRY.
lo_send_request = cl_bcs=>create_persistent( ).
lv_pdf_size = XSTRLEN( is_main_data-pdf ).
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
buffer = is_main_data-pdf
TABLES
binary_tab = lt_bcs_pdf.
CASE iv_device.
WHEN gc_device-email.
CALL METHOD cl_document_bcs=>create_document
EXPORTING
i_type = 'TXT'
i_subject = iv_email_subject
* I_LENGTH =
i_language = iv_language
i_text = it_email_text
RECEIVING
result = lo_bcs_document.
*--- Add the document as an attachment
CALL METHOD lo_bcs_document->add_attachment
EXPORTING
i_attachment_type = 'PDF'
i_attachment_size = lv_pdf_size
i_attachment_subject = iv_email_subject
i_attachment_language = iv_language
i_att_content_hex = lt_bcs_pdf.
*--- Set the e-mail address of the recipient
CALL METHOD cl_cam_address_bcs=>create_internet_address
EXPORTING
i_address_string = is_address-recip_email_addr
RECEIVING
result = lo_recipient.
*--- Set the e-mail address of the sender
IF NOT is_address-sender_email_addr IS INITIAL.
CALL METHOD cl_cam_address_bcs=>create_internet_address
EXPORTING
i_address_string = is_address-sender_email_addr
RECEIVING
result = lo_sender.
ELSE.
lo_sender = cl_sapuser_bcs=>create( sy-uname ).
ENDIF.
WHEN gc_device-fax.
CALL METHOD cl_document_bcs=>create_document
EXPORTING
i_type = 'PDF'
i_subject = iv_email_subject
i_length = lv_pdf_size
i_language = iv_language
i_hex = lt_bcs_pdf
RECEIVING
result = lo_bcs_document.
*--- Set the fax address of the recipient
CALL METHOD cl_cam_address_bcs=>create_fax_address
EXPORTING
i_country = is_address-recip_fax_country
i_number = is_address-recip_fax_number
RECEIVING
result = lo_recipient.
*--- Set the fax address of the sender
IF NOT is_address-sender_fax_number IS INITIAL.
CALL METHOD cl_cam_address_bcs=>create_fax_address
EXPORTING
i_country = is_address-sender_fax_country
i_number = is_address-sender_fax_number
RECEIVING
result = lo_sender.
ELSE.
lo_sender = cl_sapuser_bcs=>create( sy-uname ).
ENDIF.
ENDCASE.
*--- Assign document to the send request
CALL METHOD lo_send_request->set_document( lo_bcs_document ).
*--- Add the sender
CALL METHOD lo_send_request->set_sender
EXPORTING
i_sender = lo_sender.
*--- Add the recipient
CALL METHOD lo_send_request->add_recipient
EXPORTING
i_recipient = lo_recipient.
*--- Send the document
CALL METHOD lo_send_request->send
EXPORTING
i_with_error_screen = gc_true
RECEIVING
result = ev_send_to_all.
*--- Exception handling
CATCH cx_document_bcs INTO lo_exc_doc_bcs.
IF NOT lo_exc_doc_bcs->msgid IS INITIAL
AND NOT lo_exc_doc_bcs->msgty IS INITIAL
AND NOT lo_exc_doc_bcs->msgno IS INITIAL.
MESSAGE ID lo_exc_doc_bcs->msgid
TYPE lo_exc_doc_bcs->msgty
NUMBER lo_exc_doc_bcs->msgno
WITH lo_exc_doc_bcs->msgv1
lo_exc_doc_bcs->msgv2
lo_exc_doc_bcs->msgv3
lo_exc_doc_bcs->msgv4
RAISING exc_document.
ELSE.
RAISE exc_document.
ENDIF.
CATCH cx_send_req_bcs INTO lo_exc_send_req_bcs.
IF NOT lo_exc_send_req_bcs->msgid IS INITIAL
AND NOT lo_exc_send_req_bcs->msgty IS INITIAL
AND NOT lo_exc_send_req_bcs->msgno IS INITIAL.
MESSAGE ID lo_exc_send_req_bcs->msgid
TYPE lo_exc_send_req_bcs->msgty
NUMBER lo_exc_send_req_bcs->msgno
WITH lo_exc_send_req_bcs->msgv1
lo_exc_send_req_bcs->msgv2
lo_exc_send_req_bcs->msgv3
lo_exc_send_req_bcs->msgv4
RAISING exc_send_request.
ELSE.
RAISE exc_send_request.
ENDIF.
CATCH cx_address_bcs INTO lo_exc_address_bcs.
IF NOT lo_exc_address_bcs->msgid IS INITIAL
AND NOT lo_exc_address_bcs->msgty IS INITIAL
AND NOT lo_exc_address_bcs->msgno IS INITIAL.
MESSAGE ID lo_exc_address_bcs->msgid
TYPE lo_exc_address_bcs->msgty
NUMBER lo_exc_address_bcs->msgno
WITH lo_exc_address_bcs->msgv1
lo_exc_address_bcs->msgv2
lo_exc_address_bcs->msgv3
lo_exc_address_bcs->msgv4
RAISING exc_address.
ELSE.
RAISE exc_address.
ENDIF.
ENDTRY.
ENDFUNCTION.
Web-Links
Literatur
- SAP Interactive Forms by Adobe, 2. Auflage, von Jürgen Hauser, Andreas Deutesfeld, Stephan Rehmann, Thomas Szücs und Philipp Thun, S. 635ff.
- Function Modules in ABAP: A Quick Reference Guide, von Tanmaya Gupta (EN), S. 227