Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: masher am 14.12.10 - 13:07:52

Titel: Notes Mail (mit Java) aus gespeicherter Datenbank öffnen
Beitrag von: masher am 14.12.10 - 13:07:52
Hallo zusammen,

bei uns werden Notes-Mails einzeln in einer Notes-Datenbank archiviert. Nun möchte ich die abgelegten Datenbanken nicht einzeln öffnen (dieses Vorgehen erzeugt für jede Mail eine Kachel im Workspace), sondern über ein anderes Vorgehen (welches mir leider noch nicht ganz klar ist) dem Benutzer anzeigen lassen. Dies soll (wenn möglich?) alles ohne Agenten mittels Java umgesetzt werden. Die zu öffnende Mail befindet sich zu dem Zeitpunkt nicht in einem Postfach des Benutzers.

Und zwar soll es neben den diversen Datenbanken mit jeweils einem Mail-Dokument darin eine zentrale Datenbank geben, in die die zu öffnende Mail bzw. das jeweilige Dokument kopiert wird. Über diese zentrale Datenbank soll nun das Dokument angezeigt werden. Das Holen des Dokuments und umkopieren in die zentrale Mail-Datenbank funktioniert meines Erachtens. Die Frage ist nun, wie ich das Dokument (wie gesagt mittels Java) nun in Notes angezeigt bekomme?! Was muss jeweils gesetzt werden (Form, View, Dokumententyp, ...)?

Vielen Dank im Voraus!
Titel: Re: Notes Mail (mit Java) aus gespeicherter Datenbank öffnen
Beitrag von: m3 am 14.12.10 - 13:44:34
Wo soll "das Java" drinnen sein? In einem Agenten?

Um ein Dokument aus einer Notes-Dantenbank zu lesen, muss diese mal geöffnet werden. Ev. funktioniert das ohne Kachel anlegen, indem Du das Dokument zuerst aus der zentralen Datenbank temporör in eine lokale kopierst und von dort dann öffnest - dann hast Du nur von der lokalen DB eine Kachel am Workspace.

Titel: Re: Notes Mail (mit Java) aus gespeicherter Datenbank öffnen
Beitrag von: masher am 14.12.10 - 14:01:01
Wo soll "das Java" drinnen sein? In einem Agenten?
Das Ganze läuft in einer eigenen Java-Anwendung (weder LotusScript-, noch Java-Agent), die im Prinzip nichts mit Notes zu tun hat... Durch ein Event wird das Öffnen der Mail ausgelöst.

Wie gesagt, öffnen und lesen der Datenbank mit dem einen Dokument funktioniert. Auch das Umkopieren der Mail in die zentrale Mail-Datenbank (unabhängig von den durch Notes angelegten Mail-Datenbanken) zum Öffnen scheint zu klappen. Lediglich der Befehl zum Öffnen des Dokuments zur Anzeige im Notes-Client fehlt mir. So wie ich das sehe (berichtigt mich), läuft das über "NotesUIWorkspace.Editdocument(...)"?!
Titel: Re: Notes Mail (mit Java) aus gespeicherter Datenbank öffnen
Beitrag von: m3 am 14.12.10 - 14:19:51
Habe ich es doch vermutet :D

MIt Java hast Du - wie mit COM - nur Zugriff auf die so genannten Backend-Klassen von Notes, nicht auf de Frontend-Klassen (also alles mit NotesUI* am Anfang). Das sieht man auch schön in der Notes Designer-Hilfe, wo bei den NotesUI Klassen die Java-Klassen nicht aufgeführt sind, bei den Backend-Klassen jedoch schon.

Einfachste Methode wäre, wenn Du einen notes:// Link (Details in der Designer-Hilfe oder hier im Forum) zusammenbaust und anzeigst. Durch einen Klick darauf geht das Dokument dann im Notes-Client auf - allerdings mit Anlegen der entsprechenden DB-Kachel am Workspace (das ist halt so).

