===== Protokollierung in einer Datenbank =====
==== Anforderung ====
(p2f) versteht sich als Middleware, die zwischen verschiedenen Anwendungen und Geräten innerhalb eines Unternehmens Daten vermittelt. Dabei stellt sich oft auch die Frage der Rückkopplung von Statusmeldungen: hat (p2f) dieses oder jenes Dokument schon bearbeitet?
Diese Frage trifft auch häufig beim Einsatz von Gateways auf, und erst recht, wenn der (p2f)-Router für eine räumliche und zeitliche Entkopplung von Druckaufträgen sorgt.
Per se weis (p2f) nichts über die anderen Anwendungen beim Kunden, und kann deshalb diese auch nicht über Statusänderungen oder Fehlerereignisse informieren.
\\
\\
==== Realisierung ====
Eine Möglichkeit, Rückmeldungen zur Verfügung zu stellen, stellt der Einsatz einer Datenbank dar. (p2f) bietet im Rahmen von Feldern innerhalb von Formularen ein sogenanntes ODBC-Feld an. ODBC steht für 'Open Database Connectivity' und beschreibt eine normierte Datenbankschnittstelle (siehe [[wpde>ODBC]]). Im Windows-System können solche ODBC-Schnittstellen angelegt werden. Wie dies geht, ist in vielen Quellen beschrieben und soll deshalb hier nicht wiederholt werden.
Für (p2f) ist lediglich wichtig, dass die Schnittstelle als 'System-DSN' eingetragen werden muss, weil die (p2f)-Komponenten als Dienste laufen und sonst nicht auf die Schnittstelle zugreifen könnten.
Hier soll angenommen werden, dass in der Datenbank eine Tabelle mit dem Namen 'Status' existiert, deren Datensätze ein Feld 'Zeit' für den Zeitpunkt der Statusmeldung, ein Feld 'Nummer' mit der Belegnummer des Dokuments und ein Feld 'Drucker' für den Namen des Druckers, der die Meldung abgesetzt hat, enthalten sollen. In etwa so: \\
\\
CREATE TABLE IF NOT EXISTS `Status` (
`Zeit` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`Nummer` int(11) NOT NULL DEFAULT '0',
`Drucker` varchar(80) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
\\
Die Grundidee für die Statusmeldung ist nun die, in der Tabelle einen Eintrag zu erzeugen, sobald (p2f) ein bestimmtes Dokument bearbeitet. Dazu muss in einem Druckprozess eine Anweisung eingebaut werden, die nur ein einziges Mal ausgeführt wird, und dann ein Formular aufruft, in dem das ODBC-Feld enthalten ist.
Am einfachsten kann man das mit der ersten Seite des Dokuments verbinden, weil man dann nur eine Anweisung vorneweg einfügen muss.
{{print2forms:tips:0020-1.png|Prozess mit Formularaufruf}}
Im dort aufgerufenen Formular muss zum einen die Belegnummer des Dokuments ermittelt, und dann diese Belegnummer und der Druckername in die Datenbank eingetragen werden.
{{print2forms:tips:0020-2.png|Formularfelder}}
Wichtig ist hier das SQL-Kommando im ODBC-Feld. Die Angabe '\Beleg:1' in der Schablone ist der Platzhalter für die mit dem Suchfeld 'Beleg' gefundene Belegnummer. Die Angabe '\m' ist der Platzhalter für den Namen des Druckers, der gerade dieses Formular druckt.
INSERT INTO Status (Nummer, Drucker) VALUES (\Beleg:1, '\m')
Beim Blick in die Ablaufverfolgung des Druckers kann man dann das tatsächlich abgesetzte SQL-Kommando erkennen:
{{print2forms:tips:0020-3.png|Formularfelder}}
Auf die Tabelle 'Status' können nun andere Programme von beliebigen Rechnern aus zugreifen, und ihrerseits Aktionen oder Meldungen auslösen, womit eine sehr viel weitergehende Einbindung von (p2f) in die Geschäftsabläufe möglich wird.
\\
\\
==== Bemerkungen ====
* Die Zeitmarke muss nicht mit in das SQL-Kommando aufgenommen werden, weil beim Erzeugen der Tabelle für das Feld 'Zeit' festgelegt wurde, dass es automatisch mit der aktuellen Uhrzeit initialisiert werden soll.
* Natürlich garantiert diese Art der Rückkopplung nicht, dass das Dokument auch tatsächlich richtig auf dem Papier ausgegben wurde. Zum einen, weil die Meldung nicht am Ende des Druckauftrags abgesetzt wird, und weil der Drucker den Auftrag erst zwischenspeichert und meist zeitversetzt druckt. Daran ändert sich auch nichts, wenn erst mit der letzten Seite des Druckauftrags das ODBC-Feld abgearbeitet wird. Ebenfalls ohne wirklichen Einfluss ist auch die Überwachung des Drucks via PJL-Sequenzen oder SNMP. Bei beiden Überwachungsmethoden sind Fälle denkbar, in denen die Meldung abgesetzt wird, obwohl das letzte Blatt noch nicht wirklich physisch auf dem Papier ist.
* Wenn es wirklich um eine Quittung für den korrekten Ausdruck der letzten Seite des Druckauftrags auf Papier und die erfolgreiche Ablage dieses Blattes im Ausgabeschacht geht, sind sehr viel aufwändigere Mechanismen notwendig, die zudem noch extrem abhängig vom Druckermodell sind. Sprechen Sie uns in solchen Fällen bitte an.
* Eine weitere Möglichkeit der Rückkopplung besteht via SNMP. Die Clients und Gateways können SNMP-Traps für gewisse Ereignisse absetzen. Diese Traps können mit einem speziellen Monitor empfangen und ausgewertet werden. Dabei lassen sich dann auch Dinge realisieren, wie abhängig von einem Ereignis eine EMail oder SMS absetzen. Falls Sie an so einer Lösung interessiert sind, sprechen Sie uns an.