Domino 9 und frühere Versionen > ND7: Administration & Userprobleme
Komplette Ordnerstruktur in andere Mail-Datenbank kopieren?
gstueb:
Hallo,
einer unserer Mitarbeiter hat über Jahre eingehende Mails in einer aufwendigen Ordnerstruktur gespeichert. Dieser Mitarbeiter verlässt demnächst das Unternehmen. Die komplette Ordnerstruktur (mehrere hundert Ordner) und natürlich auch die darin enthaltenen Dokumente sollen nun in die Mail-Datenbank eines Kollegen übertragen werden.
Geht das irgendwie, ohne dass ich das pro Ordner von Hand machen muss?
Ich habe auch angeboten, die ursprüngliche Mail-DB einfach zu kopieren und dann alles außer dieser Ordnerstuktur zu löschen - und dem neuen Mitarbeiter darauf dann Zugriff zu geben. Es ist aber ausdrücklich gewünscht, die Ordnerstruktur in die andere (bestehende) Mail-DB zu bringen. Die bestehende Mail-DB ist auch schon "relativ gewachsen", sonst könnte ich ja einfach umgekehrt vorgehen...
Any Ideas?
Wir haben hier derzeit noch eine Domino 7.x Umgebung.
Danke & Gruß,
Gregor
m3:
Außer händisch und/oder mit einem Agent fällt mir auch nix ein.
Heiggo:
Da gab es vor Jahren mal einen Beitrag zu der Thematik. War noch zu R5-Zeiten. Der daraus resultierende Agent rettete mich damals bei der Migration von R4 auf R5 einige Male.
--- Code: ---Sub Initialize
'Datenübernahme aus einer bestehenden Datenbank in eine neu angelegte Datenbank
'Autor: Heiko 1 Siebert/WBV SÜD/TerrWV/BMVg/DE
'Stand: 18.08.2004
Dim s As New NotesSession
Dim w As New NotesUIWorkspace
Dim destDb As New NotesDatabase("","")
Dim sourceDb As New NotesDatabase("","")
Dim AllDocs As NotesDocumentCollection
Dim AllDocsView As NotesView
Dim sourceDoc As NotesDocument
Dim destDoc As NotesDocument
Dim tempDoc As NotesDocument
Dim docCount As Variant
Dim current As Variant
Dim choices (0 To 2) As Variant
choices(0) = "Diese Datenbank"
choices(1) = "Lokale Databank"
choices(2) = "Datenbank auf einem Server"
' Quelldatenbank
sourceDbType = w.Prompt(PROMPT_OKCANCELLIST, "Wählen Sie den Datenbankort", _
"Wählen Sie den Datenbankort, von dem aus Sie Dokumente kopieren wollen:", _
choices(2), choices)
If sourceDbType = "" Then
Messagebox "Aktion wurde vom Benutzer abgebrochen"
Exit Sub
End If
If sourceDbType = choices(0) Then
Set sourceDb = s.CurrentDatabase
Else
If sourceDbType = choices(1) Then
sourceDbServer = ""
sourceDbNameReturn = w.OpenFileDialog(False, _
"Wählen Sie die Datenbank aus der Sie kopieren wollen:", "*.nsf", _
s.GetEnvironmentString("Directory", True))
If Isempty(sourceDbNameReturn) Then 'Wenn Nutzer auf ESC oder Abbrechen drückt
Msgbox("Abbruch: Ohne Angabe des Dateinamen kann die Aktion nicht durchgeführt werden!")
Exit Sub
End If
sourceDbName=SourceDbNameReturn(0)
Else
sourceDbServer = Inputbox("Geben Sie den Namen des Domino-Servers an")
sourceDbName = Inputbox("Geben Sie Pfad und Dateinamen der Datenbank (relativ zum DATA des Servers)")
If sourceDbName = "" Then
Msgbox("Abbruch: Ohne Angabe des Dateinamen kann die Aktion nicht durchgeführt werden!")
Exit Sub
End If
End If
If Not (sourceDb.Open(sourceDbServer, sourceDbName)) Then
Msgbox("Ich kann die angegebene Datei nicht finden oder öffnen: " + sourceDbName)
Exit Sub
End If
End If
' Zieldatenbank
destDbType = w.Prompt(PROMPT_OKCANCELLIST, "Ziel-Datenbank", _
"Wählen Sie den Ort der Datenbank, in die die Dokumente und Ordner hineinkopiert werden sollen", _
choices(2), choices)
If destDbType = "" Then
Messagebox "Abbruch durch Benutzer"
Exit Sub
End If
If destDbType = choices(0) Then
Set destDb = s.CurrentDatabase
Else
If destDbType = choices(1) Then
destDbServer = ""
destDbNameReturn = w.OpenFileDialog(False, _
"Bitte wählen Sie die Datenbank, aus der die Dokumente kopiert werden sollen:", "*.nsf", _
s.GetEnvironmentString("Directory", True))
If Isempty(destDbNameReturn) Then 'Wenn Nutzer auf ESC oder Abbrechen drückt
Msgbox("Abbruch: Ohne Angabe des Dateinamen kann die Aktion nicht durchgeführt werden!")
Exit Sub
End If
destDbName=destDbNameReturn(0)
Else
destDbServer = Inputbox("Geben Sie den Namen des DOMINO-Servers an")
destDbName = Inputbox("Wählen Sie den Ort der Datenbank, in die die Dokumente und Ordner hineinkopiert werden sollen")
If destDbName = "" Then
Msgbox("Abbruch: Ohne Angabe des Dateinamen kann die Aktion nicht durchgeführt werden!")
Exit Sub
End If
End If
If Not (destDb.Open(destDbServer,destDbName)) Then
Msgbox("Ich kann die angegebene Datenbank nicht finden oder öffnen: " + destDbName)
Exit Sub
End If
End If
If destdb.server=sourcedb.server And destdb.filename=sourcedb.filename And destdb.filepath=sourcedb.filepath Then
Msgbox("Quell- und Zieldatenbank sind zu unterschiedlich")
Exit Sub
End If
' Dokumenten-Collection in Quelldatenbank (nach Selektion) aufbauen
' anhand der Ansicht ($All)
AllDocsSelect = "@IsNotMember(""A""; ExcludeFromView) & IsMailStationery != 1" + _
"& Form != ""Group"" & Form != ""Person"""
Set AllDocs = sourceDb.Search(AllDocsSelect, Nothing, 0)
' Anzeige des Fortschritts der Aktionen, sofern möglich
docCount = AllDocs.Count
current = 0
Print Cstr(Round(current / docCount * 100, 0)) + "% copied"
' Alle Ordner, die in der Zieldatenbank nicht vorhanden sind werden durchgegangen (auch Systemordner) sofern nicht $Inbox
Forall folder In sourceDb.Views
If folder.IsFolder And (Instr(1, folder.Name, "(", 0)<>1 Or folder.Name="($Inbox)") Then
' Sicherstellung, das auch leere Ordner übernommen werden
' um die Struktur so zu belassen, wie diese vorher war
Set destFolder = destDb.GetView(folder.Name)
If destFolder Is Nothing Then
Set sourceFolder = sourceDb.GetDocumentByUNID(folder.UniversalID)
Call sourceFolder.CopyToDatabase(destDb)
Set destFolder = destDb.GetView(folder.Name)
If destFolder Is Nothing Then
Msgbox("Ich kann in der neuen Datenbank keine Ordner erstellen!")
Exit Sub
End If
End If
' Durchgang aller Dokumente im jeweiligen Ordner
Set sourceDoc = folder.GetFirstDocument
While Not (sourceDoc Is Nothing)
Set destDoc = sourceDoc.CopyToDatabase(destDb)
' Kopieren der Dokumente eines Ordners in die Zieldatenbank in den gleichnamigen Ordner
Call destDoc.PutInFolder(folder.Name, True)
' Entfernen des bearbeiteten Dokuments aus der aufgebauten Collection der Ansicht ($All) in der Datenbank
Set tempDoc = AllDocs.GetDocument(sourceDoc)
Set sourceDoc = folder.GetNextDocument(tempDoc)
Call AllDocs.DeleteDocument(tempDoc) 'remove from collection
' Anzeige des Fortschritts der Aktion, sofern möglich
current = current + 1
Print Cstr(Round(current / docCount * 100, 0)) + "% kopiert"
Wend
End If
End Forall
' Kopieren der Dokumente, die in keinem Ordner vorhanden sind in die Zieldatenbank
Set sourceDoc = AllDocs.GetFirstDocument
While Not (sourceDoc Is Nothing)
Call sourceDoc.CopyToDatabase(destDb)
' Anzeige des Fortschritts der Aktion, sofern möglich
current = current + 1
Print Cstr(Round(current / docCount * 100, 0)) + "% kopiert"
Set sourceDoc = AllDocs.GetNextDocument(sourceDoc)
Wend
'That´s all :-)
Msgbox("Dokumente und Ordner wurden kopiert. Schliessen Sie die neue Datenbank (falls diese geöffnet ist) und öffnen Sie diese wieder!")
End Sub
--- Ende Code ---
Ich baumel die Datenbank mit dem Agent mal hier ran. Hab's eben mal mit meinem Client (R7.0.2) gecheckt. Scheint auch heute noch zu funktionieren :-)
Gruß aus Stuaget
Heiggo
Jens_1:
Moin!
Nimm doch einfach und simpel den Archivierungsagenten und archiviere alle Dokumente in die Datenbank des Kollegen.
Anschließend das Archivflag wieder wegnehmen (Button mit der Formel: @SetProfileField("Archive Database Profile"; "ArchiveDatabase"; "") erstellen) und fertig.
Hab ich auch schon ganz oft gemacht und funktioniert ganz wunderbar :D
Hth!
Gruß
Jens
eknori:
Nimm den "Mail Merger" von OpenNTF.org http://www.openntf.org/Projects/pmt.nsf/HomeLookup/B81E5D182CE4BE558625751F005FDC09?OpenDocument. Der funktioniert einwandfrei und ohne Programmierung.
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln