Mailversand wenn Feld leer ist | SO_NEW_DOCUMENT_SEND_API1

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

Mailversand wenn Feld leer ist | SO_NEW_DOCUMENT_SEND_API1

Beitrag von f.weissenberger (ForumUser / 10 / 3 / 0 ) » 08.01.2020 09:10

Hallo Zusammen,

ich will auf Basis eines Selects checken ob ein Feld ein Wert hat.
Wenn dies nicht der Fall ist soll eine Email versendet werden (dazu will ich den FUBA SO_NEW_DOCUMENT_SEND_API1 nutzen).

Jedoch wird keine Mail erstellt.

Code: Alles auswählen.

FORM GEWICHT_ERMITTELN.

TABLES: MARM.

DATA: I_DOCUMENT_DATA LIKE SODOCCHGI1,
          I_OBJECT_HEADER TYPE TABLE OF SOLISTI1 WITH HEADER LINE,
          I_CONTENT TYPE TABLE OF SOLISTI1 WITH HEADER LINE,
          I_RECEIVERS TYPE TABLE OF SOMLRECI1 WITH HEADER LINE.


select single * from marm
   where matnr = t_avor-matnr and meinh = 'LE'.


if marm-brgew NE ''.
  t_avor-gewicht = marm-brgew.

else.

  I_DOCUMENT_DATA-OBJ_NAME = 'Gewicht nicht gepflegt'.

  I_RECEIVERS-RECEIVER = 'test@firma.de'.
  APPEND I_RECEIVERS.

  I_OBJECT_HEADER-LINE = 'Zusatzfeld Gewicht für Material nicht gepflegt.'.
  APPEND I_OBJECT_HEADER.

  CONCATENATE 'Das Zusatzfeld "Gewicht" ist für das Material:' SPACE marm-matnr 'nicht gepflegt.' INTO I_CONTENT.

  CALL FUNCTION 'SO_NEW_DOCUMENT_SEND_API1'
    EXPORTING
      DOCUMENT_DATA              = I_DOCUMENT_DATA
      DOCUMENT_TYPE              = 'HTM'
*      COMMIT_WORK                = 'X'
*      PUT_IN_OUTBOX              = ''
*   IMPORTING
*     SENT_TO_ALL                =
*     NEW_OBJECT_ID              =
    TABLES
      OBJECT_HEADER              = I_OBJECT_HEADER
      OBJECT_CONTENT             = I_CONTENT
*     CONTENTS_HEX               =
*     OBJECT_PARA                =
*     OBJECT_PARB                =
      RECEIVERS                  = I_RECEIVERS
    EXCEPTIONS
      TOO_MANY_RECEIVERS         = 1
      DOCUMENT_NOT_SENT          = 2
      DOCUMENT_TYPE_NOT_EXIST    = 3
      OPERATION_NO_AUTHORIZATION = 4
      PARAMETER_ERROR            = 5
      X_ERROR                    = 6
      ENQUEUE_ERROR              = 7
      OTHERS                     = 8.

endif.

ENDFORM.

Sorry bin neu, wahrscheinlich eine Kleinigkeit...

Außerdem:
Wenn jetzt die Email-Erzeugung funktioniert, wird dann für jeden Eintrag, bei dem
" matnr = ' ' "
ist eine Email erzeugt?


Danke schonmal :D


Re: Mailversand wenn Feld leer ist | SO_NEW_DOCUMENT_SEND_API1

Beitrag von ST22 (Specialist / 246 / 28 / 30 ) » 08.01.2020 09:36

ersetze mal if marm-brgew NE ''.
durch
if marm-brgew is not initial.

Re: Mailversand wenn Feld leer ist | SO_NEW_DOCUMENT_SEND_API1

Beitrag von a-dead-trousers (Top Expert / 3344 / 92 / 852 ) » 08.01.2020 09:50

COMMIT WORK sollte helfen.
Und der Job für den E-Mail Versand muss eingerichtet sein.
https://rz10.de/sap-basis/sap-email-kon ... nd-testen/
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.07
Basis: 7.40

Re: Mailversand wenn Feld leer ist | SO_NEW_DOCUMENT_SEND_API1

Beitrag von f.weissenberger (ForumUser / 10 / 3 / 0 ) » 08.01.2020 09:51

Aber das ändert nichts daran, dass keine Mail erzeugt wird :/

Re: Mailversand wenn Feld leer ist | SO_NEW_DOCUMENT_SEND_API1

Beitrag von f.weissenberger (ForumUser / 10 / 3 / 0 ) » 08.01.2020 09:56

a-dead-trousers hat geschrieben:
08.01.2020 09:50
COMMIT WORK sollte helfen.
Und der Job für den E-Mail Versand muss eingerichtet sein.
https://rz10.de/sap-basis/sap-email-kon ... nd-testen/
Eingerichtet ist der E-Mail Versand, und der funktioniert auch aus andere Programmen heraus.

Was genau muss ich mit dem COMMIT WORK machen?

Re: Mailversand wenn Feld leer ist | SO_NEW_DOCUMENT_SEND_API1

Beitrag von ST22 (Specialist / 246 / 28 / 30 ) » 08.01.2020 10:02

Frag doch mal den Subrc nach Aufruf des Fubas ab. Hast du evtl ein Berechtigungsproblem?
VG
Frank

Re: Mailversand wenn Feld leer ist | SO_NEW_DOCUMENT_SEND_API1

Beitrag von Legxis (Specialist / 153 / 80 / 27 ) » 08.01.2020 10:16

Schau mal in der SOST nach, ob die Mail erstellt wird. Dass sie im Entwicklungssystem nicht wirklich versendet wird überrascht mich nicht.
( SAP ECC 6.0, NetWeaver 7.0, ohne unicode, ohne support/enhancement packages )

Re: Mailversand wenn Feld leer ist | SO_NEW_DOCUMENT_SEND_API1

Beitrag von a-dead-trousers (Top Expert / 3344 / 92 / 852 ) » 08.01.2020 11:29

I_RECEIVER-REC_TYPE muss glaub ich korrekt gesetzt werden, je nachdem was in I_RECEIVER-RECEIVER übergeben wird. Im Falle einer echten E-Mail Adresse müsste es 'U' sein.

f.weissenberger hat geschrieben:
08.01.2020 09:56
Was genau muss ich mit dem COMMIT WORK machen?
Direkt nach dem Aufruf des Funktionsbaustein den Befehl ausführen.
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.07
Basis: 7.40

Re: Mailversand wenn Feld leer ist | SO_NEW_DOCUMENT_SEND_API1

Beitrag von jocoder (Specialist / 146 / 2 / 35 ) » 08.01.2020 11:59

Eine deutliche robustere Variante wäre die Nutzung der BCS-Serviceklassen wie in diesem Thread diskutiert.
Zudem würde ich dir empflehen, der Prozedur einen anderen Namen zu geben. GEWICHT_ERMITTELN ist in diesem Fall sehr verwirrend, da die Prozedur etwas total anderes macht. SEND_MAIL_WHEN_BRGEW_ZERO beschreibt doch deutlich besser den Inhalt.

Bei Verwendung der BCS-Serviceklassen brauchst du Ausnahmenbehandlung mit klassischen Ausnahmen mehr zu implementieren.

So sieht der Code doch besser aus oder?

Code: Alles auswählen.

FORM send_mail_when_brgew_zero RAISING cx_bcs
  CHANGING send_sucessfully TYPE os_boolean.
  DATA: gross_weight TYPE brgew,
        request TYPE REF TO cl_bcs.
            
  SELECT brgew FROM marm INTO gross_weight WHERE 
    matnr = t_avor-matnr AND meinh = 'LH'.
  IF gross_weight IS INITIAL.
    PERFORM create_mail_request CHANGING request.
    send_sucessfully = request->send( ).
  ENDIF.  

ENDFORM.

FORM create_mail_request USING matnr TYPE matnr
  CHANGING request TYPE REF TO cl_bcs.
  DATA: body_line TYPE soli,
        body_complete TYPE soli_tab.

  request = cl_bcs=>create_persistent( ).
  DATA(recipient) = cl_cam_address_bcs=>create_internet_address( 'test@email.com' ). 
  request->add_recipient( i_recipient = recipient
                                          i_express   = abap_true ).

  CONCATENATE 'Das Zusatzfeld "Gewicht" ist für das Material:' matnr 'nicht gepflegt' INTO body-line SEPARATED BY SPACE.
  APPEND body_line TO body_complete.
  DATA(document) =   cl_document_bcs=>create_document(  
    i_subject =  'Gewicht nicht gepflegt'
    i_type = 'TXT'
    i_text = body_complete ).
  request->set_document( document ).
    
ENDFORM.
Die Ausnahme CX_BCX würde ich generell so späte wie möglich abfangen and dann erst in eine Fehlermeldung umsetzen.

Seite 1 von 1