Das Notes Forum

Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: oxyd21 am 11.01.07 - 16:31:43

Titel: Emails verschieben
Beitrag von: oxyd21 am 11.01.07 - 16:31:43
Servus,

ich muss Emails aus einer Maildatenbank in einer andere verschieben. Es müssen alle Daten erhalten bleiben. Jetzt hab ich mal ein kleines Skript geschrieben, jedoch taucht die Mail in der Ziel-DB nicht auf. Vielleicht fällt ja jemanden der Fehler auf und könnt mir weiterhelfen.

Code
Sub Initialize
	
	Dim session As New NotesSession
	Dim allsrcdoc As NotesDocumentCollection
	Dim tgtdbname As String
	Dim srcdb, tgtdb As NotesDatabase
	Dim srcdoc As NotesDocument
	
	Set srcdb = session.CurrentDatabase
	Set allsrcdoc = srcdb.UnprocessedDocuments
	If allsrcdoc.Count < 1 Then
		Messagebox "No document selected.", 16, "Information"
		Exit Sub
	End If
	
	tgtdbname ="testdb.nsf"
	Set tgtdb = New NotesDatabase("",tgtdbname)
	If tgtdb.IsOpen = False Then
		Messagebox "Target Database not found", 16, "Information"
		Exit Sub
	End If
	
	Set srcdoc = allsrcdoc.GetFirstDocument
	While Not (srcdoc Is Nothing)
		Dim newdoc As NotesDocument
		Set newdoc = New NotesDocument (tgtdb)
		Call srcdoc.copyallitems(newdoc,True)
		newdoc.save True, True, True
		Set srcdoc = allsrcdoc.GetNextDocument(srcdoc)
	Wend
	
End Sub

gruss
Michael
Titel: Re: Emails verschieben
Beitrag von: Driri am 11.01.07 - 17:09:49
1) srcdb ist nicht sauber deklariert.

Korrekt wäre : Dim srcdb As NotesDatabase, tgtdb As NotesDatabase

Das dürfte aber nicht die Ursache sein, ist mehr ein Schönheitsfehler.


2) Müssen wirklich sämtliche Details erhalten bleiben ? Weil ansonsten wäre ein srcdoc.CopyToDatabase(tgtdb) einfacher.


3) Das Save ist IMO falsch.

Korrekt wäre : Call newdoc.Save(True, True, True)


4) Was sagt der Debugger ?
Titel: Re: Emails verschieben
Beitrag von: Tode am 11.01.07 - 17:49:15
der code ist komplett korrekt, die von Driri genanntne "fehler" sind keine, sondern nur "Unsauberkeiten".

Wenn ein Dokument, das Du erstellst, in der Ziel- Datenbank nicht auftaucht, kann das zwei theoretische Ursachen haben:

1. Das Dokument wird gar nicht erst erstellt
2. Das Dokument wird erstellt, Du hast aber nach dem speichern (wegen Leserfeldern) keinen Zugriff mehr darauf.

Lösung:

1. Wenn das Dokument gar nicht erstellt wird, kann das (IMHO) bei Deinem Code nur deshalb passieren, weil srcdoc ein  Feld Namens "SaveOptions" hat, das "0" als Wert hat

2. Prüfe mal srcdoc auf Leser- Felder... hast Du eventuell in der Ziel- Datenbank eine Rolle / eine Berechtigung nicht ?

HTH
Tode
Titel: Re: Emails verschieben
Beitrag von: Driri am 12.01.07 - 08:52:43
Ok, die Syntax für Save war mir nicht geläufig. Wieder was gelernt.
Titel: Re: Emails verschieben
Beitrag von: koehlerbv am 12.01.07 - 09:36:59
1. Wenn das Dokument gar nicht erstellt wird, kann das (IMHO) bei Deinem Code nur deshalb passieren, weil srcdoc ein  Feld Namens "SaveOptions" hat, das "0" als Wert hat

SaveOptions spielt in diesem Zusammenhang doch keine Rolle - es passiert ja alles im Backend, und da ist SaveOptions ohne Bedeutung.

Berechtigung: Da es sich hier um ein Mailfile handelt ... Eher unwahrscheinlich.

Und was heisst "Mail taucht in de Ziel-DB gar nicht auf"? Erhöht sich die Dokumentanzahl, aber das Dokument ist in einer bestimmten Ansicht nicht sichtbar? Wird eventuell gar im Ordner Inbox nachgeschaut? Da kann es natürlich nicht auftauchen bei dem Code.

Bernhard
Titel: Re: Emails verschieben
Beitrag von: oxyd21 am 12.01.07 - 11:39:17
Danke für die Antworten. Bin heut unterwegs und kann es jetzt nicht ausprobieren. Die Dokumentenanzahl sollte erhöht werden, da ich kurz zuvor das getnextdocument vergessen hatte und ich deshalb einige :o Dokumente erstellt hatte.
Sie sollten eigentlich auch nicht in der Inbox auftauchen sondern in einem Folder. Jedoch soll der Vorgang aus einer Inbox heraus angestossen werden. 
Titel: Re: Emails verschieben
Beitrag von: koehlerbv am 12.01.07 - 11:50:19
Wenn Du die kopierten Dokumente in einem Folder sehen willst, musst Du sie da aber auch explizit hintun. Deinem Code fehlt das.

Wegen "die Dokumentenanzahl sollte erhöht werden ...": Das ist uns allen schon klar - deswegen erstellst Du ja in der Ziel-DB auch neue Dokumente. Die Frage ist: Erhöht sich nach Deiner Aktion die Anzahl oder nicht?

Bernhard
Titel: Re: Emails verschieben
Beitrag von: oxyd21 am 15.01.07 - 09:38:36
Ja, die Anzahl erhöht sich. Den Code habe ich auch angepasst, dass das Dokument in den Folder geschoben wird. Geht dies mit dem PutInFolder so?

Code
	While Not (srcdoc Is Nothing)
		Dim newdoc As NotesDocument
		Set newdoc = New NotesDocument (tgtdb)
		Call srcdoc.copyallitems(newdoc,True)
		Call newdoc.PutInFolder("CRM\Inbound Mail")
		Call newdoc.Save(True, True, True)
		Set srcdoc = allsrcdoc.GetNextDocument(srcdoc)
	Wend
Titel: Re: Emails verschieben
Beitrag von: Axel am 15.01.07 - 09:49:00
Ich hatte mal ein ähnliches Problem. Bei mit lags damals an dem $Ref-Feld. Schau mal in den Dokument-Eigenschaften ob die Mails, die du verschiebst ein solches Feld haben.

Axel
Titel: Re: Emails verschieben
Beitrag von: oxyd21 am 15.01.07 - 10:38:39
Problem gelöst; mit nem 2. Save funktioniert es.