Overblog
Folge diesem Blog Administration + Create my blog
SAPManDoo - SAP Resource

Der vorliegende Blog enthält von mir im Laufe meiner beruflichen Tätigkeit als SAP-Berater zusammengetragene Informationen / Beispiel-Codings zum Themenkreis SAP, speziell FI/CO.

Verfügbarkeitskontrolle - Mail an Verantwortlichen

Veröffentlicht am 12. Februar 2024 von sapmandoo in Basis-Entwicklung allg., FI, CO

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

 

Customizing Toleranzen / Budget Verfügbarkeitskontrolle

Customizing Toleranzen / Budget Verfügbarkeitskontrolle

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 "Verantwortliche"...

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...?).

 

Standard-Benachrichtigung

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. 

Einflussnahme

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.

Kommentare