Domino 9 und frühere Versionen > ND6: Entwicklung
Java-Agent aus LS starten – DocumentContext geht verloren
haeppchen:
Hallo zusammen,
ich habe folgendes Problem:
ich habe einen Java-Agenten, der im aktuell geöffneten Dokument einige Berechnungen anstellen soll; dabei initialisiere ich das aktuelle Dokument wie folgt:
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
Database db = agentContext.getCurrentDatabase();
Document doc = agentContext.getDocumentContext();
Eigenschaften des Agenten:
Options: Shared
Trigger: Agent List Selection
Runtime: None
Diesen Agenten rufe ich aus Lotus Script auf, dieses Script führt ebenfalls zunächst einige Berechnungen im aktuellen Dokument aus und ruft dann den Java-Agenten auf (siehe folgenden Code)
Dim ws As New NotesUIWorkspace
Dim session As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim agent As NotesAgent
Set uidoc = ws.CurrentDocument
Set doc = uidoc.Document
Set db = session.CurrentDatabase
Set agent = db.GetAgent("Mein Agent")
… einige Abfragen und Berechnungen
Call agent.Run
…
Call uidoc.Save
Call uidoc.Close
Beim Ausführen dieses Scriptes geht der DocumentContext verloren, mit dem ich das aktuelle Dokument aus dem Java-Agenten heraus initialisiere (siehe oben), ich erhalte daher eine NullPointer-Exception, weil die Variable doc nicht mehr auf das aktuelle Dokument zeigt.
Wer kann mir helfen?
Wie kann ich das aktuelle Dokument aus dem Java-Agenten heraus initialisieren, so dass beim Ausführen des Agenten aus LS der DocumentContext nicht verloren geht?
Vielen Dank im Voraus,
Gruß Simon
animate:
du kannst einem Agent einen Parameter mitgeben (die ID eines Dokuments). Wenn du im Script das Dokument ermittelst könntest du seine ID dem Java Agent übergeben und dort mit GetDocumentById das Dokument holen
haeppchen:
Hallo Thomas,
danke erstmal für deine Hilfe.
Ich habe jetzt versucht, deine Idee folgendermaßen umzusetzen:
In Lotus-Script übergebe ich die ID des aktuellen Dokumentes wie folgt:
Call agent.Run(doc.getNoteID())
Im Java-Agenten initialisiere ich das aktuelle Dokument momentan so:
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
Agent agent = agentContext.getCurrentAgent();
Database db = agentContext.getCurrentDatabase();
Document doc = db.getDocumentByID(agent.getParameterDocID());
Leider erhalte ich nun folgende Fehlermeldung, nachdem ich den Agenten aus LS wie oben beschrieben starte:
"Wrong number of array subscripts"
Aus der Notes-Hilfe werde ich auch nicht schlauer.
Wo liegt das Problem bzw. wer kann mir da weiterhelfen?
Gruß, simon
TMC:
--- Zitat von: haeppchen am 12.03.05 - 13:55:31 --- Call agent.Run(doc.getNoteID())
--- Ende Zitat ---
Überprüfe mal die Objekte, also auf
[*]agent Is Nothing
[*]doc Is Nothing[/list]
Weiter bietet die Run-Methode einen Rückgabewert, da solltest Du auf <> 0 prüfen.
Weiter wäre wichtig, *wo genau* dieser Fehler auftritt. Debugger oder ein entsprechendes ErrorHandling sollte da weiterhelfen.
animate:
--- Zitat von: haeppchen am 12.03.05 - 13:55:31 ---
In Lotus-Script übergebe ich die ID des aktuellen Dokumentes wie folgt:
Call agent.Run(doc.getNoteID())
--- Ende Zitat ---
Keine Ahnung, obs daran liegt, aber in LS heißt das so:
Call agent.Run(doc.NoteID)
also micht getNoteID() wie in Java
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln