Importservice index-from-db
Der Importservice index-from-db liest einen eindeutigen Datenbankschlüssel aus dem Dateinamenamen eines zu archivierenden Dokumentes und greift dann mit diesem auf eine Datenbanktabelle zu, um die Index-Felderwerte zu bestimmen.
Die Dateien index-from-db.py und index-from-db.ini müssen gemeinsam ins Unterverzeichnis
customisation\importservices des Installationsverzeichnisses von PHOENIX Archiv kopiert werden.
Im folgenden wird der Importservice anhand eines Beispiels für Ausgangsrechnungen beschrieben.
hotfolder.ini
Der Eintrag in der hotfolder.ini für das Verzeichnis D:\Hotfolder und ein Archiv für
Ausgangsrechnungen sieht folgendermaßen aus:
[ausgangsrechnungen]
Directory=D:\Hotfolder
Type=importservice
Filemask=AR*.pdf
Module=index-from-db
Archive=ausrech
index-from-db.ini
In der index-from-db.ini muss eine ODBC-Datenbank hinzugefügt werden, die von der
index-from-db.py zum extrahieren der Feldwerte benutzt wird. Die Einträge UID und PWD
sind optional, falls sie in der DSN selbst bereits eingetragen sind. Die ODBC-Datenquelle muss
ein 64-Bit-ODBC-Treiber sein.
[Database]
DSN = FIREBIRD_DSN
UID = user
PWD = password
Die Sektion, die den Importvorgang steuert, muss den gleichen Namen haben, wie die zugehörige
Sektion in der hotfolder.ini, in unserem Beispiel also [ausgangsrechnungen].
Der Eintrag key beschreibt mit einem Teilstring oder einem regulären Ausdruck, wie sich der
eindeutige Schlüssel des Datensatzes aus dem Dateiname bildet.
Ein Teilstring wird in eckigen Klammer festgelegt, also z.B. [10, 13] für das 10. - 12. Zeichen.
(Dies ist die Slicing-Notation der Programmiersprache Python).
Reguläre Ausdrücke werden mit # geklammert. Der key muss dabei die erste Gruppe (= erste
Klammer) im regulären Ausdruck sein. Eine zweite Möglichkeit ist eine benannte Gruppe mit dem Namen
“result”, also (?P…) Beispiel mit dem regulären Ausdruck weiter unten:
Dateiname=`AR12345.pdf` --> key=`12345`
Der Eintrag sql beschreibt die SQL-Abfrage, mit der die Indexwerte aus einer Datenbanktabelle
ermittelt werden. Der Platzhalter {key} steht dabei für die im Eintrag key beschriebene id.
[ausgangsrechnungen]
key=#AR([0-9]*).pdf#
sql=SELECT belegnr, belegdatum, lieferant, nummer FROM erp_belege WHERE belegnr = {key}
In der Sektion [/fields] wird die Zuordnung zwischen den Feldnamen (Kurzname) des Archives und den
SQL-Spalten beschrieben. Falls ein fester Wert statt eines Feldwertes verwendet werden soll, muss
dieser Wert in Anführungszeichen gesetzt werden (Im Beispiel dokart="AR").
[ausgangsrechnungen/fields]
; <Feldname Archiv>=<Spaltenname SQL>
dokart="AR"
doknr=belegnr
beldat=belegdatum
name=lieferant
konto=nummer
SQL-Log
In der Sektion [/url] kann eine SQL-Abfrage definiert werden, mit der Dokumenten-ID in eine
SQL-Tabelle geschrieben wird. Dies kann sinnvoll sein, um es z.B. einem ERP-System zu ermöglichen
den archivierten Beleg aufzurufen. Der Platzhalter {key} steht für die im Eintrag key
beschriebene eindeutigen Schlüssel. Der Platzhalter {id} steht für die im Archiv-ID des Dokumentes.
In dem Beispiel wird die gesamte URL des archivierten Belegs übergeben.
Diese Sektion ist optional.
[ausgangsrechnungen/url]
sql=INSERT INTO urls (belegnr, url) VALUES ({key}, 'localhost:5000/?attachment=' || '{id}')
Datei-Log
In [/log] kann eine Logausgabe definiert werden, die das Ergebnis der Archivierung in eine Datei sichert. Der Aufbau der Ausgabe-Datei muss dabei über eine Template-Datei selbst definiert werden:
[ausgangsrechnungen/log]
filename = D:\Log\{record_id}-{_order}-{timestamp}.csv
template = index-from-db-template.csv
mode = write
encoding = utf-8
Die Parameter filename und template sind Pflicht. filename gibt die Ausgabedatei an, in
die das Ergebnis der Archivierung geschrieben werden soll.
filename
Wenn kein absoluter Pfad in filename angegeben wird, ist dieser Pfad relativ zum Verzeichnis, in
dem die index-from-db.py liegt. filename kann durch in geschweiften Klammern angegebene
Parameter dynamisch erzeugt werden:
{record_id}ist die ID des erzeugten Vorgangs.{timestamp}ist eine Ganzahl, die die Unixzeit in Millisekunden enthält.Auf die Indexdaten des archivierten Vorgangs kann über den mit einem Unterstrich vorangestellten Kurznamen zugegriffen werden, z.B.
{_order}für das Feld mit dem Kurznamen “order”. In Dateinamen nicht erlaubte Zeichen werden infilenamedurch einen Unterstrich ersetzt.
template
template gibt den Namen der Template-Datei an, die im gleichen Verzeichnis wie die
index-from-db.py liegen muss. Diese Datei verwendet das
jinja2-Format, Variablen werden dabei in
doppelten geschweiften Klammern angegeben, Schleifen etc. sind ebenfalls möglich. Templates müssen
im UTF-8-Encoding geschrieben werden.
Das folgende Beispiel generiert eine einzeilige CSV-Datei:
order;{{ metadata['_order'] }};{{ url }}?attachment={{ record['attachments'][0]['id'] }};;OK;Ablieferbeleg
metadata enthält die Werte der Index-Daten, in diesem Fall wird der Wert aus der Spalte mit dem
Kurznamen order verwendet. Ab Version 2.1.8 kann über url die Basis-URL der Installation
verwendwet werden, bei älteren Versionen muss die URL noch statisch angegeben werden. Über das
record-Dictionary kann auf sämliche Werte des archivierten Vorgangs zugegriffen werden, in
diesem Fall wird beispielsweise noch die ID des ersten Dokuments für das Erzeugen der URL verwendet.
mode
mode gibt an, wie die Ausgabedatei geöffnet werden soll. Der Wert write öffnet eine neue
Datei bzw. überschreibt eine vorhandene. Mit append kann die Ausgabe aber auch an eine
bestehende Datei angehängt werden. Die Voreinstellung ist write.
encoding
Gibt an, in welchem Encoding die Ausgabedatei geschrieben werden soll. Der Standard ist utf-8,
für das ISO-8859-1-Encoding sollte hier latin1 angegeben werden.