Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: js84 am 12.07.05 - 11:24:42
-
Hi,
ich und meine Agenten. :-)
Also ich hab jetzt nen Web Agenten, der tut. Wenn der gelaufen ist (durch Drücken eines Buttons über die URL aufgerufen) wird im Browser ne neue Seite geöffnet mit der URL und es steht "agent done" da.
Wie kann ich denn verhindern., dass er die neue Seite öffnet??
Ich muß den Agenten mit der URL aufrufen, da ich einige Parameter übergeben muß.
Wer kann mir helfen......???
LG Jana
-
Hallo
So am Rande: Du könntest den Agent so Schreiben, dass er die Parameter aus dem aktuellen Dokument holt (siehe Notessession.DocumentContext). Dann brauchst Du die URL nicht zwingend zu parsen.
Zur Rückegabe gibts mehrere Möglichkeiten:
a) Du gibts via Print "...." eine Statusmeldung in HTML aus.
b) Du gibts Print "<script> window.close();</script>" , da wird das aktuelle Fenster gleich geschlossen.
c) Du gibst via Print "[" & url & "]" eine URL an den Browser. / url ist dabei die Adresse irgendeines Dokuments oder Designelements.
d) Du hast im Ursprünglichen Form ein $$Return Feld (Siehe Designerhelp)
gruss
umi
-
DAnke für die wie immer schnelle Hilfe.
Das ich die Parameter mit einer URL übergeben hat schon seine Berechtigung, da ich Feldnamen und nicht deren Inhalt übergebe ;)
Aber wie auch immer VIELEN DANK
LG Jana
-
Du kannst via dem DocumentContext auf alle Felder des aktuellen Dokuments zugreifen.
-
Ja, das weiß ich doch,
ich will den Agenten für ein Feld laufen lassen. Abhängig davon wo der Button gedrückt wird muß der Agent für eine anderes Feldlaufen.
-
Ok, Da hat der Kaffeemangel meine Linsen getrübt... :-)
-
Umi hat eigentlich schon alles gesagt,
ein ?OpenAgent kann ja fast nur mit einem "window.open" angetriggert werden und macht damit immer ein kleines Fenster auf. Genau wie von Umi vorgeschlagen, gibt der Agent dann einfach das JS-Close-Script aus, und schließt sein Fenster gleich selber wieder.
Wen dieses (kurzzeitige) Minifenster aber absolut noch stört,
kann dies mit etwas Aufwand und einem kleinen Trick umgehen,
(den einzigen, den ich hierfür kenne):
Man nehme irgendein sichtbares oder unsichtbares Image-Objekt innerhalb der HTML-Seite
und weise die Source-Property (per Button oder schon beim HTML Aufbau) über den Agenten zu.
form.imagename.src = .../agent?openagent¶
oder
getElementByname(imagename).src = .../agent?openagent¶
Wenn das Image sichtbar ist, muss der Agent nichts weiter als einen Pfad zu einem Image zurückgeben,
z.B. .../xyz.gif
Wenn das Image unssichtbar oder nur 1x1 groß ist, ist sogar das schnuppe, aber nicht die schönste Programmierung, weil man ja absichtlich einen Fehler programmiert... (den aber keiner sieht...)
Hiermit kann man Domino-Agenten auf dem Server aufrufen,
OHNE das zusätzliche Fenster.
Bei anderen Form-Properties geht das leider nicht,
ein form.inputfeld.value = .../agent?openagent¶
wäre ZU schön und einfach, um wahr zu sein.
Das kommt dann wahrscheinlich erst demnächst mit den Domino WebServices.
Gruß,
Uwe
-
Also bei mir öffnet der kein kleines Fenster sondern schreibt die URL des Agentenaufrufs in das aktuelle Fenster.
Woran kann das denn jetzte liegen ?
*verzweifelt*
-
Wie wird den dein Agent aufgerufen?
a) mit @settargetframe und @urlopen
b) JavaScript?
gruss
umi
-
Mit
@URLOpen
Ich hab keine Frames, weil ich das alles ´mit Portlets mach und darstelle
-
Ich weiss jetzt nicht ob es was nützt aber versuch mal mit
@settargetframe("_blank");
@urlopen(Dein Agent)
Damit wird der Agent explizit in einem neuen Fenster geöffnet.
alternativ könntest Du auch mit JS das den Agent öffnen:
"window.open(url)"
gruss
umi
-
So also ich hab das jetzt so gemacht das der Agent mit @URLOpen aufgerufen wird und am ende soll er zurück in das Dokument springen, von dem er aufgerufen wurde.
Was jetzt mein Problem ist, ist dass er in das Parentdocument springt und er aber in einem Response doucument aufgerufen wurde.
Woran kann das jetzt schon wieder liegen ?
das is echt zum heulen
-
Was macht der Agent am schluss den?
-
Am ende ruft er mit Print "[" "]" die URL mit der Docid des Dokumentes auf.
so:
Set doc=s.DocumentContext
docid=doc.UniversalID
targeturl$="http://host/db/0/" & docid & "?OpenDocument"
Print "[" & targeturl$ & "]"