Beiträge von Inskin

    Um mein Problem etwas verständlicher zu machen:


    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)
    dbname = Evaluate (|@ReplaceSubstring(@ReplaceSubstring(@Subset(@DbName; -1); "\\"; "/"); " "; "+")|)
    Print "[/" + dbname(0) + "/vwInput/"+unid+"?OpenDocument]"
    Set agent = db.GetAgent("(openPage)")
    Call agent.RunOnServer
    End Sub


    Dieser Agent soll am Ende einen nächsten Agenten aufrufen, der folgendes macht:


    Sub Initialize
    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



    Führe ich die beiden Agenten manuell, also über Buttons, hintereinander aus funktioniert alles so wie es soll.
    Rufe ich den 2. Agenten aber aus dem 1. auf funktioniert es nicht!
    Es wird dann nur da Dokument aktualisiert. Denke das liegt daran, dass der Printbefehl erst am Schluss ausgeführt wird.


    Kann mir jemand einen Tipp geben?

    Wie kann ich denn das Dokument neu laden?
    Der Print-Befehl mit eckigen Klammern wird ja immer am Ende ausgeführt, oder?


    Mein Problem ist es, dass ich nachdem ich meinen Java Agenten aufgerufen habe die Änderungen, die im Backend vorgenommen wurden, sofort sichtbar machen muss und dann auf die aktualisierten Felder zugreifen will, um eine URL zu öffnen.

    So und da ist mein nächstes Problem:


    Will das ganze jetzt für das Web realisieren, kenn mich da aber noch nicht so aus!


    Habe bis jetzt folgendes:


    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
    Set doc = Nothing
    Call agent.RunOnServer(id)

    Set doc = s.DocumentContext
    outputdoc = doc.GetItemValue("output_document_id")(0)

    Set doc = db.GetDocumentByUNID( outputdoc )
    url = doc.GetItemValue("url")(0)

    Print "URL"
    Print url
    'Call uiws.URLopen(url)
    End Sub


    Das Problem ist wieder das gleiche, wie aktualisiere ich das Feld, das vom Java Agenten geändert wird?
    Und wie öffne ich dann die URL in einem neuen Fenster?


    Vielen Dank im Voaus!


    MfG

    Er bringt mir aber keinen Fehler, weil der Befehl eh erst am Ende ausgeführt wird (ein weiterer Beleg dafür)


    Habe es aber trotzdem nochmal versucht wie du geschrieben hast. Im Debuger hat das Item den alten Wert, wie nicht anders zu erwarten!


    Was nun??? Doch über ein Profildokument gehen?

    Ich will es doch so machen, aber es geht so nicht!!!


    Hier der Code der bei Klicken auf den Button ausgeführt wird:


    Sub Click(Source As Button)
    Dim uiws As New notesuiworkspace
    Dim db As notesdatabase
    Dim uidoc As notesuidocument
    Dim doc As notesdocument
    Dim outputdoc As String
    Dim unid As String
    Dim id As String
    Dim agent As notesAgent
    Set db = uiws.CurrentDatabase.Database
    Set uidoc = uiws.currentdocument
    Call uidoc.Close
    Set doc = uidoc.Document
    Set agent = db.GetAgent("(JCoAgent)")
    unid = doc.UniversalID
    id = doc.NoteID
    Set uidoc = Nothing
    Set doc = Nothing
    Call agent.Run(id)
    Set doc = db.GetDocumentByUNID( unid )
    Call uiws.EditDocument(False,doc)
    outputdoc = doc.GetItemValue("output_document_id")(0)
    Messagebox(outputdoc)
    End Sub


    Das Problem ist, dass das uidoc erst ganz am Ende geschlossen wird und nicht an der Stelle, wo der Befehl steht!


    Edit: Das erkennt man daran, dass zu dem Zeitpunkt, an dem die MEssagebox angezeigt wird 2 uidocs offen sind und danach erst das alte geschlossen wird.

    Habe nur den Java Agenten gestartet, ABER erstmal nicht das uidoc geschlossen. Bereits jetzt steht schon in den Dokumenteigenschaften der richtige wert!


    Starte ich jetzt meinen LS-Agent, gibt der mir aber den alten Wert zurück!


    Starte ich den Java Agenten, schließe das Fenster, öffne es dann wieder und starte dann den LS-Agent bekomme ich den richtigen Wert!

    Hab mal alles ausprobiert, hat aber leider nichts gebracht.


    Das Item bleibt vor und nach dem Call im Debugger gleich, sonst wäre mein Problem ja gelöst.


    Trotzdem Danke für die Hilfe!!!


    Werde wohl den Umweg gehen müssen, die ID in ein extra Profildokument zu schreiben und sie mir von dort zu holen. Hoffe das klappt dann wenigstens!

    So habe den Agenten jetzt aus dem LS-Agent gestartet, aber jetzt bin ich immernoch genauso weit wie vorher!


    Bei Klick auf den Button wird jetzt folgendes ausgeführt:


    Sub Click(Source As Button)
    Dim uiws As New notesuiworkspace
    Dim db As notesdatabase
    Dim uidoc As notesuidocument
    Dim doc As notesdocument
    Dim var As String
    Dim unid As String
    Dim id As String
    Dim agent As notesAgent
    Set db = uiws.CurrentDatabase.Database
    Set uidoc = uiws.currentdocument
    Set doc = uidoc.Document
    Set agent = db.GetAgent("(JCoAgent)")
    unid = doc.UniversalID
    id = doc.NoteID
    Call agent.Run(id)
    Call uidoc.Close
    Set doc = db.GetDocumentByUNID( unid )
    Call uiws.EditDocument(False,doc)
    var = doc.GetItemValue("output_document_id")(0)
    Messagebox(doc.GetItemValue("output_document_id")(0))
    End Sub


    Der Java Agent macht immernoch das gleiche!

    Den Java Agent aus dem Script zu starten habe ich auch schon probiert, dann gibt es aber Schwierigkeiten, weil die Zeile


    Document docContext = agentContext.getDocumentContext();


    null zurück liefert, weil der Agent nicht mehr aus dem Kontext des Dokuments gestartet wird.
    Kann man sowas evtl. über ein Profildokument regeln?


    Gruß
    Magnus

    So hab jetzt ein weiteres Problem! Hab den LS-Agent jetzt umgeschrieben:


    Sub Initialize
    Dim uiws As New notesuiworkspace
    Dim db As notesdatabase
    Dim uidoc As notesuidocument
    Dim doc As notesdocument
    Dim var As String
    Dim unid As String
    Set db = uiws.CurrentDatabase.Database
    Set uidoc = uiws.currentdocument
    Set doc = uidoc.Document
    Call uidoc.Close
    unid = doc.UniversalID
    Set doc = db.GetDocumentByUNID( unid )
    Call uiws.EditDocument(False,doc)
    var = doc.GetItemValue("output_document_id")(0)
    Messagebox(doc.GetItemValue("output_document_id")(0))
    End Sub


    Aber das funzt auch nicht. Ich bekomme immernoch den alten Wert. Scheint so zu sein, dass erst alle Befehle abgearbeitet werden, bevor der Close Befehl ausgeführt wird. Es erscheint nämlich erst die Massagebox (zu der Zeit sind 2 Dokumente offen) und dann wird das alte Dokument erst geschlossen.


    Wär schön, wenn mir jemand weiterhelfen könnte!!! Danke!