Beiträge von Inskin

    Hallo,


    ich weiß nicht wirklich, ob das hier rein passt, aber ich hab auch keine andere bessere Kategorie gefunden!
    Also mein Ziel ist es mal irgendwann ein Webportal zu programmieren in dem die einzelnen Portlets Zugriff auf eine oder mehrere Notes-DB haben!
    Kann mir jemand gute Quellen (Internet, Bücher,...) nennen, die mir einen Einstieg in die Domino JSP custom tag libraries geben und weiterführend dann in Webportale? Oder ist von den Domino JSP custom tag libraries abzuraten und besser die Domino Java API zu nutzen? Implementierungsbeispiele wären für mich zum Bsp sehr interessant!
    Hat hier jemand schon Erfahrung mit der Programmierung von Webportalen gemacht? Ist es empfehlenswert das WebSphere Portal zu nehmen oder hat jemand bessere Vorschläge?
    Schreibt einfach mal alles was euch so zu diesem Thema einfällt. Ich bin für jeden Tipp/jede Anmerkung sehr dankbar!!!

    Hallo,


    wie kann ich denn einen Java Agenten im catch Block beenden?


    System.exit(1) funktioniert leider nicht, weil diese Funktion wiederum eine Exception wirft!


    Habe bis jetzt nur die Lösung gefunden, dass ich die Exceptions bis in die NotesMain() mit throw Exception("...") durchreiche, was ich aber eigentlich sehr unschön finde!


    MfG

    Ich glaube im Moment reden wir etwas aneinander voebei!


    Es ging darum, dass ich meinen Agenten mit der Formelsprache starten soll.
    Als Einwand hatte ich, dass dieser dann aber nicht auf dem Server ausgeführt werden kann.
    Darauf hast du gesagt, dass alle Webagenten auf dem Server ausgeführt werden.
    Aber ich will ja auch, dass meine Anwendung in Notes funktioniert und da kann ich dann den Agenten nicht über Formelsprache starten.


    Hoffe jetzt sind alle Unklarheiten beseitigt!

    OK, dann werde ich es mal im WebQuerySave probieren, aber die Applikation soll ja später auch unter Notes funktionieren. Kann ich dort dann nicht über den QuerySave gehen?
    Ich hatte dort ja schon eine Lösung, aber die war sehr unschön, weil ich ein Dokument schließen und gleich wieder öffnen musste.

    Das ist aber aus oben genanntem Grund nicht möglich.


    Ich muss den Java Agenten auf dem Server ausführen, weil nur dort die benötigten .jar Dateien zur Verfügung stehen!
    Hierfür verwende ich ja agent.RunOnServer und sowas gibt es ja nicht in der Formelsprache.

    Mir ist nochwas eingefallen, warum ich keine Formelsprache verwenden kann, und zwar soll der Agent auf einem Server ausgeführt werden und für RunOnServer gibt es meines Wissens kein Befehl in der Formelsprache, oder???


    Kann mir hier noch jemand weiterhelfen?

    Sorry, habe was falsches geschrieben, ich habe versucht den Java Agenten aus dem QuerySave zu starten aber das funktioniert nur, wenn ich die ID übergebe.


    Mein Versuch mit getDocumentContext():


    JavaAgent:


    ...
    Session session = getSession();
    AgentContext agentContext = session.getAgentContext();
    docContext = agentContext.getDocumentContext();
    System.out.println(docContext);
    ...


    QuerySave:


    ...
    Set agent = db.GetAgent("(JCoAgent)")
    Call agent.Run
    ...


    In der Java Konsole bekomme ich aber leider null ausgegeben!
    Das mit DocumentContext funktioniert wohl nur wenn ich den Agenten direkt über den Button aus der Maske starte.

    Hab jetzt mal im QuerySave unter Notes experimentiert, bin aber leider nicht wirklich zu einem Erfolg gekommen.
    Wenn der Benutzer Felder ändert und dann den Button betätigt wird diesmal nur ein FileSave ausgeführt!
    Im QuerySave rufe ich dann meinen JavaAgenten auf und übergebe diesem die id des Dokuments um darauf zugreifen zu können.
    Der JavaAgent holt sich das Dokument über die id, aber er bekommt dann nicht die Werte, die geändert wurden, sondern die alten Werte, die beim Öffnen in dem Dokument stehen. Das liegt wohl daran, dass das QuerySave ja vor dem Speichern ausgeführt wird.
    Über das CurrentDocument komme ich im JavaAgenten nicht an das Dokument, weil dieser Agent ja aus einem Agenten gestartet wird!


    Gibt es eine Möglichkeit dem JavaAgenten die geänderten Werte verfügbar zu machen?

    taurec


    Habe es mit @PostedCommand versucht, funktioniert leider auch nicht.
    In der Hilfe habe ich folgendes gefunden:


    Execution of an @Command function occurs in the order it appears with some exceptions. The exceptions execute in @PostedCommand order, that is, at the end of the formula. The exceptions are: [FileCloseWindow], [FileDatabaseDelete], [FileExit], [NavigateNext], [NavigateNextMain], [NavigateNextSelected], [NavigateNextUnread], [NavigatePrev], [NavigatePrevMain], [NavigatePrevSelected], [NavigatePrevUnread], [NavigateToBackLink], [ToolsRunBackgroundMacro], [ToolsRunMacro], [ViewChange], [ViewSwitchForm].


    Das heißt also @Command([ToolsRunMacro],"Agent") wird auch als @PostedCommand ausgeführt, oder?
    Würde die Frage offen bleiben, in welcher Reihenfolge die @PostedCommand ausgeführt werden.


    Ronka


    Der Webagent speichert das Dokument ja eigentlich auch indirekt im Backend und zwar durch den JavaAgenten, der am Ende ausgeführt wird. Im Frontend kann ich es aber leider unter LS im Web nicht speichern, oder?
    Lasse ich den 2. Savebefehl weg, kommt es wie oben beschrieben zu dem Replizierkonflikt!

    Das Problem scheint doch etwas größer zu sein.


    Also ich habe jetzt folgendes:


    Der Button in der Maske:


    @Command([FileSave]);
    @Command([ToolsRunMacro];"(WebAgent)");
    @Command([FileSave])


    Der WebAgent:


    Sub Initialize
    Dim s As New notessession
    Dim db As notesdatabase
    Dim doc As notesdocument
    Dim id As String
    Dim agent As notesAgent
    Set db = s.CurrentDatabase
    Set doc = s.DocumentContext
    Set agent = db.GetAgent("(JCoAgent)")
    id = doc.NoteID
    Set doc = Nothing
    Call agent.RunOnServer(id)
    End Sub


    Der JCoAgent ändert das Feld "output_document_id" im Backend!!!


    Im WebQuerySave starte ich folgenden Agenten:


    Sub Initialize
    Dim s As New notessession
    Dim db As notesdatabase
    Dim doc1 As notesdocument
    Dim doc2 As notesdocument
    Dim outputdoc As String
    Dim url As String
    Set db = s.CurrentDatabase
    Set doc1 = s.DocumentContext
    Set doc2 = db.GetDocumentByUNID( doc1.GetItemValue("id")(0) )
    Print doc2.output_document_id(0)
    End Sub


    Beispielszenario:


    Ich öffne ein Dokument
    im Feld "output_document_id" steht ein "X"
    ich drücke den Button
    der Java Agent ändert das Feld in "123" (die Änderungen sind bei den Eigenschaften des Dokumnets zu sehen!!!)
    Über den WebQuerySave Agenten folgt die Ausgabe "X" und nicht "123"


    Kann mir jemand sagen warum???

    Hallo,


    ich habe eine Webapplikation mit einer Maske und einem Button.
    Der Button speichert das Dokument und führt danach einen Agenten aus, der ein Feld in der Maske ändert, das Dokument im Backend speichert und über den Printbefehl eine neue Seite anzeigt.


    Wenn ich den Button drücke funktioniert auch alles wunderbar!
    Wenn ich aber dann über den zurück Button im Browser das Dokument erneut anzeigen lasse und dann den Button in der Maske drücke wird ein Konfliktdokument angelegt.
    Das hängt damit zusammen, dass ich das Dokument nach dem Ausführen des Agenten nicht erneut speichere.
    Aber, wenn ich das Dokument speichere wird ein Submit ausgelöst und die Seite in dem Feld $$Return aufgerufen und nicht die Seite, die im Agenten über den Printbefehl aufgerufen wird.
    Kann die Folgeseite aber leider nicht im $$Return Feld berechnen, weil ich hierfür Zugriff auf das Feld brauche, das vom Agenten im Backend geändert wurde.


    Kann mir da jemand Helfen?
    Bin für jeden Tipp dankbar!

    OK, es hat sich erledigt!!!


    Habe mir den Thread nochmal durchgelesen und ich hätte mir die ganze Mühe ersparen können! Ich war am Anfang schon ganz nah an der Lösung dran (siehe Post: Veröffentlicht am: 12.07.2004 15:45).
    Ich war so blöd und bin über "Set doc = s.DocumentContext" wieder an das Dokument gegangen. Habe diese Zeile jetzt ersetzt durch: "Set doc = db.GetDocumentByID( id )" und siehe da es funktioniert!!!!


    Trotzdem vielen Dank für deine Hife!!!

    Hab es jetzt im WebQuerySave versucht, funktioniert aber leider auch nicht.


    So nochmal ein ausführlicher Zwischenstand. Ich benötige im Moment 2 Buttons!


    1. Button:


    @Command([FileSave]);
    @Command([ToolsRunMacro];"(WebAgent)");
    @Command([FileSave]);
    @Command([FileCloseWindow])


    Der WebAgent macht folgendes:


    Sub Initialize
    Dim s As New notessession
    Dim db As notesdatabase
    Dim doc As notesdocument
    Dim id As String
    Dim url As String
    Dim agent As notesAgent
    Set db = s.CurrentDatabase
    Set doc = s.DocumentContext
    Set agent = db.GetAgent("(JCoAgent)")
    id = doc.NoteID
    Call agent.RunOnServer(id)
    End Sub


    Durch das FileSave und FileCloseWindow wird ein Submit ausgelöst und über das $$Return Feld wird das Dokument wieder geöffnet.


    Jetzt wird der 2. Button gedrückt:


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



    openPage Agent:


    Dim s As New notessession
    Dim db As notesdatabase
    Dim doc As notesdocument
    Dim outputdoc As String
    Dim url As String
    Set db = s.CurrentDatabase
    Set doc = s.DocumentContext
    outputdoc = doc.GetItemValue("output_document_id")(0)
    Set doc = db.GetDocumentByUNID( outputdoc )
    url = doc.GetItemValue("url")(0)
    Print "["+url+"]"
    End Sub


    So funktioniert es, aber wenn ich den openPage Agent direkt aus dem WebAgent starte funktioniert es nicht, weil das Submit wohl erst ganz am Ende ausgeführt wird und somit die URL sofort wieder überschreibt.
    Hast hier jemand ne Idee, wie ich das mit einem Button schaffe?

    Ja, aber das macht doch keinen Unterschied!
    Der User drückt auf den Button, das Dokument wird gespeichert und dann wird der Agent z.B. im WebQuerySave ausgeführt. Hatte das vorige Speichern noch nicht berücksichtigt, aber wo ich den Agenten ausführe ist doch eigentlich im Moment auch egal, oder?


    Hast du da jetzt noch einen Tipp?

    Ist es zwingend den Agenten über die URL aufzurufen?
    Habe es jetzt so probiert:


    Sub Initialize
    Dim s As New notessession
    Dim db As notesdatabase
    Dim doc As notesdocument
    Dim outputdoc As String
    Dim unid As String
    Dim id As String
    Dim url As String
    Dim agent As notesAgent
    Set db = s.CurrentDatabase
    Set doc = s.DocumentContext
    Set agent = db.GetAgent("(JCoAgent)")
    unid = doc.UniversalID
    id = doc.NoteID
    Call agent.RunOnServer(id)
    Set agent = db.GetAgent("(reloadWindow)")
    Call agent.RunOnServer(id)
    End Sub


    Agent reloadWindow:


    Sub Initialize
    Dim s As New NotesSession
    Dim agent As NotesAgent
    Dim doc As notesdocument
    Set agent = s.CurrentAgent
    Set doc = db.GetDocumentByID(agent.ParameterDocID)
    outputdoc = doc.GetItemValue("output_document_id")(0)
    Set doc = db.GetDocumentByUNID( outputdoc )

    url = doc.GetItemValue("url")(0)
    Print "["+url+"]"
    End Sub


    Aber das funktioniert auch nicht!
    Weiß nicht ob du den Thread von Anfang an durchgelesen hast, aber im Notesumfeld war die einzige Lösung die ich gefunden habe das Dokument zu schließen und wieder zu öffnen, um an die aktuellen Werte zu kommen.
    Nur ist das im Web ja leider nicht möglich!