Generierte Datei auf bestimmte Email Adresse versenden

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Getting started ... Alles für einen gelungenen Start.
10 Beiträge • Seite 1 von 1
10 Beiträge Seite 1 von 1

Generierte Datei auf bestimmte Email Adresse versenden

Beitrag von Armin93 (ForumUser / 35 / 10 / 0 ) »
Guten Tag alle zusammen =)....

Mein Programm generiert eine txt.Datei die zurzeit auf einem Netzlaufwerk abgespeichert wird.

Nach langem hin und her wurde jetzt doch entschieden das diese Datei per Mail an eine bestimmte Adresse zugeschickt werden soll.

Ich weiß leider nicht wie ich das in meinem Programm einbauen soll.

Könnt ihr mir bitte helfen ! Bin ein Anfänger !

Code: Alles auswählen.

form download.
  open dataset filename for output in text mode encoding default.
  if sy-subrc ne 0.
    write: 'File cannot be opened'.
    exit.
  endif.


  loop at itab3.
    concatenate
                itab3-vkorg
                itab3-vbeln
                itab3-kunnr
                itab3-name1
                itab3-text1
                itab3-matnr
                itab3-maktx
                itab3-prctr
                itab3-text2
                itab3-c_wadat
                itab3-c_olfmng
                itab3-c_preis
                itab3-waerk
                itab3-c_netwr
                itab3-c_hzdat
                into v_transfer separated by ';'.
     transfer v_transfer to filename.
  endloop.

  write: /001 'download Completed'.
  close dataset filename.

endform.
Ich schätze mal ich muss unter diesem Code was einbauen oder ?

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Generierte Datei auf bestimmte Email Adresse versenden

Beitrag von M@atze! (ForumUser / 92 / 6 / 21 ) »
Hi,

Nicht lauffähiges Beispiel wie ich es mache:

Code: Alles auswählen.


  DATA: t_lines    TYPE ty_tline,
        v_html_txt TYPE string.

* Aufbau csv-Anhang
* Kopf
  DATA(v_string) = 'Mat.nr.'  && cl_bcs_convert=>gc_tab &&
                   'Kurztext' && cl_bcs_convert=>gc_tab &&
                   'ST'       && cl_bcs_convert=>gc_tab &&
                   'MArt'     && cl_bcs_convert=>gc_tab &&
                   'PH1 Text' && cl_bcs_convert=>gc_tab &&
                   'PH2 Text' && cl_bcs_convert=>gc_tab &&
                   'PH3 Text' && cl_bcs_convert=>gc_tab &&
                   'Menge'    && cl_bcs_convert=>gc_tab &&
                   'ME'       && cl_bcs_convert=>gc_tab &&
                   'Datum'    && cl_bcs_convert=>gc_crlf.

* Daten
  LOOP AT itab ASSIGNING FIELD-SYMBOL(<s_itab>).
    v_string = v_string &&
               <s_itab>-matnr   && cl_bcs_convert=>gc_tab &&
               <s_itab>-maktx   && cl_bcs_convert=>gc_tab &&
               <s_itab>-mstav   && cl_bcs_convert=>gc_tab &&
               <s_itab>-mtart   && cl_bcs_convert=>gc_tab &&
               <s_itab>-prodh1t && cl_bcs_convert=>gc_tab &&
               <s_itab>-prodh2t && cl_bcs_convert=>gc_tab &&
               <s_itab>-prodh3t && cl_bcs_convert=>gc_tab &&
               |{ <s_itab>-menge DECIMALS = 0 NUMBER = ENVIRONMENT }|  && cl_bcs_convert=>gc_tab &&
               <s_itab>-meins   && cl_bcs_convert=>gc_tab &&
               |{ <s_itab>-datum DATE = USER }| && cl_bcs_convert=>gc_crlf.
  ENDLOOP. "itab

* Konvertieren nach binär
  TRY.
      cl_bcs_convert=>string_to_solix(
        EXPORTING
          iv_string   = v_string
          iv_codepage = '4103'
          iv_add_bom  = abap_true
        IMPORTING
          et_solix  = DATA(t_binary_content)
          ev_size   = DATA(v_size) ).
    CATCH cx_bcs.
      MESSAGE e445(so).
      RETURN.
  ENDTRY.

* Inhalt Email-Body aus SO10-Text
  CALL FUNCTION 'READ_TEXT'
    EXPORTING
      id                      = 'ST'
      language                = sy-langu
      name                    = 'Z_EMAIL_BODY'
      object                  = 'TEXT'
    TABLES
      lines                   = t_lines
    EXCEPTIONS
      id                      = 1
      language                = 2
      name                    = 3
      not_found               = 4
      object                  = 5
      reference_check         = 6
      wrong_access_to_archive = 7
      OTHERS                  = 8.
  IF sy-subrc NE 0.
    v_html_txt = space.
  ELSE.
    LOOP AT t_lines ASSIGNING FIELD-SYMBOL(<s_lines>) WHERE tdformat NE '/*'.
      v_html_txt = v_html_txt && <s_lines>-tdline.
    ENDLOOP.
  ENDIF.

* Email-Versand
  TRY.
*     Sende-Request anlegen
      DATA(o_send_request) = cl_bcs=>create_persistent( ).

*     Empfänger-Email-Adressen aus Selektionsmaske dem Sende-Request hinzufügen
      LOOP AT so_rec.
        DATA(o_recipient) = cl_cam_address_bcs=>create_internet_address( receiver ). "Email-Adresse des Empfängers
        o_send_request->add_recipient( i_recipient = o_recipient
                                       i_express   = abap_true ).
      ENDLOOP.

*     Body erzeugen
      DATA(t_body_txt) = cl_document_bcs=>string_to_soli( ip_string = v_html_txt ).
      DATA(o_document) = cl_document_bcs=>create_document( i_type = 'HTM'
                                                           i_text = t_body_txt
                                                           i_subject = 'Verfügbarer Bestand' ). "Betreff

*     csv-Datei anhängen
      o_document->add_attachment( i_attachment_type    = 'csv' "Datei-Endung
                                  i_attachment_subject = 'Bestand' "Dateiname
                                  i_attachment_size    = v_size
                                  i_att_content_hex    = t_binary_content ).

*     Dokument (Body und Anhang) an Sende-Request hängen
      o_send_request->set_document( o_document ).

*     senden und Status abfragen
      IF o_send_request->send( i_with_error_screen = abap_true ) = abap_true.
        WRITE: / 'Email gesendet.'.
      ELSE.
        MESSAGE 'Fehler beim Email-Versand' TYPE 'E'.
      ENDIF.

      COMMIT WORK.
    CATCH: cx_send_req_bcs, cx_document_bcs, cx_address_bcs.
      MESSAGE 'Fehler beim Email-Versand' TYPE 'E'.
  ENDTRY.

Ist zwar für eine Tab-getrennte csv-Datei aber es geht ja ums grundsätzliche Prinzip.
v_string enthält den eigentlichen Datei-Inhalt.
Wenn du die Datei nicht zusätzlich auf dem Appl.Server brauchst kannst du dir das DATASET-Gedöns sparen.
Ich denke damit kommst du zurecht.

Grüße
Matze

Folgende Benutzer bedankten sich beim Autor M@atze! für den Beitrag:
Armin93


Re: Generierte Datei auf bestimmte Email Adresse versenden

Beitrag von Armin93 (ForumUser / 35 / 10 / 0 ) »
Hallo M@atze !

Vielen Dank für deine Hilfe ...
Auf den ersten Blick ist mir ein wenig schwindelig geworden. =D

ich muss mich in diesem Code erst einarbeiten ...

Ich melde mich sobald ich was weis.

Danke nochmal und LG

Re: Generierte Datei auf bestimmte Email Adresse versenden

Beitrag von M@atze! (ForumUser / 92 / 6 / 21 ) »
Hi Armin,

gern.

Halb so wild, für den eigentlichen Email-Versand ist nur folgendes nötig:

Code: Alles auswählen.


*     Sende-Request anlegen
	  DATA(o_send_request) = cl_bcs=>create_persistent( ).
	  
