Mail aus PA30 senden (Fehler da kein COMMIT WORK)

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

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
8 Beiträge • Seite 1 von 1
8 Beiträge Seite 1 von 1

Mail aus PA30 senden (Fehler da kein COMMIT WORK)

Beitrag von Dyrdek (Specialist / 306 / 30 / 0 ) »
Hallo,

Ich habe eine dynamische Maßnahme für die PA30 die eine Mail verschicken soll.
Die Mail landet in der SOST aber mit dem Status "Noch kein Eintrag in Warteschlange". Fehler hierfür ist ein fehlendes COMMIT WORK.
Das Problem ist aber dass ich COMMIT WORK bereits eingebaut habe, aber scheinbar bekannt ist dass in der PA30 bspw. kein COMMIT WORK möglich ist.

Somit wird die Mail auch nicht versandt, bzw. in diesen Status versetzt.

Gefunden habe ich gerade den FUBA 'SO_NEW_DOCUMENT_SEND_API1' bin bisher aber nicht soweit gekommen diesen erfolgreich zu testen.

Kennt sich jemand aus und kann mir hier weiterhelfen?

Aktuell sieht mein Mailversand wie folgt aus:

Code: Alles auswählen.

  ...    TRY.
          " Senderequest erzeugen
          lo_sendrequest = cl_bcs=>create_persistent( ).

*          lo_sendrequest->set_send_immediately( i_send_immediately = 'X'  ).
*            CATCH cx_send_req_bcs.    "

          " Sender hinzufügen
          lo_sendrequest->set_sender( cl_cam_address_bcs=>create_internet_address( i_address_string = gc_sender_addr ) ).

          " Empfänger hinzufügen
          lo_sendrequest->add_recipient(
              i_recipient  = cl_cam_address_bcs=>create_internet_address( lv_mail )
              i_express    = abap_true
          ).

          " Dokument erzeugen
          lo_document = cl_document_bcs=>create_document(
                   i_type    = 'RAW'
                   i_text    = lt_text
                   i_length  = '12'
                   i_subject = 'Info-Mail:  '
                   i_sensitivity = 'O').
          lo_sendrequest->set_document( lo_document ).
...

Danke schonmal!

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


Re: Mail aus PA30 senden (Fehler da kein COMMIT WORK)

Beitrag von Tron (Top Expert / 1327 / 35 / 332 ) »
Moin.
Ich schlage vor:
1. Lege einen Funktionsbaustein mit der Eigenschaft "Verbuchungsbaustein" an.
2. Setze Dein Coding in den Baustein ein und beachte die eingeschränkten Möglichkeiten der Übergabeparameter .
3. Rufe den Bautein mit dem Zusatz "IN UPDATE TASK" im PA30 Exit auf.

Dazu mal ein Tutorial
http://saptechnical.com/Tutorials/ABAP/Debug/Index.htm

Könnte nützlich sein.
Dieses Beispielcoding stellt fest, ob ich im Hintergrund, bzw. im Verbucher bin.

Code: Alles auswählen.

data lv_utask type sy-subrc.

CALL FUNCTION 'TH_IN_UPDATE_TASK'
IMPORTING
   IN_UPDATE_TASK       = lv_utask.

CHECK sy-batch IS INITIAL.
CHECK lv_utask IS INITIAL.
gruß Jens
<:: XING-Gruppe Tricktresor::>
Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen –
Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

Re: Mail aus PA30 senden (Fehler da kein COMMIT WORK)

Beitrag von a-dead-trousers (Top Expert / 4419 / 224 / 1189 ) »
Ich glaub ein Verbuchungsbaustein ist hier nicht zielführend, da ja die Verbuchung gar nicht angestoßen wird (kein COMMIT WORK)
Was aber geht (und ich auch schon zigfach gemacht habe) ist einen RFC-fähigen Baustein für den Email-Versand zu erstellen und diesen mit DESTINATION NONE aufrufen. Damit erzeugt SAP eine neue LUW deren COMMIT WORK die Haupt-LUW nicht beeinflusst. So ist das Versenden einer Email aus jeden denkbaren Kunstrukt heraus möglich (BAPI, Verbuchung, WebDynpro, uvm.)

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
Tron

Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Mail aus PA30 senden (Fehler da kein COMMIT WORK)

