Formularsteuerung mit Datenbank

Anforderung

Für manche Anwendungen wäre es wünschenswert, wenn das Verhalten von print2forms mittels einer meist bereits vorhandenen Datenbank beeinflusst werden könnte. Typisches Beispiel sind etwa kundenspezifische Formulare, die irgendwelche Besonderheiten des Kunden reflektieren und damit auch mehr Kundennähe signalisieren.

Zum einen ist es natürlich möglich, die Zuordnung bestimmter Formulare zu bestimmten Kunden im print2forms-System durch Formulierung entsprechender Bedingungen für das Einbinden von Formularen zu lösen. Diese Vorgehensweise gerät aber schnell an ihre Grenzen, wenn die Zahl der unterschiedlichen Formulare und/oder Kunden grösser wird.

Hier wäre ein alternativer Lösungsansatz der, die Zuordnung von Kunden zu Formularen in einer Datenbank ausserhalb von print2forms unterzubringen.

Realisierung

Der Zugriff auf externe Datenbanken ist in print2forms innerhalb eines Formulares mittels sogenannter ODBC-Anfragefelder möglich. ODBC steht für 'Open Database Connectivity' und beschreibt eine normierte Datenbankschnittstelle. 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 print2forms ist lediglich wichtig, dass die Schnittstelle als System-DSN eingetragen werden muss, weil die print2forms-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 'Adressen' existiert, deren Datensätze ein Feld 'Debitor' für die Kundennummer und ein Feld 'Formular' mit dem Namen des zu verwendenden Formulars enthalten.

Für die Realisation der Anforderung werden im print2forms-Formular nur zwei Felder benötigt:

Das Entscheidende ist die SQL-Anweisung im ODBC-Anfragefeld. Die Referenz auf das Ergebnis der Feldauswahl wird durch \Formularauswahl:1 erreicht. Statt dieser Referenz wird die jeweils gefundene Kundenummer in die Schablone eingesetzt und es ergibt sich eine vollständige, jetzt syntaktisch richtige SQL-Anweisung.

SELECT Formular
  FROM Adressen 
 WHERE Debitor = \Formularanfrage:1

Das Ergebnis dieser SQL-Anweisung steht jetzt unter dem Namen des ODBC-Anfragefeldes zur Verfügung. Im Ressourcefeld Formular wird das Ergebnis der SQL-Anweisung als Name einer Ressource verwendet.

Nur ein wenig komplizierter wird es, wenn in der Datenbank nur bei den Kunden ein Formularname hinterlegt ist, die eine Sonderbehandlung verlangen. Dann muss ein quasi Standardformular für alle die Kunden verwendet werden, bei denen das Datenbankfeld leer ist. Dies lässt sich mit folgender Variante der SQL-Anweisung erreichen, bei der unterstellt wird, dass 'Standard' der Name des Standardformulars ist.

SELECT IFNULL(
   (SELECT Formular
    FROM Adressen 
    WHERE Debitor = \Formularanfrage:1), "Standard")
FROM Adressen
LIMIT 1


Bemerkungen