*     Empfänger-Email-Adresse hinzufügen
      DATA(o_recipient) = cl_cam_address_bcs=>create_internet_address( receiver ). "Email-Adresse des Empfängers
      o_send_request->add_recipient( i_recipient = o_recipient
                                       i_express   = abap_true ).
*     Datei anhängen
      o_document->add_attachment( i_attachment_type    = 'csv' "Datei-Endung
                                  i_attachment_subject = 'Bestand' "Dateiname
                                  i_attachment_size    = v_size
                                  i_att_content_hex    = t_binary_content ).

*     Dokument (Body und Anhang) an Sende-Request hängen
      o_send_request->set_document( o_document ).

*     senden und Status abfragen
      IF o_send_request->send( i_with_error_screen = abap_true ) = abap_true.

Der Rest ist Aufbau des Dateiinhalts und Konvertierungen.

Viel Erfolg.

Gruß
Matze

Folgende Benutzer bedankten sich beim Autor M@atze! für den Beitrag:
Armin93


Re: Generierte Datei auf bestimmte Email Adresse versenden

Beitrag von jocoder (Specialist / 343 / 3 / 102 ) »
@Armin93:
Standardmäßig sind die Mailfunktionen auch in den Funktionsbausteinen SO_NEW_DOCUMENT_ATT_SEND_API1, SO_NEW_DOCUMENT_SEND_API1 und in den Klassen CL_SWF_MAIL_SAPOFFICE_OBJ, CL_UWS_PUBLISHING vorhanden.

Dadurch brauchst du nicht so viel Boilerplate-Code und das ganze Programm wird gleich viel übersichtlicher.

Re: Generierte Datei auf bestimmte Email Adresse versenden

Beitrag von ST22 (Specialist / 279 / 43 / 41 ) »
jocoder hat geschrieben:
06.12.2019 08:41
@Armin93:
Standardmäßig sind die Mailfunktionen auch in den Funktionsbausteinen SO_NEW_DOCUMENT_ATT_SEND_API1, SO_NEW_DOCUMENT_SEND_API1 und in den Klassen CL_SWF_MAIL_SAPOFFICE_OBJ, CL_UWS_PUBLISHING vorhanden.

Dadurch brauchst du nicht so viel Boilerplate-Code und das ganze Programm wird gleich viel übersichtlicher.
Sorry, aber das kann ich nicht nachvollziehen. Die Verwendung der cl_bcs* ist doch viel einfacher, als der Aufbau der Parameter der "alten" Funktionsbausteine.
Man muss sich halt einmal damit befassen, Template bauen, und schon hat mein alles parat auch für zukünftige Anwendungsfälle.
Grüße
Frank

Re: Generierte Datei auf bestimmte Email Adresse versenden

Beitrag von Armin93 (ForumUser / 35 / 10 / 0 ) »
Hallo Matze !!!

Vielen Dank für deine Hilfe ohne dich hätte ich das nie geschafft.
Nach langem herumwerkeln habe ich es so gelöst :

Code: Alles auswählen.

form send_mail.

  loop at itab2.
  concatenate
                itab2-bukrs
                itab2-rbeln
                itab2-kndnr
                itab2-name1
                itab2-text1
                itab2-matnr
                itab2-maktx
                itab2-prctr
                itab2-text2
                itab2-c_budat
                itab2-c_absmg
                itab2-c_preis
                itab2-frwae
                itab2-c_summe1
                itab2-c_hzdat
                into itab10-v_transfer separated by ';'.
    append itab10.
  endloop.


* Daten
  LOOP AT itab10 ASSIGNING FIELD-SYMBOL(<s_itab>).
    v_string = v_string &&
               <s_itab>-v_transfer && cl_bcs_convert=>gc_crlf.
  ENDLOOP. "itab

* Konvertieren nach binär
  TRY.
      cl_bcs_convert=>string_to_solix(
        EXPORTING
          iv_string   = v_string
          iv_codepage = '4103'
          iv_add_bom  = abap_true
        IMPORTING
          et_solix  = DATA(t_binary_content)
          ev_size   = DATA(v_size) ).
    CATCH cx_bcs.
      MESSAGE e445(so).
      RETURN.
  ENDTRY.

