Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: manuel am 16.09.02 - 13:09:09
-
Hallo!
Ich habe ein Java-Applet in eine Notes-Datenbank eingebunden. Nun möchte ich, dass bei einem Doppelklick ein neues Dokument mit einer bestimmten Maske erstellt wird, also so etwas wie @Command([Compose]).
Das mit mit dem Doppelklick funktioniert wunderbar, ich bräuchte nur noch diese bestimmte Funktion, um ein neues Dokument zu erstellen. Es wäre auch sehr hilfreich zu wissen, welche Klassen ich in die Applet-Klasse einbinden muss, damit ich diese Funktion verwenden kann.
Schönen Gruß
Manuel
-
Hallo Manuel,
warum rufst Du nicht per versteckter Schaltfläche mit @Command([ToolsRunMakro],...) und "return _doClick('DieseNummerFindetSichImQuellCode')" oder per URL-Kommando einen Agenten auf, erstellst Dein Dokument und schickst es zum Browser?
Gruss
Markus
-
Hallo Markus!
Danke für deine Antwort, aber ... ???
Meine Datenbank befindet sich nicht im Web. Ist 'ne ganz normale Notes-DB. Und wie kann ich eine versteckte Schaltfläche durch das Java-Applet aufrufen? Geht das überhaupt? Ich kenne mich leider damit zu wenig aus.
Habe mittlerweile eine Möglichkeit gefunden, ein neues Dokument zu erstellen. Der Funktionssyntax lautet
public Document createDocument() throws NotesException
Im Code sieht das dann folgendermaßen aus:
doc = dbNotes.createDocument() ;
Die Maske, mit der das Dokument erstellt wird, kann so festgelegt werden:
doc.replaceItemValue("Form","Mask1" ) ;
Dieser Prozess läuft jedoch im Hintergrund, ohne das der User etwas mitbekommt. Ich bräuchte jetzt nur noch eine Funktion, die es ermöglicht, diese gerade eben erstellte Maske dem User anzuzeigen. Jemand eine Idee?
lg
Manuel
-
Hallo Manuel,
entschuldige, ich hatte Dich etwas missverstanden. Mit welchem Befehl Du aus dem Java-Code, dass Dokument ins Frontend bringen kannst, weiss ich ehrlich gesagt nicht. Wühl Dich mal durch die Hilfe, da existiert bestimmt etwas. Ansonsten kannst Du über die Run-Methode, auch einen Agenten aufrufen, der dies für Dich erledigt. Dies ist aber wahrscheinlich die umständlichere Variante ...
Gruss
Markus
-
Hallo nochmal
Hab jetzt wieder mal an diesem Problem gebastelt und eine ganz annehmbare Lösung gefunden. Hier ist der Code, wie ich es nun anstelle. Die wichtigen Zeilen habe ich fett markiert.
Mit createDocument() wird also ein neues Dokument erstellt (analog zur Script-Methode). Als nächstes wird die Maske 'MReservation' zugeweisen und die Methode computeWithForm() ausgeführt.
Die Zeile mit der save-Methode lassen wir mal ausser acht.
Anschließend wird die URL des Dokuments ausgelesen und mittels showDocument(docURL) wird das Dokument geöffnet.
Applet applet;
Session session = null;
Database dbNotes;
Document doc;
applet = opt.getApplet();
try {
NotesThread.sinitThread();
session = NotesFactory.createSession() ;
dbNotes = session.getDatabase(applet.getParameter("Server"),
applet.getParameter("Database")) ;
// neues Dokument
doc = dbNotes.createDocument();
// Maske
doc.replaceItemValue("Form","MReservation" ) ;
// ... hier werden noch weitere Felder befüllt ...
boolean computed = doc.computeWithForm(true, false);
boolean saved = doc.save();
// URL des Dokuments
URL docURL = null ;
try {
docURL = new URL(doc.getURL()) ;
}
catch( Exception ex ) {}
// Dokument öffnen
applet.getAppletContext().showDocument(docURL);
}
catch(Exception e1) {
e1.printStackTrace();
}
finally
{
NotesThread.stermThread();
}
Wenn das Dokument vor dem Öffnen nicht gespeichert wurde erscheint die Fehlermeldung "Das in der Verknüpfung angegebene Dokument wurde in der verknüpften Datenbank nicht gefunden." Wenn ich es hingegen speichere funktioniert alles wunderbar und das Dokument wird geöffnet, ohne weitere Probleme. Nur ist es eben ziemlich lästig wenn das Dokument bereits vorher gespeichert wird. Wenn sich nun der User entscheidet doch keine Änderungen am Dokument vorzunehmen und es sozusagen brach liegen lässt dann gibt es "Dokument-Leichen" in der Datenbank. Diese müssten dann zB mit einem Agenten gelöscht werden. Meine Frage lautet also: Muss ich denn das neue Dokument wirklich vorher speichern, bevor es geöffnet wird? Gibt es denn keine andere Lösung(en)?
Es ist natürlich keine allzugroße Tragik wenn ich einen Agenten laufen lasse, der mir alle "Leichen" aus der Datenbank löscht. Nur vielleicht geht's auch anders?
Schöne Grüße
Manuel