Dokumentenmanagement-System

Allgemeines


syslog.ERP bietet die Möglichkeit der direkten Anbindung an diverse Document Management Systeme (DMS). Dabei ist es möglich gedruckte Formulare direkt ins DMS zu archivieren und wieder anzeigen zu lassen. Verknüpfte Dokumente (DVS) können ebenfalls automatisch im DMS abgelegt und wieder abgerufen werden.

Unterstützte Systeme


SystemAnbindungSystem-Name
KnowledgeTreeangebunden über den integrierten Web-Servicektdms
EASY ENTERPRISE.iangebunden über Henrichsen UDSuds
BvlArchivioangebunden über die integrierte Schnittstelle (eingeschränkte Funktionalität)bvl
DMS-Liteangebunden über die integrierte Schnittstelle (eingeschränkte Funktionalität)lite

Konfiguration


DMS-Proxy

Damit ein syslog.ERP Client die DMS-Integration nutzen kann, wird der DMS-Proxy benötigt. Er muß auf dem Client installiert sein. Wenn das MSI-Paket (DMS-Proxy.msi) im Verzeichnis %PRIMUSDIR%\admin abgelegt und der syslog.ini-Parameter DMSPROXY_AUTOUPDATE auf 1 gesetzt wird (Vorlage für syslog.ini in syslogini.org), dann versucht syslog.ERP den DMS-Proxy auf den Clients automatisch zu installieren/updaten (entsprechende Berechtigungen des angemeldeten Benutzers vorausgesetzt).

Verbindung

In der Datei dmsini.org (im admin-Verzeichnis von syslog.ERP) werden sowohl die Information, die für den Verbindungsaufbau zum jeweiligen DMS (Server/Port bzw. Web-Service-URL, Art der Anmeldung, Optionen) nötig sind, als auch die Einstellungen für die Formular-Archivierung (Ordner, Dokument-Typen, Titel, Metadaten) abgelegt.

Allgemein

DMS_DEFAULT = "ktdms"

KnowledgeTree

Wichtige Parameter für KnowledgeTree sind DMS_SERVICEURL_ktdms (URL des Web-Services) und DMS_AUTH_ktdms (Art der Anmeldung; 0 = anonymous, 1 = mit syslog.ERP Anmeldeinformationen, 2 = mit fixen Benutzer/Password aus DMS_USER_ktdms + DMS_PASS_ktdms).

DMS_NAME_ktdms = "KnowledgeTree"
DMS_SERVICEURL_ktdms = "http://192.168.168.222/knowledgetree/ktwebservice/index.php"
DMS_AUTH_ktdms = 1

UDS (EASY ENTERPRISE.i / EASY ENTERPRISE.x)

Wichtige Parameter für UDS sind DMS_OPTS_uds (Optionen für die Erzeugung einer UDS-Session) und DMS_AUTH_uds (Art der Anmeldung; 0 = SYSTEM/SYSTEM, 1 = mit syslog.ERP Anmeldeinformationen, 2 = mit fixen Benutzer/Password aus DMS_USER_uds + DMS_PASS_uds).DMS_DOCUID_uds legt das Attribut fest, das für die eindeutige Identifizierung eines Dokuments verwendet werden soll (das Attribut muß lang genug für eine GUID sein). Dieses Attribut muß in jeder Association existieren.Die Parameter DMS_F-TITLE_uds und DMS_F-FILENAME_uds legen Attribute fest in denen der Titel und der Dateiname des Dokuments gespeichert werden sollen (da UDS dies so nicht selber macht). Wenn Dokumente über Titel oder Dateiname gesucht werden sollen, dann sind diese Attribute zwingend nötig. Wenn gefüllt müssen natürlich auch diese Attribute in allen verwendeten Associationen existieren.

DMS_NAME_uds = "Henrichsen UDS / EASY"
DMS_AUTH_uds = 2
DMS_OPTS_uds = "SOLUTION_NAME=Syslog SOLUTION_VERSION=1 APPLICATION=syslog.ERP SERVER_HOST=DMS-SERVER-NAME SERVER_PORT=10203"
DMS_DOCUID_uds = "UDS|GUID"
DMS_F-TITLE_uds = ""
DMS_F-FILENAME_uds = ""
DMS_USER_uds = "syslog"
DMS_PASS_uds = "password"

BvlArchivio

Wichtige Parameter für BvlArchivio sind DMS_OPTS_bvl (Optionen für die Anmeldung beim Archiv-System) und DMS_AUTH_bvl (Art der Anmeldung; 0 = SYSTEM/SYSTEM, 1 = mit syslog.ERP Anmeldeinformationen, 2 = mit fixen Benutzer/Password aus DMS_USER_bvl + DMS_PASS_bvl).DMS_DOCUID_bvl legt das Attribut fest, das für die eindeutige Identifizierung eines Dokuments verwendet werden soll. Die Parameter DMS_F-TITLE_bvl und DMS_F-FILENAME_bvl legen Attribute fest in denen der Titel und der Dateiname des Dokuments gespeichert werden sollen. Bei BvlArchivio sind alle diese Parameter unbedingt nötig, da es bei BvlArchivio keine anderen Möglichkeiten gibt, diese Informationen zu speichern oder abzurufen.

DMS_NAME_bvl = "BVL"
DMS_AUTH_bvl = 2
DMS_OPTS_bvl = "SERVER_HOST=62.116.179.211 SERVER_PORT=80 SERVER_HOST_U=62.116.179.216 SERVER_PORT_U=21 USER_U=syslogi PASS_U=passwordi ARCHIVE=1"
DMS_DOCUID_bvl = "BVL|GUID"
DMS_F-TITLE_bvl = "BVL|TITLE"
DMS_F-FILENAME_bvl = "BVL|FILENAME"
DMS_USER_bvl = "syslog"
DMS_PASS_bvl = "password"

DMS-Lite

Wichtige Parameter für DMS - Lite sind DMS_OPTS_lite (Optionen für die Anmeldung beim Archiv-System) und DMS_F-FINR_lite wenn die Ablage der Dokumente nach Mandant getrennt werden soll.

DMS_NAME_lite = "DMS-Lite"
DMS_OPTS_lite = "DMS_BASEPATH=D:\syslog.ECM-Light\Archiv"
DMS_F-FINR_lite = "Lite|Mandant"

DMS-LiteEx

Wie DMS-Lite, aber mit einer MySQL-Datenbank zur Metadaten-Speicherung anstatt einer SQLite-Datei.

DMS_NAME_lite2 = "DMSlite2 (ODBC)"
DMS_AUTH_lite2 = 2
DMS_USER_lite2="lite2"
DMS_PASS_lite2="lite2"

#DMS_OPTS_lite2 = "DMS_BASEPATH=\\syslog-ecm-light\DMS_BASEPATH_lite2 DMS_DATABASE=DSN:ODBClite2"
DMS_OPTS_lite2 = "DMS_BASEPATH=\\syslog-ecm-light\DMS_BASEPATH_lite2 DMS_DATABASE=MYSQL53,syslog-ecm-light,3306,dblite2"

DMS_DOCUID_lite2 = "Lite2|GUID" 
DMS_F-TITLE_lite2 = "Lite2|Titel"
DMS_F-FILENAME_lite2 = "Lite2|DateiName"
#DMS_F-FINR_lite2 = "Lite2|Mandant"

EBIS

DMS_NAME_ebis = "EBIS / EASY"
DMS_SERVICEURL_ebis = "http://192.168.168.164:9090/"

DMS_AUTH_ebis = 2
DMS_USER_ebis="superadmin"
DMS_PASS_ebis="super"

DMS_OPTS_ebis = "SYSTEM_NAME=syslog1"

DMS_DOCUID_ebis = "EBIS|GUID" 
DMS_F-TITLE_ebis = "EBIS|Titel"
DMS_F-FILENAME_ebis = "EBIS|DateiName"
#DMS_F-FINR_ebis = "EBIS|Mandant"

VK/EK-Formulare im DMS archivieren

Über den Dialog KDRPT10/KDRPT11 kann für jedes Formular gesteuert werden, ob und wohin es archiviert werden soll. In der Datei dms.ini (Vorlage dmsini.org) wird dann Ordner, Dokument-Typ, Titel und Metadaten für jedes Formular festgelegt (mit Hilfe von Feldern aus den Tabellen fvkabruf+fauftab bzw. fekabruf+fbektab oder durch ein LUA-Script).

KDRPT11

Im KDRPT11 kann über das Kennzeichen Archivierung gesteuert werden ob und wohin das Formular archiviert werden soll. Möglichkeiten sind gar nicht, die EASY ASCII-Schnittstelle (offline) oder KnowledgeTree und UDS (online via DMS-Proxy).

Parameter dmsini.org

In der Datei dms.ini (Vorlage dmsini.org) wird für jedes Formular ein Ziel-Ordner, Dokument-Typ, Titel und Metadaten-Felder für die Archivierung im DMS festgelegt.In den Parameters ORDNER, TYP, TITEL und den Metadaten-Feldern können sämtliche Felder der Tabellen fvkabruf/fauftab/gpktab (VK) oder fekabruf/fbektab/gpktab (EK) als Variablen verwendet werden (Format %TABELLE.FELD%). Der Inhalt der Tabelle gpktab bezieht sich auf den angemeldeten Benutzer. Außerdem wird auch die Variable %Year% durch das aktuelle Jahr ersetzt (um nach Jahren getrennte Ordner zu ermöglichen).

Beispiel Archivierung Auftragsbestätigungen in KnowledgeTree:

AB_ORDNER = "syslog.ERP/Formulare/%Year%/Vertrieb"
AB_TYP = "syslog.ERP + Auftragsbestätigung"
AB_TITEL = "Auftragsbestätigung %fauftab.archivnr% (%fauftab.auart% %fauftab.aufnr%)
AB_META_1 = "General information|Document Author|%gpktab.vname% %gpktab.nname% (syslog.ERP)"
AB_META_2 = "General information|Media Type|Text"
AB_META_3 = "syslog.ERP + Info Formular|Formular-Nr.|%fauftab.archivnr%"
AB_META_4 = "syslog.ERP + Info Formular|Formular-Art|%fauftab.formular%"
AB_META_5 = "syslog.ERP + Info Kundenauftrag|Auftragsart|%fauftab.auart%"
AB_META_6 = "syslog.ERP + Info Kundenauftrag|Auftrags-Nr.|%fauftab.aufnr%"
AB_META_7 = "syslog.ERP + Info Kundenauftrag|Kunden-Nr.|%fauftab.konto%"
AB_META_8 = "syslog.ERP + Info Kundenauftrag|Kunden-Name|%fauftab.adr1name1%"
AB_SCRIPT = "d:\temp\ab_meta.lua"

Beispiel Archivierung Lieferscheine in EE.i (UDS):

LI_ORDNER = "Vertrieb"
LI_TYP = "Vertrieb"
LI_TITEL = "Lieferschein %fauftab.archivnr% (%fauftab.auart% %fauftab.aufnr%)
LI_META_1 = "Vertrieb|Beleg|%fauftab.formular%
LI_META_2 = "Vertrieb|Kd.-Nr|%fauftab.konto%
LI_META_3 = "Vertrieb|Auftr.-Nr.|%fauftab.aufnr%
LI_META_4 = "Vertrieb|Vers.Adr.-Nr.|%fauftab.unrlief%
LI_META_5 = "Vertrieb|Datum|%fauftab.druckdat%
LI_META_6 = "Vertrieb|Vorgangs-Nr|%fauftab.archivnr%
LI_META_7 = "Vertrieb|Versand-Adresse|%fauftab.adr1name1%, %fauftab.adr1name2%, %fauftab.adr1name3%, %fauftab.adr1strasse%, %fauftab.adr1plz% %fauftab.adr1ort%

Ist der Parameter SCRIPT gesetzt (und mit einem Verweis auf ein LUA-Script gefüllt), dann wird dieses Script vor der Übergabe des Dokuments ans DMS ausgeführt. Das Script bekommt abhängig von der Herkunft des Aufrufs (Formulare oder DVS) unterschiedliche Informationen mitgegeben.

DVS

VariableInhalt
dms_param.aufruf"DVS"
dms_param.formularDas Formular, das aus der dvs.ini verwendet wurde (oder blank, wenn die harten Defaults gezogen wurden) (z.B. DVS_M07 fuer Artikelstamm)
dms_param.rufkzDVS-Modus (z.B. 7 fuer Artikelstamm)
artdokuTable mit allen Feldern der Tabelle artdoku
gpktabTable mit allen Feldern der Tabelle gpktab (angemeldeter Benutzer)

Formulare

VariableInhalt
dms_param.aufruf"FORM"
dms_param.formularDas gedruckte Formular (z.B. AB)
dms_param.lfdnrDie laufende Nummer aus der fauftab
dms_param.modusDie Art des Formulars (1 = VK, 2 = EK)
dms_param.kzarchivArt der Archivierung (2 = KTDMS, 3 = UDS, -1 = Default)
fekabrufTable mit allen Feldern der Tabelle fekabruf (bei VK-Formular leer)
fbektabTable mit allen Feldern der Tabelle fbektab (bei VK-Formular leer)
fvkabrufTable mit allen Feldern der Tabelle fvkabruf (bei EK-Formular leer)
fauftabTable mit allen Feldern der Tabelle fauftab (bei EK-Formular leer)
gpktabTable mit allen Feldern der Tabelle gpktab (angemeldeter Benutzer)

Diese Variablen sind read-only und können vom LUA-Script aus nicht manipuliert werden.

Unabhängig von der Art des Aufrufs erhält das Script außerdem

VariableInhalt
dms_dest.systemDas DMS-System wohin das Dokument geschickt werden soll (ktdms, uds)
dms_dest.folderZiel-Pfad innerhalb des DMS
dms_dest.typeDokument-Typ im DMS
dms_dest.titleTitel des Dokuments im DMS
dms_dest.filenameDateiname des Dokuments im DMS

Ein Array von dms_meta-Strukturen, mit den definierten Metadaten-Feldern:

VariableInhalt
dms_meta[idx].fieldsetName Metadaten Fieldset
dms_meta[idx].fieldName Metadaten Feld
dms_meta[idx].valueWert Metadaten Feld

Diese Daten können beliebig manipuliert werden und werden nach Beendigung des Scripts zur weiteren Verarbeitung übernommen. Liefert das Script einen Rückgabe-Wert ungleich 0 zurück, dann wird die Übergabe mit einem Fehler abgebrochen.

Anmerkung UDS: Wenn UDS verwendet wird, dann wird muss sowohl der Dokument-Typ als auch der Ordner den Namen der Association beinhalten. Die Metadaten (Attribute) hängen bei UDS an der Association (das Konzept von verschiedenen Fieldsets gibt es nicht), d.h. der Name des Fieldsets in dem Metadaten wird bei UDS ignoriert und sollte ebenfalls auf den Namen der Association gesetzt werden.

DVS/DMS-Integration

Die Dokumente, die über DVS an Artikel, Aufträge, etc. verknüpft werden, können entweder im Datei-System residieren (klassische Art) oder in einem DMS gespeichert werden (wo sie kein Benutzer versehntlich löschen kann und sie außerdem noch mit Metadaten versehen werden können -- und revisionssicher sind).Wenn die DVS/DMS-Integration aktiviert ist, dann werden Dokumente beim Hinzufügen ins DVS an das konfigurierte DMS übertragen und es wird eine Referenz auf das DMS-Dokument im DVS gespeichert. Wenn der Benutzer eine DVS-Verknüpfung, die auf ein DMS-Dokument zeigt ändert, dann wird das Dokument im DMS aktualisiert.

Parameter dvsini.org

Die DVS/DMS-Integration wird mit dem Parameter DMS_INTEGRATION aktiviert (0 = deaktiviert, 1 = aktiviert). Der Parameter DVS_DMS_DEFAULT legt das DMS fest, indem die Dokumente abgelegt werden sollen.

DMS_INTEGRATION = 1
DVS_DMS_DEFAULT = "ktdms"

Für jede Art der Dokumenten-Verknüpfung (DVS-Modus) kann ein eigener Satz von Archivierungs-Informationen angelegt werden. Die Parameter sind diesselben wie in der Datei dms.ini.

FormularArt der Dokumenten-Verknüpfung
DMS_M00Default (wenn keine Verknüpfung für den entsprechenden DVS-Modus angelegt ist)
DMS_M01Einkauf Kopf
DMS_M02Einkauf Position
DMS_M03Vertrieb Kopf
DMS_M04Vertrieb Position
DMS_M05Betriebsmittel
DMS_M06Fertigung
DMS_M07Artikel
DMS_M08Arbeitsplan
DMS_M09Kunden/Lieferanten
DMS_M10Kostenträger
DMS_M11Werkzeug
DMS_M12Personal
DMS_M13Arbeitsplan Position
DMS_M14Arbeitsgang
DMS_M15Zeugnis
DMS_M16Stücklisten Kopf
DMS_M17Vertrieb Archiv Kopf
DMS_M18Vertrieb Archiv Position
DMS_M19Einkauf Archiv Kopf
DMS_M20Einkauf Archiv Position
DMS_M21Fertigung Archiv
DMS_M22Workflow
DMS_M23Prüfmittel
DMS_M24Arbeitsanweisung
DMS_M25Planungseinheit

Beispiel Archivierung Auftrags-Dokumente in KnowledgeTree:

DMS_M03_ORDNER = "syslog.ERP/Dokumente/Auftraege"
DMS_M03_TYP = "syslog.ERP + DVS-Dokument"
DMS_M03_META_1 = "General information|Document Author|%gpktab.vname% %gpktab.nname% (syslog.ERP)"
DMS_M03_META_2 = "syslog.ERP + Info Kundenauftrag|Auftragsart|%artdoku.auart%"
DMS_M03_META_3 = "syslog.ERP + Info Kundenauftrag|Auftrags-Nr.|%artdoku.aufnr%"
DMS_M03_SCRIPT = "d:\temp\m03_meta.lua"

DMS_M04_ORDNER = "syslog.ERP/Dokumente/Auftraege"
DMS_M04_TYP = "syslog.ERP + DVS-Dokument"
DMS_M04_META_1 = "General information|Document Author|%gpktab.vname% %gpktab.nname% (syslog.ERP)"
DMS_M04_META_2 = "syslog.ERP + Info Kundenauftrag|Auftragsart|%artdoku.auart%"
DMS_M04_META_3 = "syslog.ERP + Info Kundenauftrag|Auftrags-Nr.|%artdoku.aufnr%"
DMS_M04_SCRIPT = "d:\temp\m03_meta.lua"


Scan-Import mit Barcode-Etiketten

Durch die Verwendung von DVS- und DMS-Etiketten mit Barcodes ist eine automatischer Verknüpfung gescannter Dokumente an die entsprechenden Syslog-Vorgänge oder auch nur eine direkte Übertragung ins DMS möglich. Dies geschieht entweder manuell über den Dialog DVS30 oder vollautomatisch durch den Dienst "Scan-Import" welcher eines oder mehrere Verzeichnisse überwacht und auf neu gescannte Dokumente wartet.

DVS-Etiketten

In vielen Dialogen (AR10, AR11, EK11, VE11, RE11, LB11, ...) können mittels dem "DVS-Deckblatt/Etikett"-Button in der Toolbar Deckblätter bzw. Etiketten mit Barcodes gedruckt werden. Mittels dieser Barcodes ist eine automatischer Verknüpfung gescannter Dokumente an die entsprechenden Vorgänge möglich. Dies geschieht entwender manuell über den Dialog DVS30 oder vollautomatisch durch den Dienst "Scan-Import" (welcher eines oder mehrere Verzeichnisse überwacht und auf zu verarbeitende Dokumente wartet).

DMS-Etiketten

Im Dialog DMS50 können Etiketten gedruckt werden mit denen eine reine DMS-Verknüpfung von Dokumenten möglich ist. D.h. die ensprechenen Dokumente werden nicht via Syslog-DVS an einen Vorgang, Artikel o.ä. verknüpft sondern nur mit den vom Benutzer erfassten Daten ins DMS übertragen. In diesem Dialog werden bereits vor dem Scannen die Informationen über ein Dokument erfasst und ein entsprechendes Barcode-Etikett gedruckt. Nach dem Scannen wird das Dokument mit den vorerfassten Informationen an das DMS übertragen.

Import über DVS30

Über den Dialog DVS30 (kann über den Dialog DVS20 und den Button "Dokumente importieren" erreicht werden) können gescannte Dokumente "online" ins System importiert werden. Ist die Verknüpfung über den Barcode aus irgendwelchen Gründen nicht möglich, so kann hier auch eine manuelle Verknüpfung des Dokuments stattfinden.

Import über Scan-Import Dienst

Der vollautomatische Import von gescannten Dokumenten ist über den Scan-Import Dienst (%PRIMUSDIR%\stam1.0\bin\ScanImport) möglich. Der Dienst überwacht Verzeichnisse und versucht dort auftauchende PDF-, TIF- und JPG-Dateien selbstständig zu importieren. Dokumente, die der Dienst nicht importieren kann landen in der Fehler-Liste im Dialog DVS30, wo sie dann manuell verknüpft werden können.

Parameter dvsini.org

Konfiguration der Barcode-Generierung und Erkennung erfolgt über die INI-Dateien dvsini.org und dmsini.org. In der Datei dvsini.org werden sowohl der Barcode-Typ (Parameter DVS_CODETYPE) für die Etiketten (dies steuert sowohl den Druck als auch die Erkennung -- mögliche Werte sind "QR" oder "DataMatrix") sowie die Lua-Skripte für die Unterstützung des Imports (Parameter DMS_POSTSCAN_SCRIPT + DMS_POSTADD_SCRIPT) festgelegt. Während die Skripte für den manuellen Import über DVS30 nicht unbedingt nötig sind, so sind sie für die Nutzung des Dienstes unbedingt erforderlich. Mit Hilfe der Skripte werden die Dokumente aus dem Import-Pfad (Parameter DVS_IMPPFAD) entweder gelöscht (nach erfolgreichen Einfügen ins DMS) oder in ein anderes Verzeichnis verschoben (falls bei der Barcode-Erkennung oder beim Import ins DMS ein Fehler aufgetreten sein sollte).

Beispiele für die relevanten Parameter aus der dvsini.org:

DVS_CODETYPE = "QR"
DMS_POSTSCAN_SCRIPT = "\\server\syslogrt\_admin\lua\dms_postscan.lua"
DMS_POSTADD_SCRIPT = "\\server\\syslogrt\_admin\dms_postadd.lua"
DVS_IMPPFAD = "\\server\scanner1|\\server\scanner2"

Parameter dmsini.org

In der Datei dmsini.org werden Pfade und Parameter für diverse Tools (ImageMagick, GhostScript, etc.) abgelegt, die benutzt werden können um PDFs in Grafik-Dateien zu konvertieren (und eventuell zu filtern), damit sie von der Barcode-Erkennung verarbeitet werden können.

Beispiele für die relevanten Parameter aus der dmsini.org:

IM_CONVERT_EXE = "\\server\dms-tools\ImageMagick-6.6.7-Q8\convert.exe"
DESPECKLE_PDF = 3
DESPECKLE_RES = 150
BCR_HINTS = "XIXQ1"

Post-Scan- und Post-Add-Skripte

Scripte zum Verschieben bzw. Löschen der verarbeiteten Dokumente sind für die Nutzung des Scan-Import Dienstes zwingend erforderlich. Sie können über auch für den manuellen Import über DVS30 genutzt werden, um verarbeitete Dateien automatisch aus dem Weg zu räumen. Die Scripte erhalten vom Programm folgende Variablen:

VariableInhalt
queue_info.aufrufHerkunft des Aufrufs ("DVS30" oder "ScanImport")
queue_info.lfdnrVerweis auf den Eintrag (oder u.U. auch mehrere Einträge) in der ddqtab
queue_info.statusStatus/Fehlercode (0 = OK/erfolgreich, != 0 = Fehler aufgetreten)

Außerdem wird das Array queue_files mit den Dateinamen des Dokuments übergeben (theoretisch können es mehrere Dateien pro Dokument sein, wenn im DVS30 via Scan-Client-Mode mehrere Dateien zu einem Dokument kombiniert wurden).

VariableInhalt
queue_files[idx].filenameDokument-Dateinamen

Beispiel für ein Post-Scan-Skript:

-- Post-Scan Script
-- wird nach der Barcode-Erkennung ausgeführt

-- wenn queue_info.status = 0,
-- dann wurde die Barcode-Erkennung erfolgreich durchgefuehrt.

-- Pfad wo fehlerhafte Dokumente hinverschoben werden sollen
local failpath = "d:\\temp\\scanimport-fehler\\";

SY_Msg( "queue_info.aufruf = " .. queue_info.aufruf );
SY_Msg( "queue_info.lfdnr = " .. queue_info.lfdnr );
SY_Msg( "queue_info.status = " .. queue_info.status );

SY_Msg( "queue_files length = " .. #queue_files );

if queue_info.status == 0 then
        SY_Msg( "Status = OK -- Nix tun!" );
        return 0;
end

for idx=1,#queue_files do
    SY_Msg( "queue_files["..idx.."].filename = " .. queue_files[idx].filename );
    SY_Msg( "Status != OK -- Datei wird verschoben." );
   
    local newname = failpath .. SY_Basename(queue_files[idx].filename);

    -- falls die Zieldatei bereits existiert, dann wird sie entfernt.
    os.remove( newname );

    -- umbennen...
    if os.rename( queue_files[idx].filename, newname ) ~= nil then
        -- UPDATE ddqtab
        -- wir gehen wir davon aus, dass die Dateinamen ueber das ganze System
        -- hinweg eindeutig sind.
        local query = "UPDATE ddqtab SET ddqtab.dokupfad = '"..SQL_Escape( newname ).."' WHERE ddqtab.dokupfad = '"..SQL_Escape( queue_files[idx].filename ).."' AND (ddqtab.lfdnr = "..queue_info.lfdnr.." OR ddqtab.lfdnrdg = "..queue_info.lfdnr..")";
        local res = SQL_Exec( query );
        if res ~= 0 then
            SY_Msg( "Fehler beim UPDATE ddqtab: "..res );
        end
    else
        SY_Msg( "Fehler beim Verschieben der Datei '"..queue_files[idx].filename.."' nach '"..newname.."'" );
    end
end

return 0;

Beispiel für ein Post-Add-Skript:

-- Post-Add Script
-- wird nach dem (versuchten) Import ins DMS ausgeführt

-- wenn queue_info.status = 0,
-- dann wurde das Dokument erfolgreich ins DMS
-- eingefuegt.

-- Pfad wo fehlerhafte Dokumente hinverschoben werden sollen
local failpath = "d:\\temp\\scanimport-fehler\\";

SY_Msg( "queue_info.aufruf = " .. queue_info.aufruf );
SY_Msg( "queue_info.lfdnr = " .. queue_info.lfdnr );
SY_Msg( "queue_info.status = " .. queue_info.status );

SY_Msg( "queue_files length = " .. #queue_files );

for idx=1,#queue_files do
    SY_Msg( "queue_files["..idx.."].filename = " .. queue_files[idx].filename );

    if queue_info.status == 0 then
        SY_Msg( "Status = OK -- Datei wird geloescht." );
        os.remove( queue_files[idx].filename );
    else
        SY_Msg( "Status != OK -- Datei wird verschoben." );   

        local newname = failpath .. SY_Basename(queue_files[idx].filename);

        -- falls die Zieldatei bereits existiert, dann wird sie entfernt.
        os.remove( newname );

        -- umbennen...
        if os.rename( queue_files[idx].filename, newname ) ~= nil then
            -- UPDATE ddqtab
            -- wir gehen wir davon aus, dass die Dateinamen ueber das ganze System
            -- hinweg eindeutig sind.
            local query = "UPDATE ddqtab SET ddqtab.dokupfad = '"..SQL_Escape( newname ).."' WHERE ddqtab.dokupfad = '"..SQL_Escape( queue_files[idx].filename ).."' AND (ddqtab.lfdnr = "..queue_info.lfdnr.." OR ddqtab.lfdnrdg = "..queue_info.lfdnr..")";
            local res = SQL_Exec( query );
            if res ~= 0 then
                SY_Msg( "Fehler beim UPDATE ddqtab: "..res );
            end
        else
            SY_Msg( "Fehler beim Verschieben der Datei '"..queue_files[idx].filename.."' nach '"..newname.."'" );
        end
    end
end

return 0;