Sinn und zweck
Da Word immer mehr zum DMS (Document Management System) verkommt, kommt es immer wieder vor, dass man viele Word Dokumente hat, die Verlinkungen zu anderen Word Dokumenten, Intranet Links, oder sonstige Verknüpfungen haben.
Es mag sinnvoll sein (oder nicht) und es funktioniert auch einwandfrei, aber nur bis zu dem Punkt, an dem man die Dokumente verschieben muss. Hier bekommt der Administrator richtig spaß und darf (je nach Anzahl der Dokumente) einen auserwählten Mitarbeiter, oder sich selbst dran setzen und die Links korrigieren.
Je nach dem, wie intensiv Word dazu verbogen wird, ein vollständiges DMS zu ersetzen können einige Tage ins Land gehen bis alle Dokumente wieder aufgefunden und verknüpft sind.
Interessant wird die Sache dann, wenn sich nicht nur der Server ändert, auf dem die Dateien liegen und man alles mit absoluten Pfaden erstellt hat, sondern sich auch die Struktur der Dateiablage ändert.
Hier wird es dann problematisch in akzeptabler Zeit Dateien wieder zu finden und diese auch zu verknüpfen.
Das Problem ist also folgendes.
Man stelle sich ein Share vor, mit… sagen wir mal 5000 Dokumenten. 20 % davon enthalten Verlinkungen auf 50% der Gesamtdateien. D.h. Theoretisch dürfen wir 1000 Dokumente bearbeiten um 2500 Verlinkungen anzupassen.
Das schreit doch gerade zu nach einer Automatisierung, also ran an die Arbeit.
Wie könnte man die neue Verlinkungen machen?
Wie bereits erwähnt stehe ich vor dem Problem eine ungewisse Anzahl ( viele ) Word Dokumenten zu migrieren. Hierbei stellte sich tatsächlich die Schwierigkeit heraus, dass sich nicht nur der Ablageort änderte, sondern ich nicht wusste, wie die spätere Struktur aussieht. D.h. Dokumente, die vorher z.B. unterhalb von Ordner “Protokolle” lag konnten nun an einer ganz anderen Stelle im System liegen und nicht mehr im Unterorder “Dienstliches”.
Eine Zuordnung würde hier auf herkömmlichem Weg (lese die Verlinkungen aus und tausche nur den Servernamen) nicht ausreichen.
Hinzu kommt noch, dass Word in vielen Fällen den Pfad zu seiner verlinkten Datei relativ speichert, also ohne c:\xxx, oder \\server, sondern mit ../../anlage1.doc etc… Oft fällt es gar nicht auf, wenn man Dateien von einem Ort zum anderen umzieht, weil die relativen Pfade dafür sorgen, das alles funktioniert (so lange man… s.o.).
Die nächste Idee war, die verknüpfungen im Word Dokument auszulesen und anhand der Dateinamen die Verlinkung zu machen, aber jeder kennt es. Einmal nicht aufgepasst und schon gibt es Namenduplikate und die Dateien liegen kreuz und quer. Eine Suche ergibt dann, dass es 50 Dateien gibt, die alle “Protokoll_template.doc” heissen… Oder zumindest ähnlich.
Der nächste Schritt wäre, den kompletten Pfad zur verknüpften Datei zur Hand zu nehmen und diesen… Nein ist es leider auch nicht, weil ich ja nicht davon ausgehen kann, dass es am neuen Speicherort genau so aussieht. Wir brauchen einen eindeutigen Wert. Was könnte man dafür nehmen? Genau, ganz simple einen MD5 DateiHash über das Dokument selbst. Der sollte relativ eindeutig sein, solange man nicht Backup um Backup in Ordnern auf dem selben Pfad speichert :).
Der Vorteil der MD5 Dateihash Methode liegt auf der Hand.
Ich lese einmal alle Word Dokumente vom alten Speicherort ein und bekomme die Pfade, sowie den Unique Hash der Datei selbst. Dann fange ich an, die Dateien, die ich eben durchsucht habe auf den neuen Speicherort zu verschieben. Die Struktur, wo die Datei liegt kann schlussendlich ignoriert werden. Danach lesen wir den neuen Ablageort ein und erhalten wieder MD5 Dateihash Werte + den Pfad der Datei.
Nun können wir die Dokumente am neuen Ablageort bearbeiten. D.h. öffnen, alle Verknüpfungen ansehen, den Pfad auslesen, den zugehörigen Dateihash ansehen und den gleichen Dateihash von der neuen Umgebung ansehen um den neuen Ablageort zu bestimmen. Verknüpfungen ändern… erledigt.
Der Dateihash wird sozusagen nur als link zwischen den Pfaden vom alten Ablageort und dem neuen verwendet. Somit haben wir eine 1 zu 1 Zuordnung von [Alter Dateipfad] - [hash] - [Neuer Dateipfad] und wissen daher, wo die Datei nun liegt.
Natürlich gibt es noch etwas zu beachten.
Die Benutzer dürfen, nach dem man den Dateihash ausgelesen hat die Dokumente nicht mehr anfassen, da er sich sonst wieder ändert und man somit etliche Verknüpfungsleichen bekommt.
Um das nun alles zu automatisieren habe ich an einem Nachmittag ein kleines Programm geschrieben, mit dem man so etwas bewerkstelligen kann. Wir werden es demnächst bei uns Produktiv einsetzen und dann wird sich zeigen, wie gut, oder wie schlecht diese Methode funktioniert. Nach den ersten Testdurchläufen bin ich aber zuversichtlich, dass wir die Verlinkungen größtenteils korrigiert bekommen.
Hier mal ein paar Screenshots von dem Programm. Sobald es fertig ist, gibt es den Download hier.