Autor Thema: Probleme mit Java Agent in Notes  (Gelesen 4773 mal)

Offline sschroeder

  • Frischling
  • *
  • Beiträge: 8
  • Geschlecht: Männlich
Probleme mit Java Agent in Notes
« am: 02.07.04 - 08:50:41 »
Hallo!

Ich bin das erste mal im Forum und arbeite auch erst seit kurzem mit Notes. Mein Aufgabe ist es eine Datenbank webfähig zu machen. Dazu schreibe ich Agenten von LotusScript in Java um und Domino Server 5 und Domino Designer 6 sind im Einsatz. Ich habe einen einfachen Java-Agenten geschrieben, der lediglich in dem aktuell aufgerufenen Dokument einen Wert in ein Feld eintragen soll. Sowie abspeichern und im aktuellen Dokument die Änderung auch anzeigen soll. Der Agent wird ausgeführt über eine Schaltfläche mit der Formel:

@Command([ToolsRunMacro]; "(Test)")

Das Problem ist, wenn ich die Datenbank im InternetExplorer aufrufe und auf die Schaltfläche klicke funktioiert der Agent einwandfrei, aber wenn ich die Datenbank in Notes öffne zeigt er die Änderung im Feld nicht an. Er wird aber gestartet!
Code des Agenten:

import lotus.domino.*;

public class JavaAgent extends AgentBase {

   public void NotesMain() {

     try {
         
         Session s = getSession();
         AgentContext agentContext = s.getAgentContext();
         Document docA= agentContext.getDocumentContext();
         // aktuell bearbeitetes Dokument holen
         
        docA.save();
        //aktuelle Änderungen des Benutzers speichern   
        String jahr = "2004";
       // Variable die Text zum Ändern des Feldes enthält
         
       docA.replaceItemValue("Nummer", jahr);
       // bei Dokument in Feld Nummer Variable Jahr einfügen
       docA.save();      
     
       // Zur Fehlerüberprüfung Ausgaben in der Java-Konsole
       System.out.println("Inhalt Variable: "+jahr);
       System.out.println("Inhalt Feld Nummer des Dokumentes: "
       +docA.getItemValueString("Nummer"));
                          
       
       } catch(Exception e) {
       e.printStackTrace();
       }
    }
}

Wenn ich mir den Inhalt des Feldes "Nummer" in der Java Konsole zum Schluß des Agenten ausgeben lasse (einfach nur zur Fehlerüberprüfung), zeigt er seltsamerweise korrekt den Wert an den ich mit der Variable dort rein eingefügt habe! Das heißt der Agent wird korrekt ausgeführt und der eingefügte Text befindet sich auch in dem Feld, doch ich bekomme es nicht angezeigt!
Ich habe mittlerweile alles versucht und komme nicht mehr weiter, ich hoffe mir kann jemand helfen. Übrigens ein refresh des aktuellen Dokumentes würde glaube ich auch nicht helfen, denn wenn ich den Agenten ausführe und drücke danach selbst F9 zum aktualisieren, funktioniert es auch nicht!

Danke schon im voraus!

Offline qojote

  • Aktives Mitglied
  • ***
  • Beiträge: 229
  • I love YaBB 1G - SP1!
Re:Probleme mit Java Agent in Notes
« Antwort #1 am: 02.07.04 - 08:59:57 »
Hi
Schau dir mal in der Hilfe in script die Frontend und Backend Klassen an.
Mit dem Java Agent schreibst du den Wert ins backend also nicht sichtbar im Frontend.
Bei den Java Klassen gibt es nur Methoden fürs Backend.

Gibt es Gründe das du das in Java machen mußt?
In Lotus script kannst du das frontend refreshen.

Gruß
Qojote

Offline sschroeder

  • Frischling
  • *
  • Beiträge: 8
  • Geschlecht: Männlich
