Wer schon mal im Customizing der Budgetierung, speziell im Bereich der Verfügbarkeitskontrolle unterwegs war (z.B. im Kontext Projektcontrolling oder Investitionsmanagement), wird beim Einstellen der Toleranzen festgestellt haben, dass man bei Überschreitung einer gewissen Budget-Ausschöpfung die Auswahl zwischen drei System-Aktionen hat:
- Warnung
- Fehlermeldung
- Warnung mit Mail an den Verantwortlichen
Beim Punkt "Warnung mit Mail an Verantwortlichen" kamen (zumindest bei mir) etliche Fragen auf, z.B.:
- Wer ist dieser Verantwortliche in diesem Zusammenhang?
- Wohin wird die Mail eigentlich geschickt?
- Was steht da genau drin?
- Kann man das irgendwie beeinflussen?
- Warum habe ich nix anständiges gelernt...?
Der für das jeweilige PSP-Element bzw. für den Innenauftrag Verantwortliche wird in den Stammdaten zugeordnet. Während bei den Innenaufträgen direkt der entsprechende SAP-User im Feld "Verantwortlicher Benutzer" eingetragen wird...
... wird beim PSP-Element der Verantwortliche mit Schlüssel und Klarnamen im Customizing definiert und dort der korrespondierende SAP-User zugeordnet.
Im Stammsatz des PSP-Elementes selbst, wird dann der Schlüssel hinterlegt:
Für den Fall, dass man im Customizing der Toleranzen die Aktion "Warnung mit Mail an Verantwortlichen" ausgewählt hat aber zu einem Objekt KEIN Verantwortlicher gepflegt ist, wird aus der Warnung eine Fehlermeldung (natürlich ohne Mail, an wen auch...?).
Ohne weiteres Zutun wird die "Mail" als interne SAP-Office-Nachricht an den Business Workplace des jeweiligen verantwortlichen SAP-User gesendet.
Die Nachricht ist dabei wie folgt aufgebaut:
Das funktioniert soweit gut, d.h. wem das genügt, braucht hier nichts weiter einzustellen. Vermutlich wird man sich jedoch einigen weitergehenden Anforderungen gegenüber sehen, z.B. den Inhalt oder Betreff der Mail zu beeinflussen oder die Nachricht als "richtige" Mail an ein externes Mail-System zu senden.
Per Customizing geht hier leider nix. Aber es gibt eine SAP-Erweiterung, mit der man z.B. die Mail-Adressaten überschreiben und die interne Nachricht in eine externe Mail "umwandeln" kann.
Zudem gibt es einen Userexit, mit dem gewisse Eigenschaften der Mail verändert werden können. So kann z.B. ein Verfallsdatum hinzugefügt oder der Betreff angepasst werden. Der Inhalt, d.h. der Text der Mail ist leider ohne Modifikation nicht beeinflussbar, dazu aber später mehr.
SAP-Erweiterung zur Bestimmung des/der Mailempfänger/s
SMOD-Erweiterung |
Funktionsexit |
Beschreibung |
SAPLBPFC |
EXIT_SAPLBPFC_001 |
User-Exit: Mailempfänger bestimmen (Details s. Funktionsbaustein-Dokumentation |
Beispiel-Coding:
*&---------------------------------------------------------------------*
*& Include ZXBPFCU01
*&---------------------------------------------------------------------*
* in standard, the message will be sent to the business workplace of
* the SAP user, that is assigned as responsible for the PSP
* element or internal order. We want to send the warning mail
* to the responsible user's regular mail account (e.g. Outlook)
DATA: lt_return TYPE TABLE OF bapiret2,
lt_addsmtp TYPE TABLE OF bapiadsmtp.
* In case, responsible in the master data of the PSP element or
* int. order is not maintained, this table is empty and an error
* message will be thrown in the calling application.
CHECK t_mail_receivers[] IS NOT INITIAL.
* As only one responsible can be assigned, we take the first entry
READ TABLE t_mail_receivers INDEX 1 ASSIGNING FIELD-SYMBOL(<ls_mail_receiver>).
CHECK sy-subrc = 0 AND <ls_mail_receiver> IS ASSIGNED.
* Now we replace the SAP-User with the external EMail address. We retrieve
* that from their user data.
* Switch recipient adress type to external email address:
<ls_mail_receiver>-recesc = 'U'.
* Retrieve & set Email-Adress
CALL FUNCTION 'BAPI_USER_GET_DETAIL'
EXPORTING
username = <ls_mail_receiver>-recnam
TABLES
return = lt_return
addsmtp = lt_addsmtp.
CHECK lt_addsmtp[] IS NOT INITIAL.
READ TABLE lt_addsmtp INDEX 1 ASSIGNING FIELD-SYMBOL(<ls_addsmtp>).
IF sy-subrc = 0 AND <ls_addsmtp> IS ASSIGNED.
<ls_mail_receiver>-recextnam = <ls_addsmtp>-e_mail.
ENDIF.
Die Tabelle T_MAIL_RECEIVERS darf dabei auch mehrere Empfänger enthalten. Um bspw. CC oder BCC-Empfänger hinzuzufügen, sind die Tabellenfelder SNDBC (BCC) bzw. SNDCP (CC) des entsprechenden Eintrags mit 'X' zu belegen.
Userexit
Im Hinweis 879732 wird ein Userexit beschrieben, mit dem gewisse Mail-Attribute beeinflusst werden können. Nachfolgend einige Coding-Beispiele für typische Anwendungsfälle.
*&---------------------------------------------------------------------*
*& Subroutinenpool ZMAILHDR
*&---------------------------------------------------------------------*
*& Change mail properties for mails created by availability control
*& See SAP-Note 879732 for details
*&---------------------------------------------------------------------*
PROGRAM zmailhdr.
FORM mail_header_adjust
CHANGING c_sood1 LIKE sood1.
* Adjust header of mails sent along with warnings
* of availability control.
** Example: Determine an expiry date.
** Option 1 - Expiry date = end of this year.
* C_SOOD1-DLDAT+0(4) = SY-DATLO(4).
* C_SOOD1-DLDAT+4(4) = '1231'.
** Option 2 - Expiry date = current date + 4 weeks.
* C_SOOD1-DLDAT = SY-DATLO + 28.
** Example: Change Mail subject
* c_sood1-OBJDES = 'My subject'.
ENDFORM.
Mail-Inhalt
Der Inhalt der Mail ist leider nicht ohne Modifikation veränderbar. Es wird hierbei der Langtext der entsprechenden Warnmeldung, die bei der Belegerfassung geworfen wird, verwendet und noch um gewisse hart codierte Bestandteile ergänzt.
Falls es doch jemand anpassen will/muss: Der Zusammenbau des Textes findet im Funktionsbaustein BP_CREATE_MAIL, Zeilen 94ff statt.