SAP-Express-Meldung

www.4AP.de - ABAP Syntaxbeispiel: SAP-Express-Meldung im Report anlegen

Beispielcoding: SAP-Express-Meldung im Report anlegen (kopieren erlaubt aber auf eigene Gefahr :-))



Das Senden einer SAP-Express-Mail kann z.B. bei einer automatischen Verbuchung von Warenbestellungen nützlich sein, damit der Disponent auch etwas von der Bestellung (die z.B. elektronisch hereinkommt) 'bemerkt' oder um umfangreichere Fehlermeldungen ausgeben zu können:
 
*&---------------------------------------------------------------------*
*& Report ZETSFEHL *
* erstellt 16.04.2002 *
* Coded by Thorsten Neubüser - www.4ap.de
*
*&---------------------------------------------------------------------*
* Senden von SAP-Express-Meldungen
* Dieser Report ist nur für die automatische Verarbeitung vorgesehen
* Online-Betrieb nur für Testzwecke
*&---------------------------------------------------------------------*


REPORT ZETSFEHL.

DATA: FUBAU(30) TYPE C. " Kurz-Name des Fubaus

PARAMETERS:
P_FUBAU LIKE FUBAU,
P_KUNNR LIKE VBAK-KUNNR, " Kundennummer
P_VKORG LIKE ZETSLIEFER-VKORG. " Verkaufsorganisation


DATA:
BEGIN OF FEHLER_TAB OCCURS 0, " Tabelle für Fehlermeldungen
LINE LIKE LINE,
END OF FEHLER_TAB.

* für online / Testbetrieb
INITIALIZATION.
P_FUBAU = 'ZETSFEHL online Test'.
P_KUNNR = '123456'.
P_VKORG = '0001'.
FEHLER_TAB-LINE = 'Test im Online ZETSFEHL'.
APPEND FEHLER_TAB.

START-OF-SELECTION.

PERFORM FEHLER_BEHANDLUNG TABLES FEHLER_TAB
USING P_FUBAU P_KUNNR P_VKORG.

END-OF-SELECTION.
WRITE: / 'Online:'.
LOOP AT FEHLER_TAB.
WRITE: / FEHLER_TAB-LINE.
ENDLOOP.

*&---------------------------------------------------------------------*
*& Form FEHLER_BEHANDLUNG
*&---------------------------------------------------------------------*
* -->fehler_tab Tabelle mit zeilenweise hinterlegtem Inhalt
* -->P_FUBAU Aufrufer der Fehlermeldung
* -->p_kunnr Kundennummer, steuert die Empfängerauswahl
* -->P_VKORG dito
*----------------------------------------------------------------------*

FORM FEHLER_BEHANDLUNG TABLES FEHLER_TAB LIKE FEHLER_TAB[]
USING P_FUBAU P_KUNNR P_VKORG.


* fehler_tab ausgeben über Fubau SO_NEW_DOCUMENT_SEND_API1

DATA: OBJCONT LIKE SOLISTI1 OCCURS 5 WITH HEADER LINE.
DATA: RECLIST LIKE SOMLRECI1 OCCURS 5 WITH HEADER LINE.
DATA: DOC_CHNG LIKE SODOCCHGI1.
DATA: ENTRIES LIKE SY-TABIX.

* Fill the document
DOC_CHNG-OBJ_NAME = 'URGENT'. " Dokumentname
CONCATENATE 'Fehlermeldung: '(001) P_FUBAU " Titel der Meldung
INTO DOC_CHNG-OBJ_DESCR SEPARATED BY ' : '. " max. 50 Char
DOC_CHNG-SENSITIVTY = 'O'. " Sensitivität
* Meldungsinhalte schreiben
OBJCONT-LINE = 'Meldungsliste:'(002).
APPEND OBJCONT.
LOOP AT FEHLER_TAB.
MOVE FEHLER_TAB-LINE TO OBJCONT-LINE.
APPEND OBJCONT.
ENDLOOP. " at fehler_tab
APPEND INITIAL LINE TO OBJCONT.
* Dokumentenlänge ermitteln
DESCRIBE TABLE OBJCONT LINES ENTRIES.
READ TABLE OBJCONT INDEX ENTRIES.
DOC_CHNG-DOC_SIZE = ( ENTRIES - 1 ) * 255 + STRLEN( OBJCONT ).

* Fill the receiver list
TABLES: ZETS0009. " hinterlegte Empfänger
SELECT * FROM ZETS0009 WHERE KUNNR EQ P_KUNNR
AND VKORG EQ P_VKORG
AND MEDIUM EQ 'TEST'.
CHECK ZETS0009-GESPERRT IS INITIAL.
* Empfänger in Tabelle RECEIVERS schreiben
RECLIST-REC_TYPE = ZETS0009-REC_TYPE. " Typ SAP-Benutzername
RECLIST-RECEIVER = ZETS0009-UNAME. " Username
RECLIST-EXPRESS = ZETS0009-EXPRESS. " Send express SAPmail
APPEND RECLIST.
ENDSELECT. " from zets0009
* Falls keine Einträge vorhanden sind
IF RECLIST[] IS INITIAL.
RECLIST-REC_TYPE = 'B'. " Typ SAP-Benutzername
RECLIST-RECEIVER = 'SAPADMIN'. " Administrator als default
RECLIST-EXPRESS = 'X'. " Send express SAPmail
APPEND RECLIST.
ENDIF.


* Send the document
CALL FUNCTION 'SO_NEW_DOCUMENT_SEND_API1'
EXPORTING
DOCUMENT_DATA = DOC_CHNG
DOCUMENT_TYPE = 'RAW'
PUT_IN_OUTBOX = 'X'
* IMPORTING
* SENT_TO_ALL =
* NEW_OBJECT_ID =

TABLES
* OBJECT_HEADER =
OBJECT_CONTENT = OBJCONT
* OBJECT_PARA =
* OBJECT_PARB =

RECEIVERS = RECLIST
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.

CASE SY-SUBRC.
WHEN 0.
LOOP AT RECLIST.
IF RECLIST-RETRN_CODE = 0.
WRITE: / RECLIST-RECEIVER, ': Senden erfolgreich'.
ELSE.
WRITE: / RECLIST-RECEIVER, ': Senden nicht erfolgreich'.
ENDIF.
ENDLOOP.
WHEN 1.
WRITE: / 'Es wurden zu viele Empfänger angegeben !'.
WHEN 2.
WRITE: / 'Das Dokument wurde von keinem Empfänger erhalten !'.
WHEN 4.
WRITE: / 'Keine Berechtigung zum Senden !'.
WHEN OTHERS.
WRITE: / 'Unerwarteter Fehler aufgetreten !'.
ENDCASE. " sy-subrc

ENDFORM. " FEHLER_BEHANDLUNG