35 In Datenbank speichern

Aufgabe: In Datenbank speichern

35.1 Beschreibung

Die Aufgabe In Datenbank speichern schreibt für jede verarbeitete PDF-Datei einen Datensatz in eine Datenbank - zum Beispiel die extrahierte Rechnungsnummer, das Rechnungsdatum, den Betrag und den Ablageort der Datei. Die Verbindung erfolgt über ODBC, sodass jede Datenbank mit einem ODBC-Treiber verwendet werden kann (Microsoft SQL Server, MySQL, PostgreSQL, Oracle, Microsoft Access und viele weitere).

Sie haben die Wahl zwischen zwei Arbeitsweisen:

Arbeitsweise Für wen Was Sie einstellen
Tabelle befüllen Alle, die “Wert X soll in Spalte Y” denken - ohne SQL-Kenntnisse Tabelle wählen, je Spalte einen Platzhalter zuordnen
Eigener SQL-Befehl Anwender mit SQL-Kenntnissen, die INSERT/UPDATE/MERGE oder gespeicherte Prozeduren nutzen möchten Den Befehl selbst schreiben, Platzhalter an den gewünschten Stellen

In beiden Fällen werden die Platzhalter nicht als Text in den Befehl eingesetzt, sondern bei der Ausführung als Parameter übergeben - typgerecht (Datum als Datum, Zahl als Zahl, sonst Text). Apostrophe oder Sonderzeichen in den Werten sind dadurch unproblematisch, und der Befehl bleibt gegen SQL-Injection geschützt.

Typische Anwendungsfälle

  • Rechnungseingangsbuch: Nummer, Datum, Lieferant und Betrag jeder eingehenden Rechnung landen automatisch in der Datenbank der Buchhaltung
  • Dokumentenregister: Ablageort und Metadaten jeder archivierten Datei werden in einer Tabelle nachgehalten, über die andere Programme zugreifen
  • Übergabe an Fachsysteme: Extrahierte Werte werden per gespeicherter Prozedur an ein ERP- oder DMS-System übergeben

35.2 Allgemeine Einstellungen

Aktiviert

Aktivieren Sie diese Option, damit die Aufgabe bei passenden PDF-Dateien ausgeführt wird. Deaktivierte Aufgaben werden übersprungen.


35.3 Datenbankverbindung

Datenbankverbindung

Verbindungsart

Verbindungsart Beschreibung
SQL Server Server und Datenbank werden als Felder eingegeben; die Verbindung wird mit dem besten auf dem Rechner installierten SQL-Server-ODBC-Treiber aufgebaut. Der in Windows enthaltene Treiber erreicht auch ältere Server (ab SQL Server 2008).
ODBC-Datenquelle (DSN) Eine in der Windows-ODBC-Verwaltung eingerichtete Datenquelle. Die Auswahlliste zeigt die vorhandenen System- und Benutzer-Datenquellen. Falls die Datenquelle keine Anmeldung speichert, geben Sie Benutzername und Passwort hier an.
Verbindungszeichenfolge (ODBC) Freie ODBC-Verbindungszeichenfolge für alle anderen Datenbanken, z. B. Driver={MySQL ODBC 8.0 Unicode Driver};Server=db01;Database=belege;UID=app;PWD=geheim;

Server und Datenbank (SQL Server)

Unter Server tragen Sie den Servernamen so ein, wie Sie ihn auch im SQL Server Management Studio verwenden:

Situation Eintrag
Standardinstanz auf diesem Rechner localhost (oder der Rechnername)
Benannte Instanz, z. B. SQL Server Express RECHNER\SQLEXPRESS
Server im Netzwerk SRV-SQL01 bzw. SRV-SQL01\INSTANZ
Fester Port statt Instanzname SRV-SQL01,1433
LocalDB (localdb)\MSSQLLocalDB

Bei einer benannten Instanz ohne festen Port muss auf dem Server der Dienst “SQL Server-Browser” laufen, damit der Instanzname aufgelöst werden kann. Unter Datenbank geben Sie die Zieldatenbank an (Pflichtfeld) - ohne Angabe würde die Verbindung in der Standarddatenbank des Kontos landen, meist der Systemdatenbank master.

Anmeldung

Bei SQL Server können Sie die Windows-Anmeldung verwenden oder Benutzername und Passwort angeben. Passwörter werden verschlüsselt in den Profileinstellungen abgelegt.

Wichtig bei Windows-Anmeldung: Die Verbindung wird mit dem Konto aufgebaut, unter dem die Verarbeitung läuft. Läuft die Hintergrundverarbeitung als Windows-Dienst, muss das Dienstkonto Zugriff auf die Datenbank haben - andernfalls schlägt die Verbindung fehl, obwohl der Test in der Oberfläche erfolgreich war.

ODBC-Treiber

Standardmäßig wird automatisch der neueste installierte SQL-Server-Treiber verwendet (ODBC Driver 18, 17, …). Für ältere Server, die neuere Treiber nicht mehr bedienen - etwa SQL Server 2008 -, wählen Sie hier gezielt einen älteren Treiber, im Zweifel den in Windows enthaltenen Treiber “SQL Server”.

Verbindung verschlüsseln

Neuere SQL-Server-Treiber verschlüsseln die Verbindung auf Wunsch. Da interne Server meist kein von Windows als vertrauenswürdig eingestuftes Zertifikat besitzen, wird das Serverzertifikat dabei nicht geprüft. Ohne diese Option wird die Verbindung unverschlüsselt (bzw. beim Treiber 18 “optional verschlüsselt”) aufgebaut.

Zeitlimit für den Befehl

Maximale Wartezeit in Sekunden, bis der Datenbankbefehl abgeschlossen sein muss (Standard: 30, 0 = unbegrenzt).

Verbindung testen

Prüft die eingegebenen Verbindungsdaten sofort und zeigt Server, Version und Datenbank an. Schlägt der Test fehl, erhalten Sie die Fehlermeldung des ODBC-Treibers.

Hinweis zu 64-Bit: Automatic PDF Processor ist ein 64-Bit-Programm und kann nur 64-Bit-ODBC-Treiber und -Datenquellen verwenden. Datenquellen, die in der 32-Bit-ODBC-Verwaltung angelegt wurden, erscheinen nicht in der Liste.


35.4 Datenbankziel

Datenbankziel

Tabelle befüllen

Je verarbeiteter Datei wird ein Datensatz in die gewählte Tabelle eingefügt.

  1. Tabelle: Geben Sie den Tabellennamen ein (bei Bedarf mit Schema, z. B. dbo.Rechnungen) oder klicken Sie auf Tabellen laden, um die Tabellen und Sichten der Datenbank in der Auswahlliste zu erhalten.
  2. Spalten aus Tabelle laden: Liest die Spalten der Tabelle mit ihren Datentypen ein. Spalten, die keinen NULL-Wert zulassen, sind mit * markiert; automatisch vergebene Spalten (Identity/Autowert) erscheinen grau und bleiben ohne Zuordnung. Sie können Spalten auch von Hand eintragen, falls die Datenbank kein Schema liefert.
  3. Automatisch zuordnen: Belegt alle noch leeren Spalten, deren Name dem Namen einer Extrahierungsregel entspricht oder damit endet - Präfixe wie fld_ oder col_, Groß-/Kleinschreibung und Umlaut-Schreibweisen (Zaehler = “Zähler”) spielen dabei keine Rolle; Dateiname erhält <FileName>. Beginnen alle Spaltennamen mit demselben Präfix (z. B. FLDRECHNUNGSNUMMER, FLDBETRAG), wird dieser Präfix zusätzlich abgetrennt und der Rest mit den Regelnamen verglichen. Bei über hundert Regeln erspart das die Handarbeit; nicht erkannte Spalten ordnen Sie anschließend von Hand zu.
  4. Wert zuordnen: Wählen Sie eine Spalte in der Liste, tragen Sie unter Wert den gewünschten Platzhalter ein (über Platzhalter einfügen) und klicken Sie auf Übernehmen. Spalten ohne Wert werden beim Einfügen nicht angesprochen - die Datenbank setzt dann ihren Standardwert (z. B. eine automatische ID oder das aktuelle Datum).

Ein Wert kann auch aus festem Text und Platzhaltern bestehen, z. B. Import <TodaysYear4>-<TodaysMonth> oder RE-<RuleId:1(Rechnungsnummer)>.

Bei bereits vorhandenem Datensatz (Duplikatschutz)

Wird eine Datei ein zweites Mal verarbeitet - etwa durch die Wiederholungslogik nach einem Fehler in einer späteren Aufgabe oder beim Nachholen -, würde ein zweiter Datensatz entstehen. Markieren Sie deshalb in der Spaltenliste eine oder mehrere Schlüsselspalten (Häkchen), über die ein Datensatz eindeutig erkennbar ist, z. B. die Rechnungsnummer oder Dateiname und Lieferant, und wählen Sie das Verhalten:

Verhalten Beschreibung
Neuen Datensatz anlegen Keine Prüfung - jede Verarbeitung erzeugt einen Datensatz (Standard)
Überspringen Existiert bereits ein Datensatz mit denselben Schlüsselwerten, wird nichts geschrieben; die Aufgabe gilt als erfolgreich
Vorhandenen Datensatz aktualisieren Die übrigen zugeordneten Spalten des vorhandenen Datensatzes werden überschrieben

Als Schlüssel ungeeignet sind Werte, die bei jeder Wiederholung anders ausfallen: fortlaufende Nummern (Regeln mit der Datenquelle “Fortlaufende Nummer”) und Platzhalter des Verarbeitungszeitpunkts wie <TodaysDay>. Das Programm lehnt solche Spalten als Schlüssel mit einer Begründung ab. Beim Aktualisieren werden Spalten mit fortlaufenden Nummern nicht überschrieben, damit der ursprüngliche Zähler erhalten bleibt; automatische ID-Spalten der Datenbank sind ohnehin nicht zugeordnet.

Die Prüfung erfolgt vor dem Einfügen mit denselben typgerechten Werten (SELECT COUNT(*) ... WHERE Schlüssel = ?) und funktioniert damit bei jeder Datenbank gleich. Die Vorschau zeigt Prüfung und Einfüge- bzw. Aktualisierungsbefehl nacheinander.

Eigener SQL-Befehl

Schreiben Sie den Befehl so, wie Sie ihn in Ihrer Datenbank ausführen würden, und setzen Sie an den Stellen, an denen Werte aus der Datei eingehen sollen, Platzhalter ein - ohne Anführungszeichen:

INSERT INTO Rechnungen (Nummer, Datum, Betrag, Datei)
VALUES (<RuleId:1(Rechnungsnummer)>, <RuleId:2(Rechnungsdatum)>, <RuleId:3(Betrag)>, <FileName>)

Ebenso möglich sind Aktualisierungen oder der Aufruf gespeicherter Prozeduren:

UPDATE Belege SET Archiviert = 1, Ablage = <ParentDirectory> WHERE Belegnummer = <RuleId:1(Belegnummer)>
EXEC ImportRechnung <RuleId:1(Rechnungsnummer)>, <RuleId:2(Rechnungsdatum)>, <FileName>

Vergleichsoperatoren wie < und > im Befehl bleiben unverändert erhalten - als Platzhalter gilt nur, was das Programm als solchen erkennt.

Leere Werte als NULL übergeben

Liefert eine Regel keinen Wert, wird standardmäßig NULL übergeben. Deaktivieren Sie die Option, wenn stattdessen ein leerer Text gespeichert werden soll.

Vorschau mit Beispieldatei

Zeigt den fertigen Befehl mit den Werten einer Beispieldatei des Profils (bei mehreren Beispieldateien wählen Sie die gewünschte in der Auswahlliste neben der Schaltfläche) - inklusive Datentyp je Parameter (Text, Datum, Zahl oder NULL). So sehen Sie vor der ersten Verarbeitung, was in der Datenbank ankommen wird. Für die Vorschau wird nichts in die Datenbank geschrieben.


35.5 Hinweise

Datentypen

Werte von Regeln mit Datentyp Datum werden als Datum übergeben, Werte von Regeln mit Datentyp Zahl als Dezimalzahl (Nachkommastellen bleiben erhalten), alle übrigen Werte als Text. Die Zieldatenbank nimmt so Datums- und Zahlenspalten direkt an, unabhängig vom Zahlen- oder Datumsformat im Dokument.

Fehler und Wiederholung

Ist die Datenbank nicht erreichbar oder schlägt der Befehl fehl (z. B. wegen einer verletzten Eindeutigkeitsbedingung), meldet die Aufgabe einen Fehler. Damit greift die Wiederholungslogik des Profils: Die Datei wird zu den eingestellten Zeitpunkten erneut verarbeitet - hilfreich bei nächtlichen Wartungsfenstern des Datenbankservers. Die Fehlermeldung des Treibers finden Sie in den Verarbeitungsdetails.

Reihenfolge der Aufgaben

Sollen Ablageort oder Dateiname in der Datenbank gespeichert werden, platzieren Sie die Aufgabe nach den Aufgaben “Umbenennen” bzw. “Verschieben”. Die Platzhalter <FileName> (Dateiname) und <ParentDirectory> (Ablageordner) liefern dann bereits den endgültigen Stand; beim Befüllen einer Tabelle ergibt die Kombination <ParentDirectory>\<FileName> den vollständigen Pfad.

Ein Datensatz je Datei

Die Aufgabe schreibt je Datei genau einen Datensatz. Enthält ein Dokument mehrere Belege, teilen Sie es zunächst mit der Aufgabe “PDFs aufteilen” und verarbeiten die Teildokumente mit einem zweiten Profil, das diese Aufgabe enthält.


35.6 Beispiel: Rechnungseingangsbuch

Ausgangssituation

Alle eingehenden Rechnungen sollen mit Rechnungsnummer, Datum, Betrag und Ablagepfad in der Tabelle Rechnungseingang der Buchhaltungsdatenbank erfasst werden.

Konfiguration

  1. Datenextrahierungsregeln: “Rechnungsnummer” (Text), “Rechnungsdatum” (Datum), “Betrag” (Zahl)
  2. Aufgabe “Verschieben”: Ablage nach \\SRV01\Belege\<RuleId:2(Rechnungsdatum){Year4}>
  3. Aufgabe “In Datenbank speichern”:
    • Verbindungsart: SQL Server, Server SRV-SQL01, Datenbank Buchhaltung, Windows-Anmeldung
    • Tabelle befüllen: dbo.Rechnungseingang
    • Spalten: Nummer = <RuleId:1(Rechnungsnummer)>, Datum = <RuleId:2(Rechnungsdatum)>, Betrag = <RuleId:3(Betrag)>, Ablage = <ParentDirectory>\<FileName>

Ergebnis

Für jede Rechnung entsteht ein Datensatz mit typgerechten Werten; die Spalte Id mit automatischer Nummerierung und die Spalte Erfasst mit dem Standardwert “aktuelles Datum” füllt die Datenbank selbst.