Beitrag von Tron (Top Expert / 1327 / 35 / 332 ) »
Moin.
@ADT
Stimmt. Die PA30 besitzt keine klassische Update Task und damit hat man keine Wahl und muss den Email Versand über RFC anstoßen.

Hier mein Testbaustein mit Eigenschaft "Remote fähiger Baustein".
(Email adresse anpassen!)

Code: Alles auswählen.

FUNCTION Y_SEND_MAIL_RFC .
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*"----------------------------------------------------------------------
  DATA l_utask TYPE i.
  DATA lv_internetadr TYPE adr6-smtp_addr.
  DATA lv_subject TYPE so_obj_des VALUE 'Test mit Commit Work'.

  DATA  send_request       TYPE REF TO cl_bcs.
  DATA  text               TYPE bcsy_text.
  DATA  s_text             TYPE so_text255.
  DATA  document           TYPE REF TO cl_document_bcs.
  DATA  recipient          TYPE REF TO if_recipient_bcs.
  DATA  bcs_exception      TYPE REF TO cx_bcs.
  DATA  sent_to_all        TYPE os_boolean.

*     create the send request
  TRY.
      send_request = cl_bcs=>create_persistent( ).

      s_text = '0123456789'.
      APPEND s_text TO text.
      APPEND s_text TO text.

      document = cl_document_bcs=>create_document(
                                i_type    = 'RAW'
                                i_text    = text
                                i_subject = lv_subject ).

*    *     add list attachment to document
*       lv_attname = 'Test mit Commit Work'.

*    *=============== Prep Send

*    *     add document to send request
      send_request->set_document( document ).

*    *     create recipient and add to send request

      recipient = cl_cam_address_bcs=>create_internet_address( 'sapuser@localhost' ).

*          IF lv_internetadr IS INITIAL.
*            recipient = cl_sapuser_bcs=>create( sy-uname ).
*          ELSE.
*            recipient = cl_cam_address_bcs=>create_internet_address( lv_internetadr ).
*          ENDIF.

      send_request->add_recipient( i_recipient = recipient ).

*    *     send
      send_request->set_send_immediately( i_send_immediately = 'X' ).
      sent_to_all = send_request->send( i_with_error_screen = 'X' ).

      IF sent_to_all = 'X'.
        MESSAGE s022(so).
      ENDIF.

    CATCH cx_bcs INTO bcs_exception.
      MESSAGE e865(so) WITH bcs_exception->error_type.
  ENDTRY.

  CLEAR:
    document,
    recipient,
   send_request.

* Im VERBUCHER kein Commit work !!
*Values: 1: in update task, 0: not in update task
  CALL FUNCTION 'TH_IN_UPDATE_TASK'
    IMPORTING
      in_update_task = l_utask.

  IF l_utask IS INITIAL.
    COMMIT WORK.
  ENDIF.

ENDFUNCTION.
Badi HRPAD00INFTY : IF_EX_HRPAD00INFTY~IN_UPDATE

Code: Alles auswählen.

 METHOD if_ex_hrpad00infty~in_update .
  CALL FUNCTION 'Y_SEND_MAIL_RFC' DESTINATION 'NONE'.
ENDMETHOD.
Für einen Verbuchungsbaustein muß man lediglich die Eingenschaft "Verbuchungsbaustein" aktiv sein, das Coding ist das Selbe.
Der Aufruf wäre dann CALL FUNCTION 'Y_SEND_MAIL_IN_UPDATE_TASK' IN UPDATE TASK.
Das wäre bei allen Transaktionen relevant, die auch klassisch verbuchen, wie z.B. VA01/VA02 ...
So würde man bei einem eventuellen ROLLBACK davon profitieren, das die Mail nicht versendet wird, wenn der User die TA abbricht.

gruß Jens
<:: XING-Gruppe Tricktresor::>
Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen –
Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

Re: Mail aus PA30 senden (Fehler da kein COMMIT WORK)

