Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Lotuseffekt am 10.10.06 - 15:44:08

Titel: WebqueryOpen-Agent eine URL öffnen
Beitrag von: Lotuseffekt am 10.10.06 - 15:44:08
Hallo Entwickler!

Ich habe eine Frage. Kann man beim Web-Query-Open keine URL öffnen? :-:

Ich möchte folgendes realisieren:
Ich öffne eine url (Bsp. db-replica/ansicht/doc-Id). Im Webquery-Open dieser Maske möchte ich nach bestimmten Werten abfragen. Ist die Bedingung nicht erfüllt, soll eine andere Seite geöffnet werden. Falls alles ok ist, dann soll die Seite angezeigt werden. Im WebQuery-Save-Ereignis funktioniert es tadellos.

Hat jemand eine Idee wie ich es sonst lösen könnte?
Vielen Dank!
Titel: Re: WebqueryOpen-Agent eine URL öffnen
Beitrag von: m3 am 10.10.06 - 16:23:42
Wie die Designer-Hilfe so schön schreibt:
Zitat
A WebQueryOpen event runs the agent before Domino converts a document to HTML and sends it to the browser. Domino ignores any output produced by the agent in this context.

Wenn, dann musst Du Dich bei der Aktion einhängen, die ausgeführt wird, bevor das Dokument geladen wird.
Oder dann im Dokument einen redirect mir Javascript/Meta-Tags einbauen. Ist aber beides nicht schön/elegant/sicher.
Titel: Re: WebqueryOpen-Agent eine URL öffnen
Beitrag von: Lotuseffekt am 10.10.06 - 16:44:44
Hallo m3!

Vielen Dank für den Hinweis. Jetzt habe ich auch gesehen, dass Domino jegliche Ausgaben in diesem  Ereignis ignoriert. Schade. Es hilft auch nicht wenn man einen weiteren Agenten startet, der dann für mich diese Url öffnet.

Bzgl Redirect... ich stimme Dir zu, dass das nur eine 'Krücke' ist, aber wenn nichts anderes hilft, dann muss es wohl hin...
Titel: Re: WebqueryOpen-Agent eine URL öffnen
Beitrag von: Mark³ am 11.10.06 - 07:54:17
Du könntest eine Seite öffnen und dann nach dem Laden mit AJAX Inhalte ändern/nachladen etc.
Titel: Re: WebqueryOpen-Agent eine URL öffnen
Beitrag von: m3 am 11.10.06 - 08:12:16
Lotuseffekt - wie wird denn die Seite aufgerufen. Ev. kannst Du Dich ja dort "reinhängen" mit Deiner Überprüfung.
Titel: Re: WebqueryOpen-Agent eine URL öffnen
Beitrag von: flaite am 11.10.06 - 08:26:26
Grundsätzlich brauchst du für eine Client-initiierte, durch bestimmte Werte in den Feldern bedingte Umleitung nur  ein bischen JavaScript code dynamisch erzeugen und das per PassThru html auf die Seite zu tun (s.u.)
Ich bin mir ziemlich sicher, dass das anders besser gelöst werden kann. Das hängt aber von den spezifischen Details in der Anwendung ab.


Code
<script language="JavaScript">

<!--
if (bedingung==true) {

window.location.href = "http://www.ibm.com";
}
//-->
</script>
Das (bedingung==true) kannst du ja auch mit Notes Bordmitteln (Formelsprache) dynamisch generieren.
So die Art: Als Feldformel:
Code
nl:= @newLine();
"<script language=\"JavaScript\">" + nl +
"<!--" + nl +
"if (" + @if(meinFeld="wertDerZurUmleitungFührt"; "true"; "false") + ") {" + nl +
"window.location.href = \"http://www.ibm.com\"";" + nl +
"}" + nl +
"//-->" + nl +
"</script>" 

Titel: Re: WebqueryOpen-Agent eine URL öffnen
Beitrag von: Mark³ am 11.10.06 - 08:32:58
du kannst auch anstelle des Öffnens eines Dokumentes gleich einen Agenten per URL ansteuern der dann Logik ausführt und als Ergebnis eine Webseite präsentiert.
Anregungen zu solchen Sachen findest du z.B. in den Domino.Doc-Templates, falls du da irgendwie rankommst.

Titel: Re: WebqueryOpen-Agent eine URL öffnen
Beitrag von: flaite am 11.10.06 - 08:44:39
Per Script wird aus einem Agenten (falls ich mich noch recht erinnere) irgendwie so die URL angestossen.

Code
print "[http://www.atnotes.de]";
So könnte man in einem Agenten Verzweigung einbauen
Code
if (doc.wert(0) = "ibm" then
print "[http://www.ibm.com]"
else 
print "[http://www.atnotes.de]"
end if
Afaik sind diese eckigen Klammern unbedingt notwendig. Und es muß runtime das erste print statement im Agenten sein (im if-else können runtime beide prints das erste sein).
Die Syntax kann aber leicht anders sein.

Gruß Axel

Titel: Re: WebqueryOpen-Agent eine URL öffnen
Beitrag von: Lotuseffekt am 11.10.06 - 08:53:57
Vielen Dank für eure Einträge. Ich werde das eine oder andere heute ausprobieren.
 
Grundsätzlich wollte ich verhindern, dass ein Benutzer eine Seite aus der Chronik-Liste (History) direkt öffnet, falls er diese Seite zuvor besucht hat. Beim Öffnen der Seite überprüfe ich bestimmte Parameter (Zeitstempel, etc.) und falls das Dokument 'veraltet' ist, soll er auf eine bestimmte Seite geroutet werden.

@Axel: genau dieses Statement habe ich im Web-Query-Open-Agenten (print "[www.ibm.de]") eingegeben. Leider funktioniert es nur im WebQuerySave-Ereignis. Wie auch schon m3 zietiert hat, ist es in der Hilfe beschrieben, dass jegliche Ausgaben im Query-Open-Agenten von Domino ignoriert werden.
Titel: Re: WebqueryOpen-Agent eine URL öffnen
Beitrag von: flaite am 11.10.06 - 09:17:38
Du kannst die Anwendung vielleicht irgendwie so organisieren, dass die Dokumente nicht direkt sondern eben über einen Agenten aufgerufen werden. So ein bischen in Anlehnung an Modell2/MVC in Servlet/JSP.
In zahlreichen Java Frameworks gehen ja alle Client Requests zunächst über ein zentrales Controller-Servlet.
Es ist aber zugegenermassen fraglich, ob eine solche Architektur für Domino überhaupt Sinn macht.
WebQueryOpen wird glaub ich insgesamt sehr wenig benutzt.
Titel: Re: WebqueryOpen-Agent eine URL öffnen
Beitrag von: Glombi am 11.10.06 - 09:27:53
Warum machst Du nicht einfach eine Maskenformel in der Ansicht "ansicht" ?
Dort wertest Du in Formelsprache die Bedingung aus und gibst den Namen der Maske zurück, die geöffnet werden soll.

Andreas