Webseiten-Werkzeuge

Benutzer-Werkzeuge


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:

  • Ein ODBC-Anfragefeld, das die Kundennummer aus den Nutzdaten heraussucht und mittels einer SQL-Anweisung in der Datenbank den Namen des zu verwendenden Formulars ermittelt. Dieses ODBC-Anfragefeld soll den Namen Formularanfrage haben'.
  • Ein Ressourcefeld, was mit dem Formularnamen aus dem Ressourcen-Container die Druckdaten für das gewünschte Formular ausliest und druckt. Dieses Feld soll den Namen Formular haben.

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

  • Eine Besonderheit bei der Referenzierung der Ergebnisse von HTTP- und ODBC-Anfragefeldern innerhalb von Schablonen ist die Verwendung des Zeichens ~ statt \. Diese Unterscheidung ist wichtig, weil ja eine Referenz mit \ das Ergebnis der (gleichnamigen) Feldauswahl liefert. Deshalb wird hier einmal \Formularanfrage:1 und einmal ~Formularanfrage:1 verwendet.
print2forms/tips/tip15.txt · Zuletzt geändert: 2018-08-31 10:07 (Externe Bearbeitung)