BC Entwicklung: Bestellung aus Bestellanforderung

Ablaufbeschreibung:

Der ABAP-Report [Y_MMPUR0] stellt die Selektionsbereiche [Änderungsbelege] und/oder [Bestellanforderung(en)] zur Verfügung. Die Selektion im Bereich [Änderungsbelege] ist für die wiederkehrenden Läufe gedacht. Die Selektion [Bestellanforderungen] ist auf einen eventuellen Initiallauf oder für Wiederholungen vorbereitet.

Der tägliche Job [MM BESTELLUNG AUS BANF PROTOKOLL] läuft um 01:00 Uhr Nachts und selektiert über die Variante [….0001] alle Bestellungen vom Vortag, die mit der Transaktion [ME21N] zu einer Bestellanforderung erstellt wurden. Die relevanten Empfänger können mit der Transaktion [SM30] zur Tabelle [YMMPUR0] voreingestellt werden. Derzeit erhalten die Ersteller der Bestellanforderung die Email direkt selbst. Eine Änderung der Email Empfänger ist jederzeit und/oder nach Einplanung zum jeweiligen Datum möglich.

Anforderung:

Die/der Ersteller(in) einer Bestellanforderungen [BANFer] soll per Email informiert werden, wenn ihre/seine BANF in eine Bestellung umgewandelt wurde.

Grundsätzlich:

Modifikationen sollten vermieden werden.

Lösungsansatz:

Der Zeitpunkt der Umwandlung festhalten

Dazu bieten sich Erweiterungen aus der Transaktion [SMOD] an. Mit der Kundenerweiterung [MM06E007] kann man veranlassen, dass automatisch Änderungsbelege angelegt werden, wenn aus einer Bestallanforderung eine Bestellung wird. Dazu legt man mit der Transaktion [CMOD] ein Projekt [Y_MMPUR0] an und ordnet die Erweiterung [MM06E007] zu.

An dieser Stelle ruft man die Dokumentation zur Erweiterung [Strg+F4] auf:

Beschreibung

Sie können diese Erweiterung nutzen, wenn bei der Umsetzung einer Bestellanforderung in einen Einkaufsbeleg (z.B. in eine Anfrage oder Bestellung, einen Kontrakt oder Lieferplan) ein Änderungsbeleg für die Bestellanforderung erstellt werden soll. (Im Änderungsbeleg steht u.a. der Erfasser der Einkaufsbelegs.)

Vorgehen

Setzen Sie im Funktionsexit EXIT_SAPMM06E_020 den Changing-Parameter C_CHANGEDOC_FOR_REQ auf ‚X‘.

Wenn der Änderungsbeleg nur bei bestimmten Einkaufsbelegen erstellt werden soll, fragen Sie den Bestelltyp über I_EKKO-BSTYP ab:

A   Anfrage

F   Bestellung

K   Kontrakt

L   Lieferplan

Hinweis

Beachten Sie, daß sich die Aktivierung dieser Erweiterung negativ auf die Performance auswirkt.

Unter den Komponenten steht dann der Funktionsbaustein [EXIT_SAPMM06E_020] für die Ausprägung zur Verfügung. Dazu muss der INCLUDE [ZXM06U50] angelegt werden. Erst mit der Implementierung und Aktivierung werden die Änderungsbelege erzeugt.

Zeitpunkt zum Versenden der Emails

Für diese wiederkehrende Aufgabe bieten sich Batch-Prozesse [JOBS] an. Dazu legt man ein ABAP-Programm und eine passende Variante für die Selektion der Daten an. Starttermin und Wiederholung kann sehr flexibel festgelegt werden.

Selektion der Daten über Änderungsbelege

Die Änderungsbelege werden in der Tabelle [CDHDR] abgelegt. Beispiele erhält man mit der Transaktion [SE16N] auf die Tabelle [CDHDR] zur [OBJECTCLAS] [BANF] und [TCODE] [ME21N]. Aus den Feldern [OBJECTID], [USERNAME] und [UDATE] können dann Rückschlüsse auf die BANF, die User-ID des Erfassers der Bestellung und das Datum gezogen werden. In der Tabelle der Bestellanforderungen [EBAN] findet man die User-ID [ERNAM] des Erstellers. Die Felder [EBELN] und [EBELP] aus der Tabelle [EBAN] zeigen auf die erstellte Bestellung und Bestellposition.

Selektion der Bestellanforderungen direkt

Die Bestellanforderungen sollen auch die direkt aufgerufen werden können. Die Selektion über die Änderungsbelege steht erst ab der Aktivierung der Erweiterung zur Verfügung.

Ermittlung der Email-Adresse

Die Email Adresse einer User-ID steht in der Tabelle [ADR6]. Dazu muss vorher die Tabelle [USR21] zur User-ID gelesen werden. Die Felder [PERSNUMBER] und [ADDRNUMBER] bieten hier die Verknüpfung.

Hier ergeben sich mehrere Probleme:

  • Wie steuert man mehrere Emails an?
  • Was passiert, wenn BANFer keine Emails erhalten will?

Daher wurde eine Konfigurationstabelle [YMMPUR0] der Email Adressen erstellt:

Feld Key Initial Datenelement
MANDT X X MANDT
BNAME X X XUBNAME
SMTP_ADDR X X ADSMTPADR
VALID_FROM X X AD_VALFROM
VALID_TO AD_VALTO
AKTIV FLAG

Die Tabelle [YMMPUR0] wird automatisch gefüllt und kann mit der Transaktion [SM30] nachgepflegt werden. Nachdem die Tabelle [YMMPUR0] die Email-Adresse als Schlüsselfeld hat, können zu einer User-ID mehrere Email-Adressen angelegt werden. Das Feld [Aktiv] zeigt an, ob an diese Email verschickt werden soll oder nicht. Über die Felder [VALID_FROM] und [VALID_TO] können Konfigurationen vorbereitet werden, die erst ab einem bestimmten Tag gültig sind.

Erstellen und Versenden der Emails

Hierzu stehen die Methoden der Klasse [CL_BCS] [Business Communication Service] zur Verfügung.

Struktur [DD01D] Dynprofelder für Domäne

 

TABNAME FIELDNAME KEYFLAG MANDATORY CHECKTABLE DOMNAME
DD01D DOMNAME     * DOMNAME
DD01D DATATYPE       DATATYPE
DD01D LENG       DDLENG
DD01D OUTPUTLEN       DDLENG
DD01D DECIMALS       DDLENG
DD01D LOWERCASE       AS4FLAG
DD01D SIGNFLAG       AS4FLAG
DD01D VALEXI       AS4FLAG
DD01D ENTITYTAB     * AS4TAB
DD01D CONVEXIT       CONVEXIT
DD01D DDTEXT       AS4TEXT
DD01D VALEXITEXT       TEXT35
DD01D APPENDNAME     * DOMNAME
DD01D SWITCH_ID       SFW_SWITCHID

View [DD0102V] Domänenname mit Wertetabellenheader

 

TABNAME FIELDNAME KEYFLAG MANDATORY CHECKTABLE DOMNAME
DD0102V TABNAME X     AS4TAB
DD0102V AS4LOCAL02 X     AS4LOCAL
DD0102V AS4VERS02 X     AS4VERS
DD0102V DOMNAME X     DOMNAME
DD0102V AS4LOCAL01 X     AS4LOCAL
DD0102V AS4VERS01 X     AS4VERS
DD0102V TABCLASS       TABCLASS
DD0102V SQLTAB       AS4TAB
DD0102V DATMIN       DATANZ
DD0102V DATMAX       DATANZ
DD0102V DATAVG       DATANZ
DD0102V CLIDEP       CLIDEP
DD0102V BUFFERED       BUFFERED
DD0102V COMPRFLAG       AS4FLAG
DD0102V LANGDEP       LANGDEP
DD0102V ACTFLAG       ACTFLAG
DD0102V APPLCLASS       APPLCLASS
DD0102V AUTHCLASS       AUTHCLASS
DD0102V AS4USER       AS4USER
DD0102V AS4DATE       AS4DATE
DD0102V AS4TIME       AS4TIME
DD0102V MASTERLANG       SPRAS
DD0102V MAINFLAG       MAINTFLAG
DD0102V CONTFLAG       CONTFLAG
DD0102V RESERVETAB       CHAR4
DD0102V GLOBALFLAG       GLOBALFLAG
DD0102V PROZPUFF       PROZPUFF

Tabelle [DD03L] Tabellenfelder

 

TABNAME FIELDNAME POSITION KEYFLAG MANDATORY CHECKTABLE DOMNAME
DD03L TABNAME 0001 X   DD02L AS4TAB
DD03L FIELDNAME 0002 X     FDNAME
DD03L AS4LOCAL 0003 X     AS4LOCAL
DD03L AS4VERS 0004 X     AS4VERS
DD03L POSITION 0005 X     AS4POS
DD03L KEYFLAG 0006       KEYFLAG
DD03L MANDATORY 0007       AS4FLAG
DD03L ROLLNAME 0008     DD04L ROLLNAME
DD03L CHECKTABLE 0009     * AS4TAB
DD03L ADMINFIELD 0010       AS4FLAG
DD03L INTTYPE 0011       INTTYPE
DD03L INTLEN 0012       DDLENG
DD03L REFTABLE 0013     * AS4TAB
DD03L PRECFIELD 0014     * FDNAME
DD03L REFFIELD 0015     * FDNAME
DD03L CONROUT 0016       CHAR10
DD03L NOTNULL 0017       NOTNULL
DD03L DATATYPE 0018       DATATYPE
DD03L LENG 0019       DDLENG
DD03L DECIMALS 0020       DDLENG
DD03L DOMNAME 0021     DD01L DOMNAME
DD03L SHLPORIGIN 0022       SHLPORIGIN
DD03L TABLETYPE 0023       DDFLAG
DD03L DEPTH 0024       TYPEDEPTH
DD03L COMPTYPE 0025       COMPTYPE
DD03L REFTYPE 0026       DDREFTYPE
DD03L LANGUFLAG 0027       DDLANGUFLG
DD03L DBPOSITION 0028       AS4POS

Tabelle [DD01L] Domänen

 

TABNAME FIELDNAME POSITION KEYFLAG MANDATORY CHECKTABLE DOMNAME
DD01L DOMNAME 0001 X     DOMNAME
DD01L AS4LOCAL 0002 X     AS4LOCAL
DD01L AS4VERS 0003 X     AS4VERS
DD01L DATATYPE 0004       DATATYPE
DD01L LENG 0005       DDLENG
DD01L OUTPUTLEN 0006       DDLENG
DD01L DECIMALS 0007       DDLENG
DD01L LOWERCASE 0008       AS4FLAG
DD01L SIGNFLAG 0009       AS4FLAG
DD01L LANGFLAG 0010       AS4FLAG
DD01L VALEXI 0011       AS4FLAG
DD01L ENTITYTAB 0012     DD02L AS4TAB
DD01L CONVEXIT 0013       CONVEXIT
DD01L MASK 0014       AS4MASK
DD01L MASKLEN 0015       MASKLEN
DD01L ACTFLAG 0016       ACTFLAG
DD01L APPLCLASS 0017     * APPLCLASS
DD01L AUTHCLASS 0018       AUTHCLASS
DD01L AS4USER 0019       AS4USER
DD01L AS4DATE 0020       AS4DATE
DD01L AS4TIME 0021       AS4TIME
DD01L DOMMASTER 0022     * SPRAS
DD01L RESERVEDOM 0023       CHAR4
DD01L DOMGLOBAL 0024       GLOBALFLAG
DD01L APPENDNAME 0025     * DOMNAME
DD01L APPEXIST 0026       DDAPPEXI
DD01L PROXYTYPE 0027       DDPROXYTY

Tabelle [TBTCP] Step-Übersicht eines Batch-Jobs

Spoolliste finden:
Mit dem Feldinhalt [PRIPARKEY] geht es in die Tabelle [TPRI_PAR]. Die ersten 12 Stellen in [KEY1] und die letzten vier Stellen in [KEY2] füllen und zugreifen.

ACHTUNG: mit der Transaktion [SE16] geht das nicht, weil es zu einer Konvertierung in Großbuchstaben kommt und der Zugriff fehlschlägt.