* Inhalt Email-Body aus SO10-Text
  call function 'READ_TEXT'
    exporting
      id                      = 'ST'
      language                = sy-langu
      name                    = 'Z_EMAIL_BODY'
      object                  = 'TEXT'
    tables
      lines                   = t_lines
    exceptions
      id                      = 1
      language                = 2
      name                    = 3
      not_found               = 4
      object                  = 5
      reference_check         = 6
      wrong_access_to_archive = 7
      others                  = 8.
  if sy-subrc ne 0.
    v_html_txt = space.
  else.
    loop at t_lines assigning field-symbol(<s_lines>) where tdformat ne '/*'.
      v_html_txt = v_html_txt && <s_lines>-tdline.
    endloop.
  endif.


* Email-Versand
  try.
*     Sende-Request anlegen
      data(o_send_request) = cl_bcs=>create_persistent( ).

*     Empfänger-Email-Adressen aus Selektionsmaske dem Sende-Request hinzufügen
      loop at itab10.
        data(o_recipient) = cl_cam_address_bcs=>create_internet_address( 'armin.sediqi@sag.at' ). "Email-Adresse des Empfängers
        o_send_request->add_recipient( i_recipient = o_recipient
                                       i_express   = abap_true ).
      endloop.

*     Body erzeugen
      data(t_body_txt) = cl_document_bcs=>string_to_soli( ip_string = v_html_txt ).
      data(o_document) = cl_document_bcs=>create_document( i_type = 'HTM'
                                                           i_text = t_body_txt
                                                           i_subject = 'Tägliche Umsatzabfrage' ). "Betreff

*     txt-Datei anhängen
      o_document->add_attachment( i_attachment_type    = 'txt' "Datei-Endung
                                  i_attachment_subject = 'SAP_SALES'
                                  i_attachment_size    = v_size
                                  i_att_content_hex    = t_binary_content ).

*     Dokument (Body und Anhang) an Sende-Request hängen
      o_send_request->set_document( o_document ).

*     senden und Status abfragen
      if o_send_request->send( i_with_error_screen = abap_true ) = abap_true.
        write: / 'Email gesendet.'.
      else.
        message 'Fehler beim Email-Versand' type 'E'.
      endif.

      commit work.
    catch: cx_send_req_bcs, cx_document_bcs, cx_address_bcs.
      message 'Fehler beim Email-Versand' type 'E'.
  endtry.
endform.
Vielen Dank nochmal !!!

LG Armin

Re: Generierte Datei auf bestimmte Email Adresse versenden

Beitrag von Armin93 (ForumUser / 35 / 10 / 0 ) »
Hallo Matze !!!

Vielen Dank für deine Hilfe ohne dich hätte ich das nie geschafft.
Nach langem herumwerkeln habe ich es so gelöst :

Code: Alles auswählen.

form send_mail.

  loop at itab2.
  concatenate
                itab2-bukrs
                itab2-rbeln
                itab2-kndnr
                itab2-name1
                itab2-text1
                itab2-matnr
                itab2-maktx
                itab2-prctr
                itab2-text2
                itab2-c_budat
                itab2-c_absmg
                itab2-c_preis
                itab2-frwae
                itab2-c_summe1
                itab2-c_hzdat
                into itab10-v_transfer separated by ';'.
    append itab10.
  endloop.


* Daten
  LOOP AT itab10 ASSIGNING FIELD-SYMBOL(<s_itab>).
    v_string = v_string &&
               <s_itab>-v_transfer && cl_bcs_convert=>gc_crlf.
  ENDLOOP. "itab

* Konvertieren nach binär
  TRY.
      cl_bcs_convert=>string_to_solix(
        EXPORTING
          iv_string   = v_string
          iv_codepage = '4103'
          iv_add_bom  = abap_true
        IMPORTING
          et_solix  = DATA(t_binary_content)
          ev_size   = DATA(v_size) ).
    CATCH cx_bcs.
      MESSAGE e445(so).
      RETURN.
  ENDTRY.

* Inhalt Email-Body aus SO10-Text
  call function 'READ_TEXT'
    exporting
      id                      = 'ST'
      language                = sy-langu
      name                    = 'Z_EMAIL_BODY'
      object                  = 'TEXT'
    tables
      lines                   = t_lines
    exceptions
      id                      = 1
      language                = 2
      name                    = 3
      not_found               = 4
      object                  = 5
      reference_check         = 6
      wrong_access_to_archive = 7
      others                  = 8.
  if sy-subrc ne 0.
    v_html_txt = space.
  else.
    loop at t_lines assigning field-symbol(<s_lines>) where tdformat ne '/*'.
      v_html_txt = v_html_txt && <s_lines>-tdline.
    endloop.
  endif.


* Email-Versand
  try.
*     Sende-Request anlegen
      data(o_send_request) = cl_bcs=>create_persistent( ).

*     Empfänger-Email-Adressen aus Selektionsmaske dem Sende-Request hinzufügen
      loop at itab10.
        data(o_recipient) = cl_cam_address_bcs=>create_internet_address( 'armin.sediqi@sag.at' ). "Email-Adresse des Empfängers
        o_send_request->add_recipient( i_recipient = o_recipient
                                       i_express   = abap_true ).
      endloop.

*     Body erzeugen
      data(t_body_txt) = cl_document_bcs=>string_to_soli( ip_string = v_html_txt ).
      data(o_document) = cl_document_bcs=>create_document( i_type = 'HTM'
                                                           i_text = t_body_txt
                                                           i_subject = 'Tägliche Umsatzabfrage' ). "Betreff

*     txt-Datei anhängen
      o_document->add_attachment( i_attachment_type    = 'txt' "Datei-Endung
                                  i_attachment_subject = 'SAP_SALES'
                                  i_attachment_size    = v_size
                                  i_att_content_hex    = t_binary_content ).

*     Dokument (Body und Anhang) an Sende-Request hängen
      o_send_request->set_document( o_document ).

*     senden und Status abfragen
      if o_send_request->send( i_with_error_screen = abap_true ) = abap_true.
        write: / 'Email gesendet.'.
      else.
        message 'Fehler beim Email-Versand' type 'E'.
      endif.

      commit work.
    catch: cx_send_req_bcs, cx_document_bcs, cx_address_bcs.
      message 'Fehler beim Email-Versand' type 'E'.
  endtry.
endform.
Vielen Dank nochmal !!!

LG Armin

Re: Generierte Datei auf bestimmte Email Adresse versenden

Beitrag von M@atze! (ForumUser / 92 / 6 / 21 ) »
Hi Armin,

gern geschehen.
Schön das es funktioniert.

Grüße
Matze

Re: Generierte Datei auf bestimmte Email Adresse versenden

Beitrag von gtoXX (Specialist / 213 / 44 / 36 ) »
Nur eines noch :

Bitte gar nicht erst angewöhnen Tabellen mit Kopfzeilen zu verwenden wie "loop at itab2."

Die Performance wird es Dir danken.
"Code lügt nicht ^^"

Seite 1 von 1

Vergleichbare Themen

1
Antw.
1615
Views
Generierte eMail (BCS) als Outlook-Datei "irgendeinname.msg" speichern
von deejey » 22.10.2020 19:31 • Verfasst in SAP - Allgemeines
1
Antw.
5868
Views
Email Adresse im Kreditorenstamm
von Dimonic » 19.05.2009 08:00 • Verfasst in Financials
5
Antw.
5624
Views
Prüfung EMail-Adresse per ADDR_COMM_CHECK
von tomflo » 05.10.2005 17:23 • Verfasst in ABAP® Core
1
Antw.
2668
Views
RFBIDE00 - XD01/XD02 - EMail-Adresse
von tomflo » 07.01.2005 11:00 • Verfasst in ABAP® Core
4
Antw.
3026
Views
Email-Adresse Sachb. in Fakt.-Formular
von Ucke » 30.04.2007 13:54 • Verfasst in Sales and Distribution

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

Regex in where
vor 6 Stunden von edwin 7 / 163
Daten an Tabelle binden
vor 19 Stunden von Bright4.5 3 / 1487

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

Regex in where
vor 6 Stunden von edwin 7 / 163
Daten an Tabelle binden
vor 19 Stunden von Bright4.5 3 / 1487

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 5 Wochen von ralf.wenzel 1 / 3261
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9822