Funktionsweise
Der Service importiert Dateien aus einem konfigurierbaren Importverzeichnis in das MESONIC-Archiv. Die erlaubten Dateitypen sind über FileFilter konfigurierbar (Standard: *.pdf). Es werden zwei Verzeichnistypen unterstützt:
- Reguläre Verzeichnisse: Direkte Unterverzeichnisse von
ImportPath. Der Verzeichnisname muss exakt der Bezeichnung eines Archiv-Formulars in MESONIC entsprechen. - Erkennungsverzeichnisse: Unterverzeichnisse, die einem Objekttyp zugeordnet sind (Belege, Artikel, Personenkonten). Diese enthalten Formular-Unterverzeichnisse, deren Name dem Archiv-Formular entspricht.
Betriebsmodi
- Batch-Modus (
Watch: false): Verarbeitet alle vorhandenen Dateien einmalig und beendet sich danach. - Watch-Modus (
Watch: true): Verarbeitet vorhandene Dateien und überwacht das Importverzeichnis dauerhaft auf neue Dateien. Neue Dateien werden automatisch erkannt. Falls eine Datei noch gesperrt ist (z.B. laufender Kopiervorgang), werden bis zu 10 Versuche im Abstand von 500ms unternommen.
Objekterkennung
Der Service unterstützt drei Objekttypen. Die Zuordnung erfolgt über konfigurierbare Erkennungsverzeichnisse:
| Objekttyp | Standard-Verzeichnis | MesoXPO-Klasse | Suchfeld |
|---|---|---|---|
| Belege | Belege |
BestelldateiKopf |
Belegkey (Kontonummer-Laufnummer) oder Belegnummer |
| Artikel | Artikel |
ArtikelStammdatei |
Artikelnummer |
| Personenkonten | Personenkonten |
ViewKontenstamm |
Kontonummer |
Dateien in regulären Verzeichnissen (die keinem Objekttyp zugeordnet sind) werden ohne Objekterkennung importiert - Schlagwortdateien funktionieren weiterhin.
Wichtig: Dateien dürfen nicht direkt in einem Erkennungsverzeichnis liegen, sondern müssen sich in einem Formular-Unterverzeichnis befinden. Dateien direkt in z.B. Belege\ werden mit einer Warnung übersprungen.
Verzeichnis-Erkennung (optional)
Alternativ zur Identifier-Extraktion aus dem Dateinamen (per Regex) kann der Identifier auch über den Verzeichnisnamen ermittelt werden. Dazu werden Dateien in ein Unterverzeichnis des Formular-Verzeichnisses gelegt, dessen Name dem Objekt-Identifier entspricht:
Belege\Laborbericht\12000-156A\scan.pdf
Hier wird 12000-156A als Identifier aus dem Verzeichnisnamen übernommen - unabhängig vom Dateinamen. Das ist nützlich wenn:
- Dateinamen keine auswertbare Struktur haben (z.B.
scan001.pdf) - Mehrere Dateien demselben Objekt zugeordnet werden sollen
- Die Zuordnung manuell über die Ablagestruktur gesteuert werden soll
Die Verzeichnis-Erkennung hat Vorrang vor der Regex-Extraktion. Sie funktioniert in allen Modi (Batch, Watch, Mandantenverzeichnisse).
Verzeichnisstruktur
C:\Archivimport\
Belege\ <-- Erkennungsverzeichnis (Objekttyp: Beleg)
Laborbericht\ <-- Formular-Unterverzeichnis -> Archiv-Formular "Laborbericht"
12000-156A.pdf <-- Identifier aus Dateiname (per Regex)
12000-156A.ini <-- optionale Schlagwortdatei
20100-42B\ <-- Verzeichnis-Erkennung: Identifier = "20100-42B"
scan001.pdf <-- Dateiname beliebig
scan002.pdf
Probebegleitschein\ <-- Formular-Unterverzeichnis -> Archiv-Formular "Probebegleitschein"
20100-42B.pdf
Artikel\ <-- Erkennungsverzeichnis (Objekttyp: Artikel)
Artikelbilder\ <-- Formular-Unterverzeichnis -> Archiv-Formular "Artikelbilder"
Artikel_ART-001.pdf
Personenkonten\ <-- Erkennungsverzeichnis (Objekttyp: Personenkonto)
Kundenstamm\ <-- Formular-Unterverzeichnis -> Archiv-Formular "Kundenstamm"
Konto_12000.pdf
Rechnungen\ <-- Reguläres Verzeichnis -> Archiv-Formular "Rechnungen"
dokument.pdf
Mandantenverzeichnisse
Mit MandantenVerzeichnisse: true wird die erste Verzeichnisebene unter ImportPath als Mandantennummer interpretiert. So können mehrere Mandanten mit einer einzigen Service-Instanz bedient werden. Der Parameter Company entfällt in diesem Modus. Ist Company dennoch in der Konfiguration gesetzt, wird der Wert ignoriert und eine Warnung geloggt.
Systemverzeichnisse (Erfolgreich/Fehler/InArbeit bzw. die konfigurierten Namen) auf Mandantenebene werden automatisch übersprungen und nicht als Mandant interpretiert.
Die Datenbankverbindung wird beim Start nur auf Systemebene hergestellt. Mandanten-spezifische Verbindungen werden erst bei Bedarf erstellt und anschließend für die Dauer der Sitzung zwischengespeichert.
C:\Archivimport\
500M\ <-- Mandant 500M
Belege\ <-- Erkennungsverzeichnis (Objekttyp: Beleg)
Laborbericht\
12000-156A.pdf <-- Identifier aus Dateiname
20100-42B\ <-- Verzeichnis-Erkennung
scan.pdf
Rechnungen\ <-- Reguläres Verzeichnis -> Archiv-Formular "Rechnungen"
dokument.pdf
600M\ <-- Mandant 600M
Belege\
Probebegleitschein\
20100-42B.pdf
Artikel\
Artikelbilder\
Artikel_ART-001.pdf
Innerhalb jedes Mandantenverzeichnisses gilt die gleiche Struktur wie im Einzelmandant-Modus (Erkennungsverzeichnisse, Formular-Unterverzeichnisse, Schlagwortdateien etc.).
Dateiverschiebung nach Verarbeitung
Unmittelbar vor dem Archivieren wird eine Datei (inkl. begleitender Schlagwortdatei) in das
Arbeitsverzeichnis InArbeit (konfigurierbar via WorkFolder) verschoben. Das Verschieben ist die
einzige Operation, die an einer fremden Dateisperre scheitert — schlägt es fehl (Datei noch im
Zugriff durch Scanner, Virenscanner o.Ä.), ist noch nichts archiviert und der nächste Lauf versucht
es erneut. Eine bereits archivierte Datei kann so nicht ein zweites Mal importiert werden. Das
Verschieben selbst wird bei Sperren mehrfach wiederholt (bis zu 10 Versuche im 500-ms-Abstand).
Nach der Verarbeitung werden Dateien (inkl. begleitender Schlagwortdateien) automatisch verschoben:
- Erfolgreicher Import: Unterverzeichnis
Erfolgreich(konfigurierbar viaSuccessFolder) - Fehler beim Import: Unterverzeichnis
Fehler(konfigurierbar viaErrorFolder)
Das Zielverzeichnis wird relativ zum Verzeichnis der Datei erstellt:
- Regulär:
Rechnungen\Erfolgreich\dokument.pdf - Erkennung:
Belege\Laborbericht\Erfolgreich\12000-156A.pdf - Verzeichnis-Erkennung:
Belege\Laborbericht\12000-156A\Erfolgreich\scan.pdf
Bei Namenskonflikten wird automatisch ein Zeitstempel angefügt (z.B. 12000-156A_20240115_143022.pdf).
Bleiben beim Beenden/Absturz des Dienstes Dateien im Arbeitsverzeichnis zurück, werden sie beim nächsten Start automatisch zurückgeholt und erneut verarbeitet (Log-Warnung weist darauf hin).
Keine Kommentare vorhanden
Keine Kommentare vorhanden