Diplomarbeit

von Stefan Ries

 

SAP-Bestellabwicklung für

IT-Komponenten unter Verwendung

von Lotus Domino und Internet

Technologie

 

Adresse: Zum Dornbachtal 11 / 65321 Heidenrod-Springen / Tel.: 06124/77412

 

 

 

 

Inhaltsverzeichnis

1 Vorwort

2 Der Beschaffungsprozeß

3 Dokumentation des Prototyps

3.1 Prozeßdiagramm des gesamten Prozesses

3.2 Beschreibung der Ereignisse aus dem Prozeßdiagramm

3.3 Beschreibung der Prozesse aus dem Prozeßdiagramm

3.4 Beschreibung der Sichten (Rollen) aus dem Prozeßdiagramm

3.5 Aufbau der Notes-Datenbank

3.6 Die Schnittstelle von Lotus Notes zu SAP R/3

3.7 Die Benutzerschnittstelle

3.8 Der Warenkorb

3.9 Zugriffskonzept und Workflow

3.10 Das automatische Generieren von Mails

4 Demoversion des Bestellsystems (Benutzerschnittstelle)

 

 

1 Vorwort

Der Prozeß der Bestellabwicklung von IT-Komponenten für die Mitarbeiter in mittleren bis großen Firmen läuft

teilweise immer noch etwas unstrukturiert ab. So werden verschiedene Schritte im Ablauf noch über

handgeschriebene Formulare oder gar auf Zuruf erledigt und sind später nur schwer nachzuvollziehen. Das

SAP R/3-System, das heute weit verbreitet eingesetzt wird, bietet zwar Unterstützung für den Beschaffungsprozeß

mit seinen Applikationsbausteinen "Material Management" (MM) und Finanz Buchhaltung (FI), doch die Schnittstelle

zum Anforderer mit einem Prüf- und Genehmigungsprozeß läßt sich mit anderen Applikationen wesentlich besser

und effizienter lösen.

 

In dieser Diplomarbeit ist ein Bestellsystem entwickelt worden, das eine benutzerfreundliche Schnittstelle zum

Anforderer, einen effizienten Prüf- und Genehmigungsprozeß und eine Schnittstelle zum SAP R/3-System enthält.

 

Durch den Aufbau eines Katalogsystems mit Warenkorb ist der Anforderer selbständig in der Lage eine

Bestellanforderung zu erstellen, in der schon alle Informationen für das SAP R/3-System enthalten sind. Das

Erstellen von Angeboten für einzelne Mitarbeiter wird somit überflüssig und die Bestellanforderung muß nicht

manuell in das SAP R/3-System eingegeben werden.

 

Das System, das hier entwickelt worden ist, umfaßt also nicht den kompletten Bestellprozeß bis hin zur

Auslieferung der Komponenten, es ist vielmehr ein ergänzendes System zum Beschaffungsprozeß im SAP R/3.

 

2 Der Beschaffungsprozeß

Der Anforderer soll sich über Browser aus einem Katalogsystem die Komponenten zusammenstellen,

die er bestellen möchte. Aus diesen Informationen und zusätzlichen Angaben, die für eine Bestellung

benötigt werden, soll er dann eine BANF erstellen.

Die BANF soll dann einen Prüf- und Genehmigungsprozeß durchlaufen und anschließend in das SAP

R/3-System transferiert werden.

Beschaffungsprozess.gif (71208 Byte)

 

3 Dokumentation des Prototyps

3.1 Prozeßdiagramm des gesamten Prozesses

 

3.2 Beschreibung der Ereignisse aus dem Prozeßdiagramm

Ereignis Beschreibung
Anf. will ohne Beratung durch Einkauf BANF erstellen Der Anforderer hat die Möglichkeit ohne Beratung durch den Einkauf eine BANF zu erstellen.
Angebot ist in Katalog Das Angebot kann aus dem Katalog ausgewählt werden.
Angebot ist eine Position im Warenkorb Ein Angebot wurde in den Warenkorb geschrieben.
Angebot mit Optionen ist eine Position im Warenkorb Ein Angebot mit Optionen wurde in den

Warenkorb geschrieben.

Angebot ist nicht in Katalog Der Anf. möchte eine Komp., die sich nicht im Katalog befindet.
Kurzbeschreib von Komp. ist eine Position im Warenkorb Die Kurzbeschreibung einer Komp. wurde in den Warenkorb geschrieben.
Auftrag-Profil für den Anf.

wurde gespeichert

Die Auftrag-Daten (Anf., Tel., Fax., ...)

des Anforderers wurden gespeichert.

Anf. möchte BANF von Einkauf erstellen lassen Der Anforderer möchte Komponenten zu besonderen Konditionen bestellen und setzt sich dafür direkt mit dem Einkauf in Verbindung.
BANF ist erstellt Die Bestellanforderung wurde vom Anforderer über Browser oder direkt vom Einkauf erstellt.
Einkauf ist benachrichtigt Der Einkauf hat eine Benachrichtigung bekommen, daß er die BANF prüfen muß. (Preise einholen, ...)
BANF ist fertig für die Genehmigung Die Bestellanforderung ist fertig für die Zuordnung zu dem Verantwortl. für die Genehmigung und die Benachrichtigung des Verantwortl.
Genehmigungs-Mail ist gesendet Die Zuordnung zu dem Verantwortl. für die Genehmigung und das Senden der Mail zu dem Verantwortl. ist abgeschlossen.
Genehmigender ist benachrichtigt Der Genehmigende wurde durch eine erneute Mail benachrichtigt (erinnert).
BANF ist abgelehnt Die Genehmigung der BANF wurde abgelehnt.
Anforderer ist benachrichtigt Der Anforderer hat eine Benachrichtigung bekommen, daß die BANF abgelehnt wurde.
Rückfrage zu BANF Der Genehmigende hat noch Fragen zu der BANF und möchte diese vom Einkauf geklärt haben.
Einkauf ist benachrichtigt Der Einkauf ist benachrichtigt, daß er Rücksprache mit dem Genehmigenden halten muß.
BANF ist genehmigt Die Bestellanforderung wurde von einem Kostenstellenverantw. / Projektleiter genehmigt.
Buchhaltung ist benachrichtigt Die Buchhaltung hat eine Benachrichtigung bekommen, daß sie die Kontierung in der BANF prüfen muß. (Kontierungstyp, KontoNr, Anlagen-Nr,...)
Fertig für die Bestellung Die Kontierung in der Bestellanforderung wurde von der Buchhaltung geprüft.
Einkauf ist benachrichtigt Der Einkauf ist benachrichtigt, daß die BANF fertig für die Bestellung ist.
Bestellung ist plaziert Aus der BANF wurden Bestellungen im SAP R/3 angelegt. (für jeweilige Lief.-Nr.)
BANF ist plaziert Aus der BANF wurde eine BANF im SAP R/3 angelegt.

 

3.3 Beschreibung der Prozesse aus dem Prozeßdiagramm

Prozeß Beschreibung
Warenkorb zusammenstellen

(Browser)

In einem Warenkorb werden Angebote für eine BANF gesammelt.
Anzahl Angebote in Warenkorb

schreiben

Mit der zusätzlichen Eingabe von Menge und Wunschtermin wird ein Angebot in den Warenkorb geschrieben.
Anzahl Angebote mit Optionen in Warenkorb schreiben Mit der zusätzlichen Eingabe von Menge, Wunschtermin und der Auswahl von optionalen Komponenten, wird ein Angebot in den Warenkorb geschrieben.
Kurzbeschreib. von Komp. in Warenkorb schreiben Wenn sich ein Angebot nicht im Katalog befindet, kann eine Position mit einer Kurzbeschreibung direkt in den Warenkorb eingefügt werden.
Warenkorb bestellen (BANF erstellen) Aus den Positionen aus dem Warenkorb wird mit zusätzlichen Auftrags-Informationen (Name, Tel., ...) eine BANF erstellt.

Die Auftrags-Informationen werden als Profil für den jeweiligen Anf. gespeichert.

Einkauf erstellt BANF

(Notes Client)

Der Einkauf hat die Möglichkeit eine BANF direkt im Notes-Client anzulegen, wenn der Anf. ein spezielles Angebot erstellt haben möchte.
Mail an Einkauf Der Einkauf wird benachrichtigt, die BANF zu prüfen. Wenn die BANF nach x Tagen nicht verändert wurde, wird erneut eine Mail gesendet. Nach y Versuchen wird keine Mail mehr gesendet.

(Einkauf = Mail-Gruppe; x u. y können in einem Dokument voreingestellt werden)

Preis für BANF einholen Wenn der Einkauf die BANF überprüft hat, (Preise einholen, Positionen mit fehlenden Informationen vervollständigen,....) kann er die BANF per Knopfdruck in den nächsten Status versetzen.
Zuordnung von BANF zu Verantwortl. /

Mail an Verantw.

Ein "Agent" macht eine Zuordnung von Kostenstelle zu Kostenstellenverantw. oder Projekt-Nr. zu Projektleiter.

Die Adresse aus dieser Zuordnung wird zum Senden für die Benachrichtigung des Verantwortlichen genutzt und für den Zugriff des Verantwortl. auf die BANF.

(Zuordnung wird über das R/3-System gemacht)

erneute Mail an Genehmigenden Wenn nach x Tagen die BANF nicht verändert wurde, wird erneut eine Mail an den Genehmigenden gesendet. Nach y Versuchen wird keine Mail mehr gesendet.
BANF genehmigen, ablehnen oder Rückfrage Der Genehmigende kann per Knopfdruck die BANF in den nächsten Status versetzen (genehmigt, abgelehnt oder Rückfrage).
Mail an Einkauf Der Einkauf wird benachrichtigt Rücksprache mit dem Genehmigenden zu halten. Wenn die BANF nach x Tagen nicht verändert wurde, wird erneut eine Mail gesendet. Nach y Versuchen wird keine Mail mehr gesendet.
Mail an Anforderer erstellen Eine Benachrichtigung wird per Mail an den Anforderer geschickt.
Mail an die Buchhaltung Die Buchhaltung wird benachrichtigt die BANF zu prüfen.

Wenn die BANF nach x Tagen nicht verändert wurde, wird erneut eine Mail gesendet. Nach y Versuchen wird keine Mail mehr gesendet.

Prüfen der Kontierung Wenn die Buchhaltung die Kontierung in der BANF überprüft hat,

(Anlagen-Nr., Konto, ....) kann sie die BANF per Knopfdruck in den nächsten Status versetzen.

Mail an Einkauf Der Einkauf wird benachrichtigt, daß die BANF fertig für die Bestellung ist.

Wenn die BANF nach x Tagen nicht verändert wurde, wird erneut eine Mail gesendet. Nach y Versuchen wird keine Mail mehr gesendet.

Bestellung in R/3 plazieren (ME21) Der Einkauf plaziert per Knopfdruck Bestellungen im SAP R/3.

(eine Bestellung für jeweilige Lief.-Nr.)

BANF in R/3 plazieren (ME51) Der Einkauf plaziert per Knopfdruck

eine Bestellanforderung im SAP R/3.

 

3.4 Beschreibung der Sichten (Rollen) aus dem Prozeßdiagramm

Sichten Beschreibung
Sicht des Anforderers Der Anforderer kann selbständig über einen Browser Standard-Komponenten aus einem Katalog in einem Warenkorb zusammenstellen oder mit einer Kurzbeschreibung eine Position in den Warenkorb schreiben, die sich nicht im Katalog befindet. Aus dem Warenkorb und zusätzlichen Auftrags-Informationen kann er eine BANF erstellen lassen.

Er kann sich aber auch direkt mit dem Einkauf in Verbindung setzen, wenn er eine Bestellung zu ganz bestimmten Konditionen erstellt haben möchte.

Den Status der BANF kann er jederzeit einsehen.

Wenn die BANF abgelehnt wurde, wird er über Mail benachrichtigt.

Sicht des Einkaufs Der Einkauf kann direkt im Notes Client eine BANF erstellen. Im ersten Status überprüft er die BANF (Preise einholen,...)

Wenn die BANF auf Rückfrage gesetzt wurde, muß er erneut die BANF prüfen und sein OK geben.

Wenn die BANF von der Buchhaltung geprüft wurde, muß er eine Bestellung oder BANF im R/3 plazieren.

Sicht des Genehmigenden Der Kostenstellenverantwortliche oder Projektleiter gibt sein OK, lehnt die BANF ab oder setzt den Status auf Rückfrage.
Sicht der Buchhaltung Die Buchhaltung überprüft die Kontierung (Anlagen-Nr.,Konto,...) und gibt ihr OK.

 

3.5 Aufbau der Notes-Datenbank

Das komplette System der Bestellabwicklung besteht aus einer Lotus Notes- Datenbank. 

Für den Einkauf und die Buchhaltung gibt es nach verschiedenen Kriterien sortierte Ansichten

unter denen die Bestellanforderungen gespeichert werden (Alle Bestellanforderungen,

BANF angelegt, ...).

Abbildung 1: Ansichten des Einkaufs für Bestellanforderungen

 

Die Ansicht "Angebote" ist für das Erstellen von Angeboten für den Katalog.

Von dieser Ansicht existiert eine angepaßte Kopie (HTML\Angebote) für den Zugriff über einen

Browser, die für das Auswählen von Angeboten in den Warenkorb vorgesehen ist.

Abbildung 2: Ansicht für das Erstellen von Angeboten

 

Unter der Ansicht "Auftrag-Profile" werden Stamm-Informationen der jeweiligen Benutzer gespeichert,

die benötigt werden um eine BANF zu erstellen.

Der Anforderer bekommt unter der Ansicht "Bestellanforderungen" seine Bestellanforderungen angezeigt,

bzw. die Bestellanforderungen für die er als weiterer Berechtigter eingetragen ist.

Die für die Schnittstelle zum SAP erforderlichen Tabellen (Dynpros) mit allen dafür existierenden Feldern

sind unter der Ansicht "Tabellen" gespeichert.

In den Ansichten "ME21" und "ME51" sind die genauen Ablaufstrukturen einer Batch-Input Tabelle für die

Transaktionen "Bestellung anlegen" und "BANF anlegen" abgelegt. Unter diesen Ansichten ist die genaue

Reihenfolge der Dynpros mit den verwendeten Feldern für das SAP R/3 und der Zuordnung der Felder zu

den zugehörigen Feldern im Notes-Formular gespeichert.

Für den Warenkorb gibt es die Ansicht "temp" unter der temporär die Angebots-Positionen gespeichert

werden.

Unter der Ansicht "Zugriff Konfiguration" können mehrere Verbindungs- dokumente gespeichert werden, die

sämtliche Verbindungsdaten für den SAP R/3-Zugang enthalten.

Abbildung 3: Ansicht für die Verbindungsdokumente zum R/3

 

Verschiedene Einstellungen wie z.B. die erste BANF-Nr. sind in einem Konfigurationsdokument unter

der Ansicht "Konfiguration" gespeichert.

 

Abbildung 4: Alle Ansichten der Datenbank "Bestellabwicklung"

 

3.6 Die Schnittstelle von Lotus Notes zu SAP R/3

Die Schnittstelle zu dem R/3-System ist komplett in LotusScript geschrieben. Alle Programme

und Unterprogramme zur Realisierung der Schnittstelle sind in der Bibliothek "LSX" zusammengestellt.

In diese Bibliothek ist die externe Bibliothek "LSX 2.0 für Windows 95/NT" eingebunden, die für die

Verbindung zum SAP R/3 benötigt wird.

Die beiden Hauptprogramme in der Bibliothek "LSX" sind einmal "SubmitOrder", um eine Bestellung

im SAP R/3 anzulegen und "SubmitBANF", um eine BANF im SAP R/3 anzulegen.

Beide Programme basieren auf dem Aufruf einer R/3 Transaktion durch das R/3 Funktionsmodul

"RFC_CALL_TRANSACTION".

Die ABAP-Schnittstelle in SAP R/3 von "RFC_CALL_TRANSACTION" benötigt 2 Import-Parameter,

liefert einen Export-Parameter und verarbeitet eine Batch-Input Tabelle, die in einer bestimmten Struktur

aufgebaut ist.

ABAP-Schnittstelle von RFC_CALL_TRANSACTION:

IMPORTING

    VALUE(TRANCODE) Code der Transaktion z.B. ME21 oder ME51

    VALUE(UPDMODE) Update mode: A= asynchron (default), S= synchron

EXPORTING

    VALUE(MESSG) Rückmeldung

TABLES

    BDCTABLE STRUCTURE BDCDATA (Batch-Input Tabelle)

 

Auf Notes-Seite steht durch die Einbindung der LSX-Bibliothek die Klasse "RfcFunction" zur Verfügung

durch die man mit dem Funktionsmodul "RFC_CALL_TRANSACTION" kommunizieren kann.

Wenn ein Objekt dieser Klasse erzeugt wird, werden auch alle Import/Export- Parameter sowie zugehörige

Objekte vom Typ "RfcTable" (Batch-Input Tabelle) automatisch erstellt.

...

Set RfcCallTransaction= New RfcFunction(objServer, RFC_CALL_TRANSACTION")

Listing 1: Erzeugen eines Objektes vom Typ "RfcFunction"

 

Zum Erstellen der Rfc-Funktion werden 2 Parameter benötigt. Der Erste ist ein Objekt vom Typ "RfcServer"

und der Zweite ist der Name des Funktions- bausteines im R/3 als String.

Das Objekt vom Typ "RfcServer" ist das Basis-Objekt, was für jeden Zugriff auf das R/3-System benötigt wird.

Dieses Objekt muß zuvor mit sämtlichen Informationen, die zum Zugriff benötigt werden, initialisiert werden

und mit der Logon-Methode die Verbindung zum R/3-System aufgebaut werden.

...

Set objServer = New RfcServer

objServer.Destination = strSAPSystem

objServer.HostName= strSAPServer

objServer.System = Val (strSAPSysno)

objServer.Client = strSAPClient

objServer.User = strSAPUser

objServer.Language = strSAPLanguage

objServer.Password = strSAPPassword

intRet = objServer.Logon()

If intRet <> True Then

   Print objServer.Message, 0, "Logon error"

End If

Listing 2: Erstellen des Server Objektes und Verbinden mit dem R/3

 

Für die Informationen die zum Zugriff benötigt werden können mehrere Verbindungsdokumente erstellt

werden.

Um ein Verbindungsdokument für den R/3-Zugriff zu aktivieren muß einfach die Taste "Choose Setup"

gedrückt werden. Durch diese Aktion werden von einem Script alle Felder für die Verbindung zum R/3-

System in ein Konfigurationsdokument kopiert.

Aus diesem Konfigurationsdokument werden dann von dem Script zum Verbindungsaufbau die aktuellen

Einstellungen geholt.

Abbildung 5: Verbindungsdokument für den R/3-Zugriff

 

Wenn das Objekt "RfcCallTransaction" richtig initialisiert wurde, können die Import-Parameter für das

Funktionsmodul zugewiesen werden.

Import-Parameter auf R/3-Seite sind Export-Parameter auf Notes-Seite !

...

RfcCallTransaction.Exports("TRANCODE").Value = "ME21"

RfcCallTransaction.Exports("UPDMODE").Value = "S"

Listing 3: Zuweisen der Import-Parameter für das Funktionsmodul

 

Bei dem Programm "SubmitOrder" sind die beiden Import-Parameter "ME21", für den Transaktionscode

und "S" für eine synchrone Datenübertragung.

Als letztes muß noch die Tabelle für den Batch-Input gefüllt werden.

Für die Tabelle, mit der das Objekt "RfcCallTransaction" gefüllt wird, sind eine Reihe von Informationen

notwendig um den Aufbau der Tabellenstruktur besser zu verstehen.

Transaktion Unter einer Transaktion sind eine bestimmte Reihenfolge von Dynpros mit Programmen zur Verarbeitung der Dynpros zusammengefaßt.
Dynpro Unter einem Dynpro ist eine bestimmte Zusammensetzung von Feldern zusammengefaßt. (Tabelle von Feldern für einen bestimmten Bereich)
Programm Ein Programm verarbeitet die Daten eines Dynpros
Anfang eines Dynpro Der Anfang eines Dynpro wird mit "X" gekennzeichnet
Ende eines Dynpro Am Ende eines Dynpro kommt ein abschließender Code. (BDC-OKCODE)

Abbildung 6: Erklärungen zur Tabellenstruktur

 

...

Set tblBatchInput = RfcCallTransaction.Tables("BDCTABLE")

'Erstellen eines Objektes vom Typ "RfcTable"

Set rowCurr = tblBatchInput.Rows.InsertRow

'Einfügen einer neuen Zeile

Call rowCurr.SetCell("PROGRAM", Programm)

'Programm für die Verarbeitung des Dynpro

Call rowCurr.SetCell("DYNBEGIN","X") 'Anfang eines Dynpro

Call rowCurr.SetCell("DYNPRO", Dynpro-Nr.)) 'Nr. des Dynpro

Set rowCurr = tblBatchInput.Rows.InsertRow

Call rowCurr.SetCell("FNAM", Feldname) 'Feldname im R/3

Call rowCurr.SetCell("FVAL", Feldinhalt) 'Feldinhalt

...

Set rowCurr = tblBatchInput.Rows.InsertRow

Call rowCurr.SetCell("FNAM", "BDC_OKCODE") 'Ende eines Dynpro

Call rowCurr.SetCell("FVAL", BDC-OKCODE)

Listing 4: Der Aufbau der Tabellenstruktur für den Batch-Input

 

Abbildung 7: Der Aufbau der Transaktion "Bestellung anlegen" (ME21)

 

Damit Änderungen im Aufbau der Transaktionen oder eines Dynpro in Lotus Notes leichter anzupassen sind,

ist der Aufbau der Batch-Input Tabelle nicht fest in LotusScript verankert, sondern so dynamisch wie möglich

gehalten.

Der erste Schritt zum dynamischen Aufbau ist hier die Möglichkeit alle Felder zu einem bestimmten Dynpro

direkt aus dem SAP R/3 zu holen.

Dazu wird hier die Klasse "RfcTransaction" verwendet, mit der man ein Objekt erstellen kann, das dann alle

zugehörigen Dynpros mit zugehörigen Feldern enthält.

...

Set trans = New RfcTransaction(objServer, Transaktion-Code)

'enthält alle Dynpros

Set screen = trans.Screens(Dynpro-Nr.)

'jeweiliger Dynpro

Set item = doc.ReplaceItemValue(ProgrammFeld,screen.Program)

'schreibt Program des Dynpro in Feld

Forall Field In screen.Fields

  Redim Preserve v(i)

  v(i) = Field.Name

  i=i+1

End Forall

'schreibt alle Feldnamen eines Dynpro in mehrzeiliges Feld

Listing 5: Feldnamen von Dynpros aus dem R/3 holen

 

Mit der Angabe des Transaktion-Code und der Dynpro-Nr. werden so per Knopfdruck alle Felder zu einem

Dynpro in ein mehrzeiliges Feld und das zugehörige Programm in ein einzeiliges Feld eines Dokumentes

geschrieben.

Abbildung 8: Dokument mit allen Feldern zu einem Dynpro

 

Mit der Information, welche Dynpros für die Transaktion "ME21" benötigt werden, konnte dann ein Repository

mit den Dynpros und allen zugehörigen Feldern pro Dynpro erstellt werden.

Abbildung 9: Repository mit den Dynpros für "ME21" & "ME51"

 

Da für das Anlegen einer Bestellung in dem hier ausgearbeiteten Prozeß nicht alle Felder der jeweiligen

Dynpros auch verwendet werden, wurde hierfür eine neue Ansicht erstellt.

Abbildung 10: Dynpros für die Transaktion ME21

 

Unter dieser Ansicht werden jetzt genau die Dokumente für die Transaktion, in der richtigen Reihenfolge,

gespeichert und es können im Dokument selbst genau die Felder ausgewählt werden, die auch verwendet

werden.

Außerdem werden hier die zugehörigen Felder der BANF in Notes zugeordnet.

Abbildung 11: Dokument mit den verwendeten Feldern für einen Dynpro

 

Für die Auswahl der Dynpros im jeweiligen Dokument werden die Einträge aus der ersten Spalte der

Ansicht "($TabME21)" selektiert. Unter der Ansicht "($TabME21)" sind alle Dokumente für die Transaktion

ME21 aus dem Repository aufgelistet. Die Einträge in der ersten Spalte sind genau die Dynpros für die

Transaktion "ME21".

Das Feld in dem die Auswahl definiert ist muß ein Feld vom Typ "Schlüsselwörter" sein.

Abbildung 12: Eigenschaften des Feldes "Dynpro"

 

Die Auswahl für das Feld "SAPFeldname" wird über eine Lotus Notes Formel realisiert.

@DbLookup("" : "NoCache"; ""; "($TabME21)"; Dynpro; "SAPFeldname")

    ($TabME21) = Ansicht unter der alle Dynpros für die Transaktion ME21 stehen

    Dynpro = bestimmt welches Dokument für die Rückgabe ausgewählt wird

    SAPFeldname = Feld von dem der Inhalt für die Rückgabe genommen wird

 

Das Feld in dem die Formel steht muß ein mehrzeiliges Feld vom Typ "Schlüsselwörter" sein, bei

dem die Positionen im Auswahl-Fenster über eine Formel selektiert werden.

Abbildung 13: Eigenschaften des Feldes "SAPFeldname"

 

Im Feld "BDCOKCODE" wird der Code eingetragen, der am Ende eines jeden Dynpro steht und

im Feld "Routine" steht die Nummer der LotusScript- Routine, die für die Verarbeitung des jeweiligen

Dokumentes (Dynpros) zuständig ist. Doch hierzu und zu dem Feld "Ref" später mehr.

Eine weiteres Problem war der Umstand, daß die BANF in Notes nicht 1 zu 1 als Bestellung im R/3

angelegt werden konnte. Hierfür mußte ein Algorithmus entwickelt werden, der aus einer BANF auch

mehrere Bestellungen anlegen kann, da eine BANF mehrere verschiedene Lieferanten enthalten kann,

eine Bestellung aber genau an einen Lieferanten geht.

 

'Anzahl benutzter Zeilen in BANF
benutzte_Zeilen = 0
Solange benutzte_Zeilen < Max_Zeilen {
  Wenn Lieferant(benutzte_Zeilen) = "" dann Exit
  benutzte_Zeilen = benutzte_Zeilen + 1 
} 
checked=0
x=0 'Nr. für die erste Position im jew. Durchlauf
'Positionen die schon abgehakt sind ! 
Von k=0 bis benutzte_Zeilen {
  Wenn Position(k) = abgehakt {
    check(k) = ABGEHAKT
    checked=checked+1
  }
}
Wenn checked = benutzte_Zeilen {
  Es sind keine Positionen vorhanden oder die Pos. sind schon abgehakt 
  Exit
} 
Solange checked <> benutzte_Zeilen { 'Solange nicht alle abgehakt sind
  Solange check(x) = ABGEHAKT 'gehe zu Lief. der noch nicht abgehakt
    x=x+1 
  } 
  Von k=0 bis benutzte_Zeilen {
    check_current(k) = nicht ABGEHAKT 'Init Array mit dem die 
    Positionen des jew. Lief. abgehakt werden 
  } 
  Lieferant1 = Lieferant(x) ' nimm Lieferant für jeweiligen Durchlauf
  Von k=x bis benutzte_Zeilen 
    Wenn check(k) = nicht ABGEHAKT
      Lieferant2 = Lieferant(k)
      Wenn Lieferant1 = Lieferant2 {
        check(k) = ABGEHAKT
        check_current(k) = ABGEHAKT
        checked=checked+1
      }
    } 
  } 'Für alle benutzten Positionen
  Fülle Batch-Input Tabelle mit den Daten für eine Bestellung
  ...
  Wenn Fehler beim Aufruf von Transaktion {
    Fehlermeldung
   Sonst
    Schreibe Rückmeldung
    Wenn Bestellung angelegt {
      Von k=0 bis benutzte_Zeilen {
        Wenn check_current(k) = abgehakt 
          Position(k)= abgehakt
        }
      }
    }
  } 
} 'Solange nicht alle abgehakt 

Listing 6: Algorithmus zum Anlegen von Bestellungen aus einer BANF

 

Durch den speziellen Aufbau der BANF in Notes und den dynamischen Aufbau der Batch-Input Tabelle

mußte hier doch einiges darin investiert werden, die Beiden zusammen zu bringen.

Grundsätzlich gibt es hierzu folgende Fälle zu unterscheiden:

Für die hier aufgeführten Fälle mußten verschiedene Routinen geschrieben werden, um die Daten

entsprechend verarbeiten zu können. Die Zuordnung der Routinen zu den zu verarbeitenden Dokumenten

wird über das Feld "Routine" in den Dokumenten mit dem Aufbau der Dynpros gespeichert.

Für Felder die referenziert werden, ist eine Spalte vorgesehen in der man diese mit einem "X" kennzeichnen

kann (siehe Abbildung 11).

Außerdem mußten verschiedene Informationen aus dem Algorithmus zum Erzeugen von mehreren Bestellungen

als Parameter an die Routinen übergeben werden.

Um eine genauere Vorstellung von der Zuordnung der BANF zu der Batch- Input Tabelle und den daran

beteiligten Routinen zu bekommen, soll die Zeichnung helfen, die ein Beispiel mit 2 Positionen in der BANF zeigt.

 

Abbildung 14: Zuordnung der BANF zu der Batch-Input Tabelle

 

Das Programm "SubmitBANF" ist vom Aufbau sehr ähnlich. Die beiden Import-Parameter für das Objekt

"RfcCallTransaction" sind hier "ME51", für den Transaktionscode, und "S" für eine synchrone Datenübertragung.

Da bei dieser Transaktion andere Dynpros beteiligt sind, mußte hierfür natürlich eine eigene Ansicht mit allen

Dokumenten (Dynpros) für die Transaktion "ME51" erstellt werden.

Abbildung 15: Dynpros für die Transaktion ME51

 

Da die BANF in Notes 1 zu 1 als eine BANF im SAP R/3 angelegt wird, mußte der Algorithmus für die Transaktion

"ME21" hier nicht eingesetzt werden.

Die Logik der Routinen für die Verarbeitung der Daten von BANF zu Batch- Input Tabelle sind den Routinen der

Transaktion "ME21" sehr ähnlich, mit dem Unterschied, daß hier keine Parameter von dem Algorithmus übergeben

werden müssen.

 

Abbildung 16: Der Aufbau der Transaktion "BANF anlegen" (ME51)

 

3.7 Die Benutzerschnittstelle

Als Benutzerschnittstelle stehen dem Anforderer über Browser zu bedienende HTML-Seiten zur Verfügung,

die in Frame-Technologie aufgebaut sind.

Die Datei "logo.htm", die im oberen linken Frame angezeigt wird, enthält nur ein HTML-Tag für die

Hintergrundgrafik "logo.gif" und in der Datei "banner.htm", die im oberen rechten Frame angezeigt wird,

ist nur die Hintergrundfarbe festgelegt.

In der Datei "main.htm", die in Frame "c" angezeigt wird, ist die Startgrafik eingebunden. Alle Aufrufe

aus dem Menü im linken Frame werden in Frame "c" angezeigt.

Im linken Frame steht dem Anforderer ein Menü mit den Links "Katalog", "Neue Position", "Warenkorb"

und "BANF anzeigen" ständig zur Verfügung.

In diesem Frame wird ein Notes-Navigator aufgerufen, der im Frame-Set mit der erweiterten URL-

Referenzierung referenziert wird.

Die Links sind "GraphicButtons" die im Define-Abschnitt mit einer einfachen Aktion oder einer Formel

hinterlegt worden sind.

Aus den hier definierten Verknüpfungen werden vom Domino Server automatisch HTML-Referenzierungen

generiert.

Abbildung 17: Ein Notes-Navigator für die Anzeige in einem Frame

 

Der erste Link öffnet die Ansicht "HTML\Angebote" (Katalog). Der Katalog ist eine Ansicht in der Notes

Datenbank, die mit verschiedenen Techniken für den Zugriff über einen Browser optimiert wurde.

Bei dieser Ansicht wurden wieder die Eigenschaften des Lotus Domino Servers ausgenutzt, durch den

bei dem Zugriff über Browser, eine Ansicht automatisch in HTML übersetzt wird.

Leider war diese Darstellung noch weit von einem optimalen Ergebnis entfernt.

Abbildung 18: Ansicht des Kataloges ohne entsprechende Aufbereitung

 

Zur Aufbereitung der Ansicht sollten zuerst einmal die Links am oberen und unteren Rand der Ansicht

verschwinden.

Um dies zu erreichen, kann in Notes ein Dokument erstellt werden, das als Vorlage für die Ansicht

gespeichert werden muß ($$ViewTemplate for Ansicht) und in dem ein Feld mit dem Namen "$$ViewBody"

erstellt werden muß. Durch die reservierten Bezeichnungen wird bei jedem Aufruf der Ansicht automatisch

die Ansicht ohne die Links an den Rändern in das Dokument eingefügt. Außerdem wird in dem Dokument

die Überschrift und der Hintergrund für die Ansicht festgelegt.

Abbildung 19: Vorlage für die Ansicht "HTMLAngebote"

 

Da eine Veränderung der Schriftgröße bei den Spaltenüberschriften für die Ansicht im Browser keine

Auswirkung hatte, mußte hier mit Durchgangs- HTML nachgeholfen werden.

[<font size=5>Inhalt</font>] 'Mit den rechteckigen Klammern wird der Anfang und das Ende von HTML signalisiert

Listing 9: Durchgangs-HTML bei der Spaltenüberschrift

 

Durch einen Trick kann hier noch erreicht werden, daß die Einträge in einer Spalte auch genau untereinander stehen.

Dazu muß zwischen den Spalten in der Ansicht jeweils ein zusätzlicher Eintrag gemacht werden, durch den ein kleines

Bild (16x1 Pixels) als Platzhalter zwischen den Spalten eingefügt wird.

[<img src=/images/ecblank.gif>] 'ecblank.gif= Bild mit 16x1 Pixels

Listing 7: Platzhalter zwischen Spalten einfügen

 

Abbildung 20: Optimierte Ansicht des Kataloges für den Browser

 

Ähnlich wie bei den Ansichten war auch bei den Vorlagen für die Dokumente die Darstellung für den Browser

nicht optimal und ist deshalb mit Durchgangs-HTML aufgebessert.

So wird z. B. bei dem Link "IN KORB LEGEN" mit Hilfe eines "Hotspot" für die Darstellung im Browser ein

Bitmap eingesetzt.

Hotspot:

[<IMG BORDER=0 alt="IN KORB LEGEN" SRC="/images/in_korb.gif">]

Darstellung des Hotspot im Browser:

Abbildung 21: Formel für den Hotspot "IN KORB LEGEN"

 

Tabellen und die Schriftgröße aus den Vorlagen werden korrekt für die Darstellung im Browser übersetzt.

Nur beim Zeilenumbruch mußte an verschiedenen Stellen wieder mit HTML-Tags nachgeholfen werden (nach Tabellen).

Eine feine Sache ist auch der Einsatz eines "Rich-Text-Feldes" in den Angebots-Formularen, in das man

Bilder aus der Ablage einfügen kann, und das dann auch korrekt bei der Darstellung im Browser angezeigt wird.

 

Wenn der Benutzer etwas bestellen möchte, was sich nicht im Katalog befindet, kann er über den Link

"Neue Position" eine Kurzbeschreibung von der Komponente in den Warenkorb einfügen.

Abbildung 22: Einfügen einer Kurzbeschreibung

 

3.8 Der Warenkorb

Im Warenkorb können Komponenten aus dem Katalog oder über "Neue Position" gesammelt werden.

Um eine Position aus dem Katalog in den Warenkorb einzufügen, klickt man einfach auf den Link

"IN KORB LEGEN", dadurch wird ein Formular geöffnet, in das automatisch der Angebotstext und Preis

übernommen wird. Außerdem werden bei diesem Vorgang noch versteckte Informationen aus dem

Angebotsdokument in das Formular kopiert, die später für das R/3-System gebraucht werden. Das

automatische Kopieren der Felder in das Formular wird durch die Einstellung "Formular erbt Felder von

ausgewähltem Dokument" erreicht.

Abbildung 23: Eigenschaften von Formular "HTMLAuftragPos"

 

Die Positionen im Warenkorb, von allen Benutzern des Systems, werden in einer Ansicht temporär

gespeichert, und sind durch die IP-Adresse des PC eindeutig gekennzeichnet.

Wenn das Formular aufgerufen wird, werden über ein Script die Anzahl Positionen im Warenkorb für

den jeweiligen Benutzer über die IP-Adresse ermittelt und in ein verstecktes Feld im Formular geschrieben.

Diese Information wird zur Begrenzung der Positionen für die BANF genutzt.

Wenn die max. Anzahl Positionen erreicht ist, kommt eine Fehlermeldung.

Über das Script wird außerdem das Datum des Wunsch-Termins aus der letzten Position, falls

vorhanden, in das aktuelle Feld kopiert.

Der Benutzer braucht also nur die Menge und einen Wunschtermin bei der ersten Position einzugeben,

um eine Position in den Warenkorb einzufügen.

...

anz= 0

Do Until doc Is Nothing

  If webdoc.remote_addr(0) =doc.remote_addr(0) Then

    anz= anz + doc.BANF_PosAnz(0)

    strDate= Cstr(doc.BANF_PosWunschtermin(0))

  End If

  Set doc= view.GetNextDocument(doc)

Loop

Set item = webdoc.ReplaceItemValue("BANF_PosAnzahlPos", anz)

Set item = webdoc.ReplaceItemValue("BANF_PosWTermin", strDate)

Listing 8: Informationen zum Einfügen einer neuen Position

 

Bei den Angeboten und den damit verbundenen Formularen, um eine Position in den Warenkorb zu

schreiben, sind hier 2 unterschiedliche Vorlagen erstellt worden.

Die erste Vorlage enthält die Felder Anzahl, Artikelbezeichnung, Preis, Einheit und Wunschtermin,

sowie die versteckten Informationen Lieferanten-Nr., Warengruppe und Artikel-Nr. für das SAP R/3,

und die Anzahl der Positionen im Warenkorb (für die Begrenzung der Positonen).

Abbildung 24: Formular für eine normale Position

 

Die zweite Vorlage enthält die gleichen Informationen plus zusätzliche optionale Komponenten. Bei den optionalen

Komponenten gibt es die Felder Artikelbezeichnung, Einheit und Preis, sowie die versteckte Information Artikel-Nr.

pro Position der optionalen Komponente.

Abbildung 25: Formular für eine Position mit optionalen Komponenten

 

Wenn man auf den Link "WEITER" klickt wird über einen Agent ein Script ausgeführt, das die Eingabe überprüft und

die Felder in ein Dokument speichert wenn die Eingabe OK war.

Bei der Validierung der Felder wird auf eine Anzahl größer 0 geprüft und bei dem Wunschtermin, ob er mindestens x

Tage in der Zukunft liegt.

Durch die Definition des Feldes Wunschtermin als Zeitfeld mit bestimmter Datumsformatierung, wird außerdem das

Datumsformat (DD:MM:YY) geprüft.

...

Set weekDateTime = New NotesDateTime( "Today" )

Set modifiedDateTime = New NotesDateTime( "" )

Call weekDateTime.AdjustDay( + x Tage )

'Wunschtermin aus dem Formular für neue Position

modifiedDateTime.LSLocalTime = webdoc.BANF_PosWunschtermin(0)

If weekDateTime.TimeDifference( modifiedDateTime ) > 0 Then

  Call ErrorMsg("Der Wunschtermin muß min. x Tage in der

  Zukunft liegen !")

  Exit Sub

End If

Listing 9: Prüfen ob das Datum min. x Tage in der Zukunft liegt

 

Für eventuelle spätere Änderungen an dem Dokument wird von dem Script eine Formular-Maske zugewiesen,

mit der das Dokument zum Editieren geöffnet werden kann.

Nachdem die Position in den Warenkorb geschrieben wurde, werden alle Positionen im Warenkorb angezeigt.

Abbildung 26: Positionen im Warenkorb

 

Für die Anzeige des Warenkorbes wurde ein Formular erstellt, indem die Überschrift und der Hintergrund definiert ist.

Abbildung 27: Formular für die Anzeige des Warenkorbes

 

Die Anzeige der Tabelle mit den Positionen wurde über ein "Rich Text-Feld"

realisiert, in das die Positionen geschrieben werden. Das Script, das die Positionen in das Feld schreibt wird

von dem Masken-Ereignis "WebQueryOpen" ausgelöst.

Bei jedem Aufruf des Formulars durchsucht das Script die Ansicht mit den temporären Positionen und schreibt

alle Positionen mit der gleichen IP- Adresse wie der PC des Benutzers in eine Tabelle mit jeweils 2 Links darauf.

Die gesamte Ausgabe, die in dem "Rich Text-Feld" erscheint wird mit der "AppendText"-Methode aus der

"NotesRichTextItem"-Klasse in das Feld geschrieben. Die dynamische Tabelle sowie die 2 Links für "Ändern"

und "Entfernen" werden dabei wiederum durch den Einsatz von Durchgangs- HTML erzeugt.

Mit "EditDocument" wird das Dokument mit der vorher durch das Script zugewiesenen Formular-Maske

zum editieren geöffnet.

Abbildung 28: Formular für das Ändern von Positionen

 

Es können an dieser Stelle keine einzelnen optionalen Komponenten geändert werden. Dies wäre aber auch unnötiger

Aufwand, da man die gesamte Position entfernen kann und ohne großen Aufwand eine Neue mit den gewünschten

optionalen Komponenten erstellen kann.

Wenn man alle Komponenten im Warenkorb zusammengestellt hat, kann man durch den Link "BESTELLEN" eine BANF

in Lotus Notes anlegen.

Durch den Link wird ein Bestellformular aufgerufen, in dem man den Namen, Tel., Fax, Geschäftsstelle, Abteilung,

weitere Berechtigte, Kontierung (Kostenstelle oder Projekt-Nr.) und Werk eingeben kann.

Aus diesen Informationen, plus den Positionen aus dem Warenkorb, wird von einem Script eine BANF in Lotus Notes

angelegt.

Von den Feldern aus dem Bestellformular, wird mit dem Benutzer-Namen, durch ein Script ein Profil gespeichert, dessen

Felder bei der nächsten Bestellung automatisch in das Bestellformular kopiert werden, damit der Benutzer nicht jedesmal

aufs Neue bestimmte Stammdaten eingeben muß.

Abbildung 29: Ein Profil eines Benutzers

 

Abbildung 30: Das Bestellformular

 

Die Positionen aus dem Warenkorb werden bei dem Aufruf des Bestellformulars durch ein Script in ein

"Rich Text-Feld" geschrieben. Das Prinzip an dieser Stelle ist das gleiche wie schon bei der Ansicht des

Warenkorbes und dient hier auch nur zur Ansicht der Positionen aus dem Warenkorb.

In diesem Script wird auch eine Ansicht durchsucht unter der die Benutzer- Profile gespeichert sind. Wenn

bereits ein Benutzer-Profil existiert, dann werden die Felder aus dem Profil in das Bestellformular kopiert.

Wenn das Bestellformular abgeschickt wird, werden die Positionen aus der temporären Ansicht des

Warenkorbes über die IP-Adresse selektiert und mit den Informationen aus dem Bestellformular in die

Notes-BANF kopiert.

Dabei wird bei Positionen mit optionalen Komponenten jede optionale Komponente als eine Position in

die BANF kopiert und mit der Hauptkomponente als einen zusammengehörigen Block markiert.

Diese Information ist später wichtig für die Buchhaltung, um die Kontierung zu prüfen.

Außerdem erhalten Positionen die der Benutzer selbst über den Link "Neue Position" erstellt hat, eine

Markierung, damit der Einkauf unterscheiden kann, daß diese Information nicht aus dem Katalog stammt

und geprüft werden muß.

Die BANF wird zusätzlich durch den Benutzer-Namen im Abschnitt "Workflow", durch eine BANF-Nr und

durch das aktuelle Datum ergänzt.

Die Nr. der BANF wird dabei aus einem Dokument geholt, indem immer die aktuelle BANF-Nr. gespeichert

ist. Nachdem die Nr. um 1 erhöht wurde, wird sie in die BANF kopiert und zurück in das Dokument gespeichert.

Bevor aus dem Bestellformular eine BANF angelegt werden kann, werden natürlich auch noch verschiedene

Validierungs-Prüfungen durchgeführt (Länge des Namen, Kostenstelle oder Projekt-Nr. muß eingegeben werden,...).

Um weiteren Personen Zugriff auf die BANF zu geben, ist der Link "Adreßbuch" vorgesehen, mit dem man

aus dem Adreßbuch des Servers Personen auswählen kann.

Das Prinzip dieses Adreßbuches stammt aus dem Template "WebMail", das mit Lotus Notes 4.6 ausgeliefert wird.

Bei diesem Prinzip wurde LotusScript und vor allem auch die Formelsprache von Lotus eingesetzt.

In der Hilfe von Lotus gab es allerdings kaum Informationen, um die hier verwendeten Formeln genauer zu erklären.

Der Befehl der hier verwendet wird, um die Namen über den Browser aus dem Adreßbuch zu holen, ist hier nur soweit

erklärt, daß man mit ihm Zugriffe über "ODBC" machen kann, hier wird er jedoch ganz speziell im Zusammenhang

mit der (Web) Domino- Schnittstelle eingesetzt.

@DbCommand("Domino"; "LoadAddressListByIndex"; TargetNAB; "tmpAddressList"; tmpMaxListed; "1")

Abbildung 31: Adressen suchen über den Browser

 

Damit nach dem Aufruf des Adreßbuches die bereits ausgefüllten Felder im Bestellformular nicht verloren gehen,

werden die Felder in ein Benutzer- Profil kopiert. Beim Aufruf des Adreßbuches wird dann ein Script ausgeführt ,

das in der Ansicht unter der die Benutzer-Profile gespeichert sind, nach dem aktuellen Profil sucht und die UniqueID

(ID des Dokumentes) des Profils in ein verstecktes Feld schreibt.

Beim Verlassen des Adreßbuches wird diese Information von einem weiteren Script dazu verwendet, um die

ausgewählten Namen in das Benutzer-Profil zu speichern, bevor das Bestellformular wieder aufgerufen wird und

die Felder aus dem Profil in das Bestellformular kopiert werden.

Mit letzterem Script werden auch die vorher ausgewählten Namen aus dem Adreßbuch in das Feld für die weiteren

Berechtigten im Bestellformular kopiert und gespeichert.

Alle sonstigen Funktionen auf dem Formular "Adressen suchen" sind alleine mit der Lotus Formelsprache realisiert,

und funktionieren wie bei dem Template "WebMail" von Lotus.

 

3.9 Zugriffskonzept und Workflow

 

Abbildung 32: Zugriffsrechte im jeweiligen Status

 

Die Bezeichnungen des Status im Diagramm werden bei jeder Veränderung in einen anderen Status

im Abschnitt "Workflow" der BANF hinzugefügt.

Dabei werden über Script in 3 mehrzeilige Felder das Datum, Benutzer- Name und der Status hinzugefügt.

Abbildung 33: Der Abschnitt "Workflow"

 

Die beteiligten Gruppen "[Einkauf]", "[Genehmigung]" und "[Buchhaltung]" sind als "Roles" in der "Access Control List"

angelegt. Dort können die Gruppen auch den einzelnen Personen zugeordnet werden.

Wenn die BANF erstellt wird hat die BANF den Status Nr. 0 (Preis einholen).

Die BANF kann dabei direkt durch den Einkauf erstellt werden oder von dem Anforderer über Browser.

Da dies 2 ganz unterschiedliche Wege sind, wird auch der Status und die damit verbundenen Zugriffsrechte von verschiedenen

Scripten geregelt.

Für die Schreibberechtigung wurde ein verstecktes mehrzeiliges Feld vom Typ "Authors" erstellt. Der Benutzer-Name wird bei

der Erstellung in ein weiteres verstecktes Feld gespeichert und die weiteren Berechtigten in einem weiteren mehrzeiligen Feld

ausgewählt. Im ersten Status werden diese beiden Felder plus ein Eintrag für die Gruppe "[Einkauf]" einfach in das Feld für die Schreibberechtigung kopiert.

Um die BANF auf den nächsten Status zu setzen, muß der Einkauf nur einen Schalter in der BANF betätigen und anschließend

speichern.

Abbildung 34: Schalter für die Genehmigung in der BANF

 

Alle Schalter, mit denen die BANF in einen anderen Status versetzt wird, sind nur für Personen aus der jeweiligen Gruppe

und in dem jeweiligen Status sichtbar. Die Formel hierzu ist bei den Eigenschaften des Schalters im Abschnitt

"Hide action if formula is true" eingetragen.

@If((@UserRoles="[Einkauf]" & BANF_Status= 0); @False; @True)

 

Durch das Speichern der BANF nachdem der Schalter gedrückt wurde, wird die BANF erst über Script in den nächsten

Status versetzt. Dabei wird eine neue Zeile im Abschnitt "Workflow" mit dem neuen Status hinzugefügt und die Zugriffsrechte

neu eingestellt.

In Status Nr. 1 werden dafür einfach alle Einträge aus dem Feld für die Schreibberechtigung gelöscht und die bisher

beteiligten Personen haben nur noch Leseberechtigung.

Im jetzigen Status wird von einem "Agent" die Zuordnung zu der Person für die Genehmigung gemacht.

Die hier ermittelte Adresse wird einmal zum versenden der Mail an den Genehmigenden, sowie für das Zugriffsrecht

auf die BANF benutzt.

Dabei wird die Adresse in das Feld für die Schreibberechtigung kopiert.

Zuletzt setzt der "Agent" die BANF auf den nächsten Status, und fügt eine neue Zeile im Abschnitt "Workflow" hinzu.

In Status Nr. 2 kann der Genehmigende die BANF über einen Schalter genehmigen, ablehnen oder auf den Status

Rückfrage setzen.

Nachdem abschließenden Speichern wird dann wieder eine neue Zeile im Abschnitt "Workflow" hinzugefügt und die

Rechte werden neu vergeben.

Wenn die BANF genehmigt ist, wird die Gruppe "Buchhaltung" in das Feld für die Schreibberechtigung kopiert, und

die Buchhaltung kann die Kontierung überprüfen.

In Status Nr. 6 bekommt der Einkauf wieder Schreibberechtigung auf die BANF und kann eine Bestellung/BANF im

SAP R/3 anlegen.

Abbildung 35: Schalter für Bestellen und BANF anlegen im R/3

 

3.10 Das automatische Generieren von Mails

Das Generieren von Mails wird von einem Agent erledigt, der zu bestimmten Zeitpunkten ausgeführt werden kann.

Der Agent führt ein Script aus, das prüft in welchem Status sich die BANF befindet und bei bestimmtem Status eine

Mail erzeugt. Außerdem wird erneut eine Mail gesendet wenn die BANF nach einem bestimmten Zeitraum immer

noch nicht modifiziert wurde.

Für die Realisierung dieses Scriptes wurden verschiedene Einstellungen in einem Konfigurationsdokument gespeichert.

Abbildung 36: Das Konfigurationsdokument

 

In diesem Dokument sind für den jeweiligen Status, in dem eine Mail gesendet werden soll, die Einstellungen für die Tage

nach dem erneut eine Mail gesendet werden soll, die maximale Anzahl Versuche und ein Text für die Benachrichtigung

durch die Mail gespeichert.

Außerdem werden hier die Mail-Adressen für den Einkauf und die Buchhaltung gespeichert.

Damit über das Script in dem jeweiligen Status abgefragt werden kann ob schon eine Mail gesendet wurde oder wieviel

Mails bisher gesendet wurden ist in der BANF für jeden Status, indem automatisch eine Mail erzeugt werden soll, ein Feld

das mit null initialisiert wird.

Wenn die erste Mail gesendet wird, dann wird auch in dem jeweiligen Feld in der BANF der Wert um eins erhöht. Ist der

Wert in dem Feld größer als null, dann wird in dem Script geprüft, ob die BANF innerhalb der voreingestellten Tage nicht

modifiziert wurde. Wurde die BANF in dem Zeitraum nicht modifiziert, wird erneut eine Mail gesendet und der Wert in dem

zugehörigen Feld in der BANF wird wieder um eins erhöht.

Dieser Vorgang wird solange wiederholt, bis die maximale Anzahl Versuche erreicht ist.

If MailStatus < MaxAnzahlMails Then

  Set weekDateTime = New NotesDateTime( "Today" )

  Set modifiedDateTime = New NotesDateTime( "" )

  Call weekDateTime.AdjustDay( -x Tage )

  modifiedDateTime.LSLocalTime = docv.LastModified

  If weekDateTime.TimeDifference( modifiedDateTime ) >= 0 Then

    MailStatus= MailStatus+1

    Mail senden

  End If

End If

Listing 10: Erneutes senden einer Mail

 

In den automatisch generierten Mails steht der Text aus dem Konfigurationsdokument

plus die Nummer der BANF die bearbeitet werden soll.

Abbildung 37: Eine automatisch generierte Mail