Re:Probleme mit Java Agent in Notes
« Antwort #2 am: 02.07.04 - 09:14:23 »
Danke dir erstmal für dein Interesse.
Ich soll halt die bestandene Datenbank, die mit Agenten in LotusScript geschriebenist, webfähig machen. Da man LotusScript Agenten im InternetExplorer nicht aufrufen kann bzw. sie von dort aus nicht funktionieren soll ich nun die LotusScript Agenten in Java umschreiben.
Ich weiß das man mit Java nur die Backendklassen bearbeiten kann (nur LotusScript fällt ja wegen dem oben genannten raus) aber ich komme ja durch den Aufruf agentContext.getDocumentContext auch an das aktuelle bearbeitete Dokument dran (also im Frontend). Und das komisch ist ja, finde ich, das der Agent im Web richtig funktioniert und das Ergebnis auch anzeigt (das heißt ja es geht eigentlich, oder?) nur im Notes Client nicht richtig.
Oder gibt es andere Möglichkeiten wie ich eine Notes Datenbank webfähig mache?

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:Probleme mit Java Agent in Notes
« Antwort #3 am: 02.07.04 - 09:29:06 »
Da man LotusScript Agenten im InternetExplorer nicht aufrufen kann bzw. sie von dort aus nicht funktionieren

wer sagt denn sowas? Das ist eine Ente.
Agents können nicht vom Browser ausgeführt werden, aber aufrufen kannst du sie.
Thomas

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

Offline sschroeder

  • Frischling
  • *
  • Beiträge: 8
  • Geschlecht: Männlich
Re:Probleme mit Java Agent in Notes
« Antwort #4 am: 02.07.04 - 09:42:17 »
@Thomas Völk

Also heißt das, ich brauche nicht alle Agenten in Java umschreiben, sondern kann die bestehenden LotusScript-Agenten auch im Web nutzen?? Wie geht das, oder was muß ich dazu tun? Damit würde mir eine Menge Arbeit erspart bleiben! Ich muß einen Java bzw. dann einen LotusScript Agenten über eine Schaltfläche aufrufen können. Der Agent ändert den Inhalt eines Feldes des aktuellen Dokumentes und das ganze muß bei dem Aufruf der Datenbank in einem InternetExplorer funktionieren.
Wenn ich den schon vorhandenen Agenten der in LotusScript geschrieben wurde, wie oben beschrieben aufrufe, also die Datenbank über den InternetExplorer öffne und über einen Klick auf die Schaltfläche den Agenten anstoße zeigt er mir jedesmal: "Die Seite kann nicht angezeigt werden".

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:Probleme mit Java Agent in Notes
« Antwort #5 am: 02.07.04 - 09:55:17 »
welche Sprache du nimmst, ist egal.
du musst nur beachten, dass weder Java Code noch LotusScript Code vom Browser verarbeitet werden können.

Feldwerte kannst du ggf. sogar mit Javascript im Browser ändern

document.forms[ 0 ].Feldname.value = "Feldwert";

Ein Agent kann nur auf dem Server ausgeführt werden. D. h. du musst mit dem Button, den du brauchst, das Dokument an den Server schicken (FileSave), dort den Feldwert  ändern und dann das Dokument wieder zum Browser schicken.

Das gleiche müsstest du machen, wenn du Java-Agents verwendest.
« Letzte Änderung: 02.07.04 - 10:47:00 von Thomas Völk »
Thomas

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

Marinero Atlántico

  • Gast
Re:Probleme mit Java Agent in Notes
« Antwort #6 am: 02.07.04 - 10:09:51 »
Http funktioniert über ein simples statusloses request, response Protokoll zwischen einem client (oft ein Webbrowser) und einem Server (z.B. Domino).
Die Anwendungslogik liegt meist auf dem Server.
Der Client (oft Browser) hält nur das User Interface (View).
Und ein bischen unterstützende Interaktionslogik (JavaScript, DHTML, Applet--> besser nicht).
In Domino wird die Anwendungslogik oft in Form von Agenten realisiert.
Die laufen nur, immer und ewig in der Runtime des Servers, egal in welcher Programmiersprache die jetzt zufällig entwickelt ist.

Jetzt keine Zeit. Aber es gibt auf den Iris-Seiten Beispiele wie man Web-Anwendungen mit Domino entwickelt.

Ich empfehle in deinen Fall Projektmentoring.

peace Axel

Offline sschroeder

  • Frischling
  • *
  • Beiträge: 8
  • Geschlecht: Männlich