Titel: Re: Notes Mail (mit Java) aus gespeicherter Datenbank öffnen
Beitrag von: masher am 14.12.10 - 16:16:08
Kacheln will ich ja gerade nicht haben... Wenn der Link auf die zentrale Mail-DB zeigt, funktioniert das ja auch. Aber wie kann ich den Link programmatisch ausführen?

Ach ja, und wie schaffe ich es nun die Mail programmatisch anzuzeigen. Darum geht es mir ja eigentlich. Muss ich dafür einen Agenten verwenden oder hab ich noch andere Möglichkeiten?

Vielen Dank schon mal für die bisherigen Antworten!
Titel: Re: Notes Mail (mit Java) aus gespeicherter Datenbank öffnen
Beitrag von: Ralf_M_Petter am 14.12.10 - 16:22:32
M3 hat dir doch die Lösung schon gesagt, du musst einen Link mit "notes://..." aufbauen und dann diesen einfach aufrufen. Wenn dein Notes richtig installiert ist, wird es die URL öffnen und die Mail anzeigen. Funktioniert bei mir einwandfrei. Wo hast du noch Probleme, bzw. Poste einfach mal deinen Code in dem du das Mail öffnest dann kann man sicher besser helfen.

Grüße

Ralf
Titel: Re: Notes Mail (mit Java) aus gespeicherter Datenbank öffnen
Beitrag von: masher am 15.12.10 - 09:40:04
Jetzt hab ich mir so einen Notes-Link zusammengebastelt.... bei der Ausführung wird jedoch nicht die Mail-Ansicht (die ja das Doc ist) geöffnet, sondern das gesamte Postfach. Und dabei wird auch die geöffnete Mail nicht angezeigt. Stimmt da jetzt was mit der Form oder sonstigen Einstellungen an der Datenbank nicht?
Titel: Re: Notes Mail (mit Java) aus gespeicherter Datenbank öffnen
Beitrag von: Ralf_M_Petter am 15.12.10 - 10:03:24
Wie wäre es wenn du mal die Notes URL postest.

Grüße

Ralf
Titel: Re: Notes Mail (mit Java) aus gespeicherter Datenbank öffnen
Beitrag von: masher am 15.12.10 - 11:17:15
Wenn die URL hilft, gerne:
Code
notes:///MailContainer.nsf/0/C12577F5003BE607C12577E500404908?OpenDocument

Hier der Quelltext, mit dem ich versuche das Ganze umzusetzen:
Code
			NotesThread.sinitThread();
			Session nSessLocal = NotesFactory.createSessionWithFullAccess();

			// Load database with mail which should be displayed
			Database currentMailDb = nSessLocal.getDatabase(null, unzippedMailPath, false);
			if (!currentMailDb.isOpen()) {
				currentMailDb.open();
			}
			Document mailDoc = currentMailDb.getAllDocuments().getLastDocument();
			mailDoc.replaceItemValue("LotusNotesForm", "Memo");
			mailDoc.save();
			
			// Get database where the document should be copied in
			Database showMailDb = nSessLocal.getDatabase(null, "C:\\temp\\MailContainer.nsf", true);
			if (!showMailDb.isOpen()) {
				showMailDb.open();
	        }
			// delete all previous inserted documents
			showMailDb.getAllDocuments().removeAll(true);

			mailDoc.copyToDatabase(showMailDb);
			
			String urlstring = "notes://" + showMailDb.getServer() + "/" + showMailDb.getFileName() +"/0/" + mailDoc.getUniversalID()+"?OpenDocument";
			URL url = new URL(urlstring);
			Desktop.browse(url);
			
			NotesThread.stermThread();
Titel: Re: Notes Mail (mit Java) aus gespeicherter Datenbank öffnen
Beitrag von: Ralf_M_Petter am 15.12.10 - 11:33:46
Ich denke mal dein Notesurl ist falsch. Du musst dir das auch gar nicht selber zusammenbauen.

ein Einfaches mailDoc.getNotesURL() sollte dir das richtige URL geben.


