SAP Jobsuche bei DV-Treff
Herbert Heppner
vor 3 Jahre
Hallo ich suche einen Funktionsbaustein( äquivalent zu :SSF_FUNCTION_MODULE_NAME )

der ein PDF Formular, was ich vorher erstellt habe, als eMail versendet.

Bisher habe ich nur ein Programm, das ein PDF hochlädt vom PC und diese dann versendet. Hat jemand eine Idee oder Lösung?

Vielen Dank

Herbert

------------------------------

Coding meines Programms:

( REPORT Z_DBM_IA_DEMO_1.

PARAMETERS: p_email TYPE adr6-smtp_addr OBLIGATORY DEFAULT 'eMail adress'. " Email-Adr. des Empfängers

PARAMETERS: p_subj TYPE string DEFAULT 'Testmail Prototyp Angebot.'. " Email-Subject

PARAMETERS: p_bdytxt TYPE soli DEFAULT 'SIEHE pdf.'. " eine Mailtext-Zeile

PARAMETERS: p_pdf TYPE file_table-filename OBLIGATORY DEFAULT 'C:\Temp\ANGEBOT.pdf'. " PDF-Anhang

* wenn die F4-Hilfe für den Dateinamen aufgerufen wird

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_pdf.

DATA: lv_rc TYPE i.

DATA: it_files TYPE filetable.

DATA: lv_action TYPE i.

* File-Tabelle leeren, da hier noch alte Einträge von vorherigen

* Aufrufen drin stehen können

CLEAR: it_files.

* FileOpen-Dialog aufrufen

TRY.

cl_gui_frontend_services=>file_open_dialog( EXPORTING

file_filter = |PDF (*.pdf)\|*.pdf\|{ cl_gui_frontend_services=>filetype_all }|

CHANGING

file_table = it_files " ausgewählte Dateien

rc = lv_rc " Anzahl ausgewählte Dateien, -1 bei Fehler

user_action = lv_action ).

IF lv_action = cl_gui_frontend_services=>action_ok.

* wenn Datei ausgewählt wurde

IF lines( it_files ) > 0.

* ersten Tabelleneintrag lesen

p_pdf = it_files[ 1 ]-filename.

ENDIF.

ENDIF.

CATCH cx_root INTO DATA(e_text).

MESSAGE e_text->get_text( ) TYPE 'S'.

ENDTRY.

START-OF-SELECTION.

DATA: lv_pdf_size TYPE i.

DATA: it_pdf_data_tab TYPE solix_tab.

TRY.

* PDF-Datei vom lokalen Rechner auf den Appl.-Server hochladen

cl_gui_frontend_services=>gui_upload( EXPORTING

filename = |{ p_pdf }|

filetype = 'BIN'

IMPORTING

filelength = lv_pdf_size

CHANGING

data_tab = it_pdf_data_tab ).

IF sy-subrc = 0.

DATA(it_body_txt) = VALUE soli_tab( ( line = p_bdytxt ) ).

* Document (Mail) erzeugen

* Email-Subject (i_subject) darf hier max. 50 Zeichen lang sein (Subject-Darstellung in der SOST)

* die "richtige" Übergabe des Email-Subjects erfolgt weiter unten in der Funktion set_message_subject( )

DATA(o_document) = cl_document_bcs=>create_document( i_type = 'RAW'

i_text = it_body_txt

i_subject = CONV so_obj_des( p_subj ) ).

* Attachement hinzufügen -> Typen siehe Tabelle TSOTD

o_document->add_attachment( i_attachment_type = 'EXT'

i_attachment_subject = |{ p_pdf }|

i_att_content_hex = it_pdf_data_tab ).

* Sendrequest erzeugen

DATA(o_send_request) = cl_bcs=>create_persistent( ).

* Email-Subject festlegen, ip_subject ist vom Typ String

o_send_request->set_message_subject( ip_subject = p_subj ).

* Die Mail an den Sendrequest hängen

o_send_request->set_document( o_document ).

* Sender

* SAP-User als Sender

DATA(o_sender) = cl_sapuser_bcs=>create( sy-uname ).

* Email-Adresse als Sender

* DATA(o_sender) = cl_cam_address_bcs=>create_internet_address( i_address_string = 'email@email.com' ).

* o_send_request->set_sender( o_sender ).

* Empfänger -> beachte: u.U. sind Email-Adressen mit Umlauten nicht zulässig -> Exception

DATA(o_recipient) = cl_cam_address_bcs=>create_internet_address( p_email ).

o_send_request->add_recipient( i_recipient = o_recipient

i_express = abap_true

" i_copy = abap_true " CC

" i_blind_copy = abap_true " BCC

).

* Sofort senden

o_send_request->set_send_immediately( abap_true ).

* Dokument senden

IF o_send_request->send( i_with_error_screen = abap_true ) = abap_true.

WRITE: / 'Email gesendet.'.

ELSE.

WRITE: / 'Fehler beim Email-Versand.'.

ENDIF.

DATA: lv_in_update_task TYPE sy-subrc.

* Überprüft, ob das Programm im Verbucher abläuft

CALL FUNCTION 'TH_IN_UPDATE_TASK'

IMPORTING

in_update_task = lv_in_update_task.

IF lv_in_update_task EQ 0.

* Persistenzdienste des Objektes starten, sonst wird ggf. die Mail nicht gesendet

COMMIT WORK.

ENDIF.

ENDIF.

CATCH cx_root INTO DATA(e_text).

WRITE: / e_text->get_text( ).

ENDTRY.

Förderer

ezekiel49
vor 3 Jahre
Hallo Herbert.

Also denkbar wäre es, das Du es über den Ausdruck machst. So machen wir es so, wir nehmen den Gerätetypen PDF1 in der SPAD, dazu ist ein Drucker definiert der ZPDF1. Dieser sendet dann via E-Mail an die eingegebene E-Mail Adresse das Dokument.

Es muss natürlich auf den Instanzen der Drucker so angelegt sein.

Hast Du Berechtigung zur SPAD? Die Koppelart zum Hostspool soll M sein. E-Mail-Adresse = in der Gerätedef. dummy und ab dafür. Erstelltes PDF Form. -> Druck-> versand über Drucker Z* ! So benötigst Du keinen FUB!

Herbert Heppner
vor 3 Jahre
Das Problem ist, wenn ich das über den Druck realisiere, ist es nicht möglich interaktive Formulare zu versenden.

Lt. SAP soll das aber realsierbar sein.

VG

Herbert