Beitrag von Dyrdek (Specialist / 306 / 30 / 0 ) »
Danke für eure Antworten erstmal.

Ich habe es jetzt über einen RFC fähigen Fuba gemacht.
Der nimmt alle notwendigen Parameter an und enthält anschließend das gleiche Coding wie meine SEND_MAIL-Methode.
DESTINATION des RFC Aufrufs ist 'NONE'.

Funktioniert nun alles wie gewünscht.

Danke für die Hilfe!

Re: Mail aus PA30 senden (Fehler da kein COMMIT WORK)

Beitrag von jaypee96 (ForumUser / 3 / 0 / 0 ) »
Hallo Tron,

ich wollte einen entsprechenden RFC-Baustein anlegen, bekomme aber die Meldung:

"Beim RFC sind keine Referenzparameter zugelassen"
Meldungsnr. FL381
Diagnose
Sie haben für einen remote aufrufbaren Funktionsbaustein einen Referenzparameter definiert. Bei diesen Funktionsbausteinen sind aber nur Werteparameter zulässig.
Vorgehen:
Ändern Sie den Referenzparameter in einen Werteparameter."

Hast Du hierfür auch eine Lösung?

Gruß
Jan

Re: Mail aus PA30 senden (Fehler da kein COMMIT WORK)

Beitrag von Tron (Top Expert / 1327 / 35 / 332 ) »
Moin Jan.
Wie sieht denn Deine Schnittstelle aus ?
Der Baustein muss so aufgebaut sein, dass nur Parameter mit Wertübergabe benutzt werden.
Das bedeutet, dass Du ggf. das Coding so umarangiertst, das die Bedingungen für RFC Bausteine erfüllt sind.
siehe https://help.sap.com/http.svc/rc/abapdo ... ations.htm
gruß Jens
<:: XING-Gruppe Tricktresor::>
Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen –
Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

Re: Mail aus PA30 senden (Fehler da kein COMMIT WORK)

Beitrag von jaypee96 (ForumUser / 3 / 0 / 0 ) »
Moin Jens,
vielen Dank für Deine schnelle Antwort.
Die fehlende Wertübergabe war das Problem.

Gruß
Jan

Seite 1 von 1

Vergleichbare Themen

1
Antw.
1605
Views
Mail senden ohne Commit (weil im User-Exit)
von ralf.wenzel » 03.06.2015 13:31 • Verfasst in ABAP® Core
1
Antw.
1995
Views
IDoc: Fehler per Mail senden
von H0schie » 26.04.2005 08:50 • Verfasst in ABAP® für Anfänger
11
Antw.
2917
Views
COMMIT WORK
von retsch » 25.05.2023 07:40 • Verfasst in ABAP® für Anfänger
0
Antw.
1474
Views
Nachrichtenfindung und COMMIT WORK
von schmitzandreas » 21.01.2008 13:25 • Verfasst in ABAP® Core
5
Antw.
2304
Views
COMMIT WORK bei 2 BAPI
von autohandel7 » 11.11.2020 11:16 • Verfasst in ABAP® für Anfänger

Ü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

Feldwerte vergleichen
vor 4 Stunden von wreichelt 2 / 26
Workflow-Datenfluss mit Multi-Line-Container
vor 6 Stunden von ewx gelöst 2 / 76
Mahnung erstellen
vor 10 Stunden von Sebastian82 4 / 112
Absprung VA02 Position
vor 2 Tagen von gs3rr4 gelöst 3 / 105

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

Feldwerte vergleichen
vor 4 Stunden von wreichelt 2 / 26
Workflow-Datenfluss mit Multi-Line-Container
vor 6 Stunden von ewx gelöst 2 / 76
Mahnung erstellen
vor 10 Stunden von Sebastian82 4 / 112
Absprung VA02 Position
vor 2 Tagen von gs3rr4 gelöst 3 / 105

Unbeantwortete Forenbeiträge

OPD Druck im SPOOL
vor 2 Tagen von Manfred K. 1 / 66
Export von Spools in XLSX
vor einer Woche von abapamateur 1 / 731
Feldberechnung ME32K
vor einer Woche von ZF_SAPler 1 / 1331