Autor Thema: Java-Agent aus LS starten – DocumentContext geht verloren  (Gelesen 5988 mal)

Offline haeppchen

  • Junior Mitglied
  • **
  • Beiträge: 55
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

Offline animate

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.540
  • Uh, I'm just gonna go find a cash machine.
    • LA2
Re: Java-Agent aus LS starten – DocumentContext geht verloren
« Antwort #1 am: 12.03.05 - 12:28:41 »
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
Thomas

Fortunately, I'm adhering to a pretty strict, uh, drug, uh, regimen to keep my mind, you know, uh, limber.

Offline haeppchen

  • Junior Mitglied
  • **
  • Beiträge: 55
Re: Java-Agent aus LS starten – DocumentContext geht verloren
« Antwort #2 am: 12.03.05 - 13:55:31 »
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

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re: Java-Agent aus LS starten – DocumentContext geht verloren
« Antwort #3 am: 12.03.05 - 18:38:08 »
     Call agent.Run(doc.getNoteID())

Überprüfe mal die Objekte, also auf
  • agent Is Nothing
  • doc Is Nothing
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.
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline animate

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.540
  • Uh, I'm just gonna go find a cash machine.
    • LA2
Re: Java-Agent aus LS starten – DocumentContext geht verloren
« Antwort #4 am: 12.03.05 - 19:36:06 »


In Lotus-Script übergebe ich die ID des aktuellen Dokumentes wie folgt:

    Call agent.Run(doc.getNoteID())


Keine Ahnung, obs daran liegt, aber in LS heißt das so:

    Call agent.Run(doc.NoteID)

also micht getNoteID() wie in Java
Thomas

Fortunately, I'm adhering to a pretty strict, uh, drug, uh, regimen to keep my mind, you know, uh, limber.

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re: Java-Agent aus LS starten – DocumentContext geht verloren
« Antwort #5 am: 12.03.05 - 20:03:43 »
Hast Recht, Thomas, daran wird es wohl liegen, zumindest kennt die LotusScript-NotesDocument-Klasse keine Property "getNoteID()".
Ich hatte diesen Fehler 1:1 zitiert, aber völlig übersehen, danke für den Hinweis.

Das würde dann auch sinnigerweise diese Array-Fehlermeldung erklären in genau der Zeile (wegen der Klammern).
« Letzte Änderung: 12.03.05 - 20:07:15 von TMC »
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline haeppchen

  • Junior Mitglied
  • **
  • Beiträge: 55
Re: Java-Agent aus LS starten – DocumentContext geht verloren
« Antwort #6 am: 14.03.05 - 00:31:23 »
Danke erstmal für eure Hilfe,
ich habe den Agenten jetzt ans laufen bekommen (lag wirklich an dem fehlerhaften Methoden-Namen).


Jetzt hat sich leider ein neues (und hoffentlich auch letztes) Problem aufgetan:

- ich starte den Java-Agenten wie erwähnt aus Lotus Script
- bevor ich den Agenten starte, initialisiere ich das aktuelle Dokument und speichere es
  (eine Art Zwischenspeichern, um auf RichText-Felder zugreifen zu können) wie folgt:

   Dim ws As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Set uidoc = ws.CurrentDocument

   Call uidoc.Save

   ...einige Berechnungen auf/mit RT-Feldern
   

- danach erst starte ich den Java-Agenten ( mit Call agent.run(doc.NoteID) )
- der Agent stellt ebenfalls einige Berechnungen an und schreibt diese Ergebnisse in 
  verschiedene Text-Felder des Dokumentes
- wenn ich noch im Java-Agenten nach dem Füllen der Text-Felder den Befehl doc.Save() aufrufe, 
   erhalte ich einen Replikations-Konflikt, weil ich das aktuelle Dokument bereits in Lotus Script
   initialiert und gespeichert habe
- lasse ich im Java-Agent den Befehl doc.Save() weg, läuft der Agent ohne Probleme, aber
  nach Schließen (und vorherigem Speichern mit Call uidoc.Save) und Neu-Öffnen des Dokumentes
  sind die Felder, die der Agent gefüllt haben sollte, leer!!

Warum werden die Änderungen, die der Java-Agent im Dokument vornimmt, nicht gespeichert, obwohl ich vor dem Schließen des Dokuments in Lotus Script nochmal speichere (mit Call uidoc.Save)?
Ich hoffe, ich habe mein Problem deutlich genug ausgedrückt und ihr könnt mir helfen


Gruß, Simon

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Java-Agent aus LS starten – DocumentContext geht verloren
« Antwort #7 am: 14.03.05 - 00:50:47 »
Simon, ich weiss nun nicht genau, was Du da treibst, aber Du hast auf jeden Fall ein Verständnisproblem mit Back- und FrontEnd.

Beispiel:
- Du hast ein NotesUIDocument.
- Daran änderst Du etwas und speicherst das via FrontEnd.
- Wenn Du gleichzeitig (und vor allem :VORHER !) ein Backend-Dokument instantiiert hast, bekommt as davon absolut gar nichts mit.

Wenn wir helfen sollen: Löse bitte für uns argumentativ Dein Backend-/FrontEnd-Handling auf.

Bernhard

PS: Warum ist Dein betreffender Agent eigentlich in Java geschrieben ?

Offline haeppchen

  • Junior Mitglied
  • **
  • Beiträge: 55
Re: Java-Agent aus LS starten – DocumentContext geht verloren
« Antwort #8 am: 14.03.05 - 07:42:47 »
Hallo Bernhard,

der Unterschied zwischen Back- und Frontend ist mir sehr wohl geläufig.

Das Problem ist, dass ich mit Java, also auch mit dem Java-Agenten nur Backend-Operationen in Notes ausführen kann.

Ich speichere zunächst das Dokument via Frontend, weil ich den Inhalt einiger RichText-Items überprüfen muss (die mir durch mein Zwischen-Speichern dann zur Verfügung stehen).
Anschließend mache ich ein paar Abfragen und gebe Fehlermeldungen, wenn die RichText-Felder bspw. leer sind.

Ist dies nicht der Fall (keine Fehlermeldung), dann lasse ich den Java-Agenten ausführen.
Der kann ja wie gesagt nur Backend-Operationen.
Wie soll ich also das aktuelle Dokument in Java anders initialisieren als ich es bisher tue??

P.S.: Ich nutze Java u.a. deshalb, weil ich einige Strings des Dokumentes mit einem Tokenizer durchlaufen muss, so was gibts ja in Notes leider nicht.

Offline max.power

  • Senior Mitglied
  • ****
  • Beiträge: 314
  • Geschlecht: Männlich
Re: Java-Agent aus LS starten – DocumentContext geht verloren
« Antwort #9 am: 14.03.05 - 09:18:41 »
Hi Simon!

- bevor ich den Agenten starte, initialisiere ich das aktuelle Dokument und speichere es
  (eine Art Zwischenspeichern, um auf RichText-Felder zugreifen zu können) wie folgt:

   Dim ws As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Set uidoc = ws.CurrentDocument

   Call uidoc.Save

   ...einige Berechnungen auf/mit RT-Feldern

- danach erst starte ich den Java-Agenten ( mit Call agent.run(doc.NoteID) )

Diese Berechnungen auf/mit RT-Feldern im uidoc, also bevor du den Java-Agent startest, verändern doch das Dokument, oder? Somit müsste vor dem Aufruf des Agents nochmals ein uidoc.Save her....

Oder machst du das eh?

LG,
Max

Offline animate

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.540
  • Uh, I'm just gonna go find a cash machine.
    • LA2
Re: Java-Agent aus LS starten – DocumentContext geht verloren
« Antwort #10 am: 14.03.05 - 09:28:16 »
und zusätzlich muss vielleicht noch ein uidoc.Refresh(true) her

das erzwingt - glaube ich - dass die Änderungen (auch die in RT-Feldern. das macht der Parameter) ins Backenddokument aktualisiert werden.
Bin aber nicht sicher...
Thomas

Fortunately, I'm adhering to a pretty strict, uh, drug, uh, regimen to keep my mind, you know, uh, limber.

Offline umi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.062
  • Geschlecht: Männlich
  • one notes to rule'em all, one notes to find'em....
    • Belsoft AG
Re: Java-Agent aus LS starten – DocumentContext geht verloren
« Antwort #11 am: 14.03.05 - 10:02:43 »
Zitat
Warum werden die Änderungen, die der Java-Agent im Dokument vornimmt, nicht gespeichert, obwohl ich vor dem Schließen des Dokuments in Lotus Script nochmal speichere (mit Call uidoc.Save)?

Wie gesagt, Du veränderst mit Java das Backend Dokument, aber speicherst im Script nochmals das Frontend Dokument (uidoc.save!)
Eigentlich sollte nach dem JavaAgent nur das Backend gespeichert werden.

gruss umi
Gruss

Urs

<:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Jegliche Schreibfehler sind unpeabischigt
http://www.belsoft.ch
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~:>

Marinero Atlántico

  • Gast
Re: Java-Agent aus LS starten – DocumentContext geht verloren
« Antwort #12 am: 14.03.05 - 10:19:14 »
P.S.: Ich nutze Java u.a. deshalb, weil ich einige Strings des Dokumentes mit einem Tokenizer durchlaufen muss, so was gibts ja in Notes leider nicht.

... Tokenizer ist ein bekannter Performance-Hammer, für den man auch in Java oft einen Workaround verwendet...
gute Seite für solche Infos: http://www.javaperformancetuning.com/sitemap.shtml
Das OReilley Buch von denen gehört imho selbst zur spartanistischen Grundausstattung jedes halbwegs ernstzunehmenden Java Bücherregals.

Zeige uns wie du StringTokenizer in Java verwendest und wir zeigen dir wie du es in LotusScript und in Java schneller machen kannst  :)


Offline umi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.062
  • Geschlecht: Männlich
  • one notes to rule'em all, one notes to find'em....
    • Belsoft AG
Re: Java-Agent aus LS starten – DocumentContext geht verloren
« Antwort #13 am: 14.03.05 - 11:42:40 »
Was kann der "StringTokenizer" was "Split" nicht kann?
Gruss

Urs

<:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Jegliche Schreibfehler sind unpeabischigt
http://www.belsoft.ch
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~:>

Marinero Atlántico

  • Gast
Re: Java-Agent aus LS starten – DocumentContext geht verloren
« Antwort #14 am: 14.03.05 - 12:39:32 »
imho: nein

Offline haeppchen

  • Junior Mitglied
  • **
  • Beiträge: 55
Re: Java-Agent aus LS starten – DocumentContext geht verloren
« Antwort #15 am: 14.03.05 - 21:16:01 »
Hallo zusammen,

erstmal vielen Dank für eure zahlreiche Hilfe.
Ich konnte mein letztes Problem (Speichern via Backend aus Java-Agent) jetzt lösen,
ich rufe den Java-Agenten aus Lotus-Script jetzt NACH dem Speichern des aktuellen Dokumentes (dass ich über uidoc initialisiert habe), auf.
Also in folgender Reihenfolge:

   Dim ws As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Set uidoc = ws.CurrentDocument

   //Zwischenspeichern, um auf RT-Felder zugreifen zu können
   Call uidoc.Save

   ...einige Berechnungen auf/mit RT-Feldern

   Call uidoc.Save
   Call agent.run(doc.NoteID)



Gruß, Simon

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz