Ein Problem beim Dokumentenmanagement ist immer die Entscheidung ob die Dokumente in der Datenbank oder im Dateisystem gespeichert werden. Es gibt bei dieser Frage wie immer einige Pros und Cons.
Sowohl in unserem allgemeinen
DMS als auch im
CRM-Modul, der Dokumentenlenkung und im Laborprojektsystem speichern wir die Dokumente als Blobs innerhalb der Datenbank.
Der Grund dafür ist dass die Kontrolle über die Dokumente möglichst bei der Applikation bleiben soll, um die applikationsbasierten Zugriffsberechtigungen beizubehalten, ein Checkout/Checkin mit Versionierung auf der Datenbank zu führen und den Transport der Dokumente (Backup, Migration etc.) möglichst über Export- und Importfunktionen durchführen zu können. Weiterhin unterliegen die Dokumentdaten damit auch der Transaktionskontrolle der Datenbank. Wir können somit auch ohne zusätzliche Administration von Verzeichnissen verhindern dass Dokumente durch Löschen, Drag&Drop oder ähnlichem aus der Kontrolle der Applikation verschwinden, und Änderungen können sehr genau verfolgt werden.
Nachteilig ist dass der Checkout/Checkin-Mechanismus für den Anwender oft nicht transparent ist, denn er muss neben dem Speichern des Dokuments in der Applikation (Word, Excel, etc.) noch einmal explizit einen Checkin-Vorgang durchführen, oder die Applikation muss die Dateien ständig überwachen ob sie verändert wurden und automatisch übernommen werden können.
Wünschenswert wäre wenn sich die Dokumente wie über das normale Dateisystem ansprechen lassen und das Speichern des Dokuments (fast) direkt zum Update der Datenbank führt.
Wir haben uns dazu entschieden diesen Mechanismus mittels der Bibliothek
DOKAN zu realisieren.
Dokan bietet die Möglichkeit ein Filesystem ohne das Windows-Driver-Development-Kit im User-Space zur Verfügung zu stellen. Wir können unsere Dokumente über die Dokan-Biblitohek in einem virtuellen Dateisystem einbinden und über ein Laufwerk zur Verfügung stellen, mittles Windows-Share auch über einen UNC-Serverpfad.
Damit können wir Dokumente aus der Datenbank einfach per ShellExecute auf dem Share öffnen, und nach dem Schliessen durch einen Hintergrundprozess automatisch übernehmen lassen.
Diese Option haben wir in der Laborprojektverwaltung realisiert, die Freigabe ist für diese Woche oder in der nächsten Woche geplant.
Der Vorteil für den Anwender liegt darin dass er nur noch dafür sorgen muss die Datei in der Anwendung zu schliessen und vorher seine Änderungen zu speichern, ein explizites Checkin ist nicht mehr nötig.