Wobei meiner Meinung nach hast du auch noch einen Fehler bei der mailDoc.copyToDabase(showMailDb)

Die Zeile sollte eigentlich
mailDoc=maiDoc.copyToDatabase(showMailDb); lauten.

Sonst hast du in mailDoc noch immer dein nicht kopiertes Mail. Das wird ziemlich sicher der Grund sein, warum es nicht funktioniert. Übrigens hoffe ich mal, dass du den Code nicht wirklich so laufen lässt. Den ohne Errorhandling und zuverlässigen Abschluss des NotesThread wird dein Client sicher ab und zu abstürzen.

Grüße

Ralf



Titel: Re: Notes Mail (mit Java) aus gespeicherter Datenbank öffnen
Beitrag von: masher am 15.12.10 - 11:43:28
Vielen Dank für die Antwort!

Aber egal wie ich es mache, das Verhalten ist das Gleiche. Anstatt das Mail-Dokument zu öffnen wird nur das Mail-Postfach geöffnet. Gibt es irgendwelche Voraussetzungen, die der MailContainer (showMailDb) hinsichtlich Views oder Launch-Einstellungen zu erfüllen hat? Oder woran könnte es sonst liegen? Sollte ich vielleicht doch einen Agenten nutzen?

Exception-Handling is da. Dargestellt sind ja nur die prägnanten Stellen.
Titel: Re: Notes Mail (mit Java) aus gespeicherter Datenbank öffnen
Beitrag von: Ralf_M_Petter am 15.12.10 - 11:51:45
Kannst du nochmal den aktuellen Code posten. Es muss noch irgendwo ein anderer Fehler sein.

Grüße

Ralf
Titel: Re: Notes Mail (mit Java) aus gespeicherter Datenbank öffnen
Beitrag von: masher am 15.12.10 - 12:01:38
Klar, aber es hat sich nicht viel geändert:

Code
			NotesThread.sinitThread();
			Session nSessLocal = NotesFactory.createSessionWithFullAccess();

			// Load database with mail which should be displayed
			Database currentMailDb = nSessLocal.getDatabase(null, unzippedMailPath, false);
			if (!currentMailDb.isOpen()) {
				currentMailDb.open();
			}
			Document mailDoc = currentMailDb.getAllDocuments().getLastDocument();
			mailDoc.replaceItemValue("LotusNotesForm", "Memo");
			mailDoc.save();
			
			// Get database where the document should be copied in
			Database showMailDb = nSessLocal.getDatabase(null, "C:\\temp\\MailContainer.nsf", true);
			if (!showMailDb.isOpen()) {
				showMailDb.open();
	        }
			// delete all previous inserted documents
			showMailDb.getAllDocuments().removeAll(true);

			mailDoc = mailDoc.copyToDatabase(showMailDb);
			
			URL url = new URL(mailDoc.getNotesURL());
			Desktop.browse(url);
			
			NotesThread.stermThread();

Die Notes URL sieht jetzt wie folgt aus: notes:///__C125768200274FA8.nsf/0/C125768200274FA8C12577E500404908?OpenDocument

Ach ja, das Ganze läuft ohne Exception durch...
Titel: Re: Notes Mail (mit Java) aus gespeicherter Datenbank öffnen
Beitrag von: m3 am 15.12.10 - 12:36:51
Die MailContainer.nsf hat im Design eine Default-View?

Ich würde nicht maildoc nochmal verwenden, sondern eine neue Document Instanz dafür verwenden - just to be sure.

removeAll würde ich mir - vom Performancestandpunkt her - nochmal überlegen.

Leg die showMailDB mal
a) ins NotesDatenverzeichnis (also relativ addressiert)
b) auf den Server
und schau, ob der Link dann funktioniert.

Ev. Solltest Du auch vor dem Desktop.browse(url) der DB noch sagen, dass sie iher Views, ... aktualisieren soll. Ev. findet er das frisch erstellte Dokument nicht (wenn es eine Default View gibt).