Re:Probleme mit Java Agent in Notes
« Antwort #7 am: 02.07.04 - 10:11:41 »
@ Thomas Völk

Ich erwähne glaube ich noch das ich Berufsakademie mache zum Dipl. Wirtschaftinformatiker und mich noch im Studium befinde und in Sachen Notes erst angefangen habe.

Also wenn ich das richtig verstanden habe, muß ich in der "Click" Aktion des Buttons mit Formelsprache erst das aktuelle Dokument speichern (FileSave) um es ins Backend zu legen, dann kann ich das Dokument aus der Datenbank mit meinem Agenten bearbeiten (also Agent ausführen mit ToolsRunMacro) und dann das Dokument wieder zum Browser schicken. Und das weiß ich leider noch net wie ich das machen soll.

Code in der Click-Aktion des Buttons:
@Command([FileSave]);
@Command([ToolsRunMacro]; "(Test)");
und dann zurückschicken???????

Aber wird nicht egal was ich dort hineinschreibe der Aufruf ToolsRunMacro als letztes aufgeführt?

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:Probleme mit Java Agent in Notes
« Antwort #8 am: 02.07.04 - 10:47:34 »
hab im Moment auch wenig Zeit.
ich schreibe heute abend, falls du bis dahin nix gefunden hast.
Thomas

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

Offline sschroeder

  • Frischling
  • *
  • Beiträge: 8
  • Geschlecht: Männlich
Re:Probleme mit Java Agent in Notes
« Antwort #9 am: 02.07.04 - 11:05:56 »
Danke dir schonmal im voraus, schaue dann auch nochmal heut Abend rein.

Wenn aber der Browser kein LotusScript verarbeiten kann, heißt das doch ich darf in meinen LotusScript Agenten auch keine Frontend-Klassen bearbeiten darf.
Ich erspare mir viel Arbeit wenn ich die LotusScript Agenten weiterhin benutzen kann.

Allerdings die anderen Lösungswege, dass ein Browser kein LotusScript-Code und Java-Code usw. verarbeiten kann usw. ist ja bei meinem Java-Agenten nicht gegeben, denn die Datenbank mit dem Agenten funktioniert ja einwandfrei in dem Browser aber in Notes macht sie Probleme! Und das ich die Daten in der Backend ändere und nicht im Frontend arbeite, dürfte eigentlich auch kein Problem sein, da er es im Internet ohne Probleme im Frontend anzeigt!

Ich hoffe mir kann noch jemand helfen, aber schon mal danke für eure Bemühungen bis hier hin!

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:Probleme mit Java Agent in Notes
« Antwort #10 am: 02.07.04 - 20:02:25 »
Also wenn ich das richtig verstanden habe, muß ich in der "Click" Aktion des Buttons mit Formelsprache erst das aktuelle Dokument speichern (FileSave) um es ins Backend zu legen, dann kann ich das Dokument aus der Datenbank mit meinem Agenten bearbeiten (also Agent ausführen mit ToolsRunMacro) und dann das Dokument wieder zum Browser schicken. Und das weiß ich leider noch net wie ich das machen soll.

Code in der Click-Aktion des Buttons:
@Command([FileSave]);
@Command([ToolsRunMacro]; "(Test)");
und dann zurückschicken???????

Aber wird nicht egal was ich dort hineinschreibe der Aufruf ToolsRunMacro als letztes aufgeführt?


das "zurückschicken" musst du im Agent selbst machen.

Dim URL as String
URL = "PfadZurDB/0/" & doc.UniversalID & "?OpenDocument"
Print "<script>"
Print {location.href='} & URL & {'}
Print "<script>"

wobei doc hier das NotesDocument-Objekt ist, das du bearbeitest.
dazu muss der Browser JavaScript ausführen dürfen.

Wenn aber der Browser kein LotusScript verarbeiten kann, heißt das doch ich darf in meinen LotusScript Agenten auch keine Frontend-Klassen bearbeiten darf.
Du darfst in Agents, die auf dem Server laufen, keine Frontend-Klassen nutzen.
Das ist korrekt.

Allerdings die anderen Lösungswege, dass ein Browser kein LotusScript-Code und Java-Code usw. verarbeiten kann usw. ist ja bei meinem Java-Agenten nicht gegeben, denn die Datenbank mit dem Agenten funktioniert ja einwandfrei in dem Browser aber in Notes macht sie Probleme! Und das ich die Daten in der Backend ändere und nicht im Frontend arbeite, dürfte eigentlich auch kein Problem sein, da er es im Internet ohne Probleme im Frontend anzeigt!

Das verstehe ich leider nicht. Du musst eine Datenbank webfähig machen und die funktioniert schon im Web, macht aber in Notes Probleme?
 ???
Thomas

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

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
Thomas

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

Offline sschroeder

  • Frischling
  • *
  • Beiträge: 8
  • Geschlecht: Männlich
Re:Probleme mit Java Agent in Notes
« Antwort #12 am: 05.07.04 - 11:11:51 »
@Thomas Völk

Sorry, hatte am Wochenende keine Zeit´um ins Forum zu schauen. Also danke für Deine Antwort, ich werde das mit dem LotusScript (zurückschicken an den Browser) mal ausprobieren und die Artikel durchlesen. Ich habe nur leider im Moment erstmal etwas anderes zu tun, was kurzfristig dazwischen gekommen ist. Wenn ich es ausprobiert habe melde ich mich nochmal.

Zitat
Das verstehe ich leider nicht. Du musst eine Datenbank webfähig machen und die funktioniert schon im Web, macht aber in Notes Probleme?

Genau so ist es! Es handelt sich um den Agenten den ich oben als erstes beschrieben habe (mit Quellcode). Ich habe den Agenten von LotusScript in Java umgeschrieben und wenn ich nun die Datenbank über den InternetExplorer aufrufe und den Agenten über die Schaltfäche anstoße funktioniert er einwandfrei (also ist sie webfähig und funktioniert), jedoch wenn ich die Datenbank in Notes aufrufe liefert der Agent wie oben beschrieben nichts zurück. Allerdings soll die Datenbank aber nicht nur webfähig sein, sondern soll auch weiterhin über den Client ausrufbar sein. Was sagst du dazu?

Marinero Atlántico

  • Gast
Re:Probleme mit Java Agent in Notes
« Antwort #13 am: 05.07.04 - 12:05:50 »
Du kannst auch 2 Agenten (1 für Notes, 1 fürs Web) drinlassen.
Und diese über 2 verschiedene Buttons ansprechen, die jeweils für Web bzw. Notes verborgen werden (Hide When Formeln).
Die doppelte Entwicklung ist bei Agenten allerdings nicht zwingend notwendig.

Kennst du die Java Debug Konsole (unter Menü Datei/Extras)? Bekommst du da irgendwelche Meldungen, wenn du den Agenten aus notes heraus startest.

Gruß Axel

Offline sschroeder

  • Frischling
  • *
  • Beiträge: 8
  • Geschlecht: Männlich
Re:Probleme mit Java Agent in Notes
« Antwort #14 am: 05.07.04 - 13:14:02 »
@ Marinero Atlántico

Die Java Debug Konsole kenne ich. Ich habe im ersten Post geschrieben was dort passiert:

Zitat
Wenn ich mir den Inhalt des Feldes "Nummer" in der Java Konsole zum Schluß des Agenten ausgeben lasse (einfach nur zur Fehlerüberprüfung), zeigt er seltsamerweise korrekt den Wert an den ich mit der Variable dort rein eingefügt habe! Das heißt der Agent wird korrekt ausgeführt und der eingefügte Text befindet sich auch in dem Feld, doch ich bekomme es nicht angezeigt!

Was könnte es denn sein?

Die Version mit den zwei Agenten habe ich auch schon überlegt, allerdings ist die von höherer Stelle ausgechlossen worde, weil dadurch zu viel Agenten entstehen und damit verbundener Pflege.

Marinero Atlántico

  • Gast
Re:Probleme mit Java Agent in Notes
« Antwort #15 am: 05.07.04 - 14:29:14 »
Wenn ich mir den Inhalt des Feldes "Nummer" in der Java Konsole zum Schluß des Agenten ausgeben lasse (einfach nur zur Fehlerüberprüfung), zeigt er seltsamerweise korrekt den Wert an den ich mit der Variable dort rein eingefügt habe! Das heißt der Agent wird korrekt ausgeführt und der eingefügte Text befindet sich auch in dem Feld, doch ich bekomme es nicht angezeigt!


Was könnte es denn sein?
Das Dokument wird im Frontend nicht refresht. Geht auch mit Java nicht, weil es keine Frontend-Klassen gibt. Web- und NotesClient erfordern hier eine unterschiedliche Art der Programmierung.
Die Version mit den zwei Agenten habe ich auch schon überlegt, allerdings ist die von höherer Stelle ausgechlossen worde, weil dadurch zu viel Agenten entstehen und damit verbundener Pflege.
Ich würde eine neue Verhandlungsrunde einläuten.
Du kannst z.b. Namenskonventionen einhalten. Wenn du jeden Webagenten mit einem web-präfix benennst wird es nicht unübersichtlicher.
Oft werden Programme gerade dadurch schwer zu pflegen, dass Leute einer Komponente zu viele Aufgaben geben (low cohesion).
Für Notes-Client und Web wird in der Praxis sehr, sehr oft doppelt programmiert UND ZWAR AUS GUTEN GRÜNDEN.

s. z.B. dieser Kommentar zu diesem blog-Eintrag:
Zitat
When I "learned" about using separate forms for the web and notes client, the bells went off, there was world peace and I could once again sleep at night.
5. Kommentar von
http://www.benpoole.com/weblog/200406292209#PostComments

Das Request-Response Schema von Web-Anwendungen ist im Verhalten anders als das Verhalten einer Client-Server Anwendung (mit caches und "alles-auf-einmal"-Synchronisierung zwischen client und server-state).
Iris hat zwar mal was anderes behauptet. Aber das stimmt nicht.
In Javaland gibt es mit JSF (mehr kommerziell) und Tapestry (open Source) Versuche, Frameworks/Werkzeuge/etc. bereitzustellen, die die Webanwendungsentwicklung aus dem Request-Response Schema befreit, so dass es sich ähnlich wie (einfachere) Client Server Entwicklung anfühlt. Es gibt dazu aber einiges an Beschwerden.
Nur Microsoft ist dies wohl mit ASP.NET recht gut gelungen. Aber da kenne ich mich nicht so aus.  

Was ich sagen wollte: Es ist völlig normal, dass du 2 Komponenten hast, die die selbe Anfrage
- im Notes-Client
- im Web entgegennimmt.

Gruß Axel
(s.
« Letzte Änderung: 05.07.04 - 18:04:28 von Marinero Atlántico »

Offline sschroeder

  • Frischling
  • *
  • Beiträge: 8
  • Geschlecht: Männlich
Re:Probleme mit Java Agent in Notes
« Antwort #16 am: 06.07.04 - 08:13:57 »
@ Marinero Atlántico

Danke dir für die Antwort , dass hat mir Gewissheit gebracht. Aber eine Frage zur Sicherheit habe ich nochmal. Zitat aus meinem ersten Post zum Thema refresh in Notes:

Zitat
Übrigens ein refresh des aktuellen Dokumentes würde, glaube ich, auch nicht helfen, denn wenn ich den Agenten ausführe und drücke danach selbst in Notes F9 zum aktualisieren, funktioniert es auch nicht!

Also hat das auch nichts zu sagen, wenn man einen manuellen refresh mit F9 durchführt?

Ansonsten hat deine Aussagen mehr oder weniger auch die obere Stelle davon überzeugt, dass es nun mal so ist! Und man überlegt deswegen einen anderen Weg einzuschlagen wie z.B. über Domino WebAccess (ehem. iNotes). Aber davon weiß ich noch nicht mehr (bzw. ich weiß nicht ob ich mich darüber dann auch kümmern soll)! Oder den Weg LotusScript für Web und Notes gleichzeitig zu behalten, durch den Tip den mir Thomas Völk gegeben hat! Den Tip muß ich allerdings erst noch ausprobieren (hab nur im Moment noch eine Menge anderer Sachen zu tun).

Gruß sschroeder

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz