| 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 |