Autor Thema: Komplette Ordnerstruktur in andere Mail-Datenbank kopieren?  (Gelesen 23306 mal)

Offline gstueb

  • Aktives Mitglied
  • ***
  • Beiträge: 125
  • Geschlecht: Männlich
  • God is real unless declared integer
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

Offline m3

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Komplette Ordnerstruktur in andere Mail-Datenbank kopieren?
« Antwort #1 am: 08.01.09 - 17:38:32 »
Außer händisch und/oder mit einem Agent fällt mir auch nix ein.
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline Heiggo

  • @Notes Preisträger
  • Senior Mitglied
  • ****
  • Beiträge: 368
  • Geschlecht: Männlich
  • Ich habe nix gemacht!
Re: Komplette Ordnerstruktur in andere Mail-Datenbank kopieren?
« Antwort #2 am: 08.01.09 - 20:47:09 »
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

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
« Letzte Änderung: 08.01.09 - 20:52:39 von heiggo »
(¯`·._ (¯`·._-=- ...und für Bernhard... nur OFw d.R. :-) -=-_.·´¯)_.·´¯)

Offline Jens_1

  • Senior Mitglied
  • ****
  • Beiträge: 440
  • Geschlecht: Männlich
Re: Komplette Ordnerstruktur in andere Mail-Datenbank kopieren?
« Antwort #3 am: 09.01.09 - 06:46:39 »
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
CLP Domino R5 System Administrator
CLP IBM Lotus Domino 6 System Administrator
CLP IBM Lotus Domino 7 System Administrator
IBM Certified System Administrator - Lotus Notes and Domino 8

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
Re: Komplette Ordnerstruktur in andere Mail-Datenbank kopieren?
« Antwort #4 am: 09.01.09 - 07:25:53 »
Nimm den "Mail Merger" von OpenNTF.org http://www.openntf.org/Projects/pmt.nsf/HomeLookup/B81E5D182CE4BE558625751F005FDC09?OpenDocument. Der funktioniert einwandfrei und ohne Programmierung.
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline meleg

  • Aktives Mitglied
  • ***
  • Beiträge: 104
  • I love YaBB 1G - SP1!
Re: Komplette Ordnerstruktur in andere Mail-Datenbank kopieren?
« Antwort #5 am: 13.01.09 - 15:38:45 »
@ Jens_1

Hallo,

bei uns sind die Archivierungseinstellungen vernagelt und ich kann es nicht testen. Ich arbeite im Support auf Level 2 Ebene, und solche Anfragen können jederzeit auch bei uns reinkommen, deswegen interessiert es mich.

Nur zur vergewisserung: Das Zurücksetzen des Archivierungsflags, macht man das in der Ziedatenbank (dem Archiv) oder in der Quelldatenbank?

Danke

meleg

Offline Jens_1

  • Senior Mitglied
  • ****
  • Beiträge: 440
  • Geschlecht: Männlich
Re: Komplette Ordnerstruktur in andere Mail-Datenbank kopieren?
« Antwort #6 am: 14.01.09 - 06:51:07 »
Guten Morgen!

Das Zurücksetzen des Archivflags machst Du in der Zieldatenbank. In dieser wird es vom Agenten gesetzt.
Unabhängig davon ist das aber imho ein Fall für den dritten wenn Du als 2nd. nicht an die entsprechenden Einstellungen rankommst. Denn dann mit einem Script anzufangen kann auch zu Problemen führen wenn die Berechtigungen usw. nicht hin hauen und das ganze eventuell noch nicht mal legitimiert ist...  :-\

Gruß
Jens
CLP Domino R5 System Administrator
CLP IBM Lotus Domino 6 System Administrator
CLP IBM Lotus Domino 7 System Administrator
IBM Certified System Administrator - Lotus Notes and Domino 8

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz