Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: 0xse am 08.12.06 - 09:51:48

Titel: Agenten im Kontext des Webbenutzers ausführen
Beitrag von: 0xse am 08.12.06 - 09:51:48
Hi, hab einen Agenten den der Kunde online aufruft. Der Kunde ist als Notes Benutzer angemeldet. Wenn ich den Benutzer von der Session abfrage, dann wird mir der Serverbenutzer zurückgeliefert. Im 6er Designer gibt es die Option bei einem Agenten, das dieser im Kontext des Webbenutzers ausgeführt werden soll. Gibt es da für Notes 5 auch einen Workaround?
Titel: Re: Agenten im Kontext des Webbenutzers ausführen
Beitrag von: Glombi am 08.12.06 - 10:01:37
Es kommt drauf an, was Du erreichen willst.

Um den Namen des aktuellen Users zu bekommen, kannst Du ein Feld - Berechnet zur Anzeige - erstellen und als Formel @Username eingeben.
Das kannst Du in dem Agenten auswerten.

Andreas
Titel: Re: Agenten im Kontext des Webbenutzers ausführen
Beitrag von: 0xse am 08.12.06 - 10:05:53
Sinn des ganzen... eine Notes DB die zu groß wurde, ist jetzt ausgelagert in Oracle. Kundeninterface ist aber immer noch in Notes. Also einen Agenten gemacht der sich via ODBC die Daten zieht. Klappt so weit auch wunderbar. Jetzt soll der Agent aber wissen, von welchem Benutzer er aufgerufen wurde, damit er auch nur die zu dem gehörenden Datensätze ausgibt.

Die Benutzersessions im Web verwaltet der Domino nach dem Einloggen ja automatisch. Nur ich möchte den Benutzernamen wissen. Ein Feld, wie soll ich ein Feld in einem Agenten unterbringen? Der wird direkt aufgerufen, ist mit keiner Maske verknüpft.
Titel: Re: Agenten im Kontext des Webbenutzers ausführen
Beitrag von: 0xse am 08.12.06 - 12:31:16
Wenn ich im Script ein Doc erstelle und mir mit Evaluate und @UserName den User hole, müsste doch auch der User des Agenten zurückkommen, was dann der Server ist. Versteh ich das so richtig?
Titel: Re: Agenten im Kontext des Webbenutzers ausführen
Beitrag von: umi am 11.12.06 - 08:27:21
Hallo

Woraus wird den der Agent gestartet? nicht aus einem Dokument heraus?
Wenn Du den Agent aus einem Dokument heraus startest, müsstest Du (wie Glombi es beschrieben hat) ein Feld integrieren und könntest dann im Agenten via Notessession.DocumentContext.getItemvalue(Feldname)(0) auf das Feld zugreifen und so den Benutzernamen auslesen.

Zitat
Zitat einfügen 
Wenn ich im Script ein Doc erstelle und mir mit Evaluate und @UserName den User hole, müsste doch auch der User des Agenten zurückkommen, was dann der Server ist. Versteh ich das so richtig?

Genau, unter R5 ist das so. Erst ab R6 lässt sich ein WebAgent mit  den Rechten des Users ausführen lassen.
Titel: Re: Agenten im Kontext des Webbenutzers ausführen
Beitrag von: 0xse am 11.12.06 - 08:32:17
Das aus dem Dokument aufrufen ist sicher machbar, aber kann ich dann auch etwas mit dem Agenten an den User ausgeben?
Titel: Re: Agenten im Kontext des Webbenutzers ausführen
Beitrag von: umi am 11.12.06 - 08:37:31
Da gibt es mehrere Möglichkeiten

z.B. kannst Du direkt den HTTP Code an den Benutzer ausgeben via Print

oder Du erstellst ein Dokument mit den Daten aus der ODBC Verbindung und gibst die URL des Dokuments an den Benutzer via Print "[" & URL & "]"
Titel: Re: Agenten im Kontext des Webbenutzers ausführen
Beitrag von: 0xse am 11.12.06 - 14:33:39
Ok, hab mal was probiert.

> Feld in Maske das den Agenten aufruft, Fehlermeldung, ist nicht erlaubt in dem Kontext.

> Event QueryOpen, passiert nix. Als wenn es nicht ausgeführt wird.

Von wo aus kann ich denn den Agenten aus einem Dokument aufrufen? Und wie krieg ich mit LS in einer Maske fürs Web Werte in die Felder? Schien so einfach, stellt sich aber als harter Brocken dar :| Bin für jede Hilfe dankbar :)
Titel: Re: Agenten im Kontext des Webbenutzers ausführen
Beitrag von: 0xse am 11.12.06 - 16:33:59
Juchu! Endlich ans Laufen bekommen :D
Titel: Re: Agenten im Kontext des Webbenutzers ausführen
Beitrag von: 0xse am 13.12.06 - 10:50:25
Nächstes Problem *gg* Der Agent läuft wie er soll, das klappt. Aber: Die Informationen die er zurückgeben soll, sind zu groß für ein normales Feld. (So 220.000 Zeichen). Also nehme ich ein RT Feld und kloppe da den Inhalt rein. Der Inhalt ist vom Agenten generierter HTML Code. Nur... das RT Feld kommentiert alle < > " & etc... aus. Also hab ich immo ein JS geschrieben das den Code ncohmal parst. Kann ich so eine große Rückgabe des Agenten auch irgendwie direkt ausgeben ?
Titel: Re: Agenten im Kontext des Webbenutzers ausführen
Beitrag von: umi am 13.12.06 - 13:51:11
Du schreibst also den HTML Code in ein Feld und gibst das zughörige Dokument wieder an den Browser? oder wie hast Du es gelöst?
evtl. reicht es, wenn Du den HTML Code vom Agent mit "[" beginnst und mit "]" beendest. z.B.
[<div id="meinDiv">Dies ist der Code vom Agent </div>]

mit den [< und >] markierst Du den Text innerhalb quasi als DurchgangsHTML
Titel: Re: Agenten im Kontext des Webbenutzers ausführen
Beitrag von: 0xse am 13.12.06 - 13:57:24
Der Agent wird über @Command([ToolsRunMacro]; "(agWebSpam)") im Event WebQueryOpen der Maske aufgerufen. Das was er ausgibt, würde ja verpuffen, deswegen schreibe ich die Rückgabe in ein Feld.

Würdest du den Agenten anders einbinden?
Titel: Re: Agenten im Kontext des Webbenutzers ausführen
Beitrag von: umi am 13.12.06 - 14:09:15
Kommt darauf an was er machen soll, das Resultat des Agents verfügbar sein muss.
Evtl. kannst Du den Agent auch via AJAX starten, es gibt verschiedene Wege

Hast Du schon mal Probiert das Richtextfeld als DurchgangsHTML zu markieren?
Titel: Re: Agenten im Kontext des Webbenutzers ausführen
Beitrag von: 0xse am 13.12.06 - 15:13:55
Ja, aber im Web wird daraus eine <textarea> und alles HTML-Artige (s.o.) wird auskommentiert.
Titel: Re: Agenten im Kontext des Webbenutzers ausführen
Beitrag von: umi am 13.12.06 - 15:28:39
Also wenn die Daten im Dokument nur angezeigt werden sollen (es gibt keine weiteren von diesen Daten abhängigen Felder) würde ich den Ajax Ansatz mal probiern.
Dabei hilft dir evtl. Prototype.js oder Ähnliche JS-Frameworks welche Dir einiges an Arbeit mit dem xmlhttpRequest abnehmen.
Dein Agent wird dann via URL aufgerufen und "druckt" das Resultat an die Aufrufende JS-Funktion. Dann brauchst Du nur noch einen HTML Container z.B. ein DIv wo du den HTML Code des Agents ablegen kannst.
Titel: Re: Agenten im Kontext des Webbenutzers ausführen
Beitrag von: 0xse am 13.12.06 - 15:42:48
Ab Notes 6 ja. Aber in Notes 5 weiß der Agent wieder nicht welcher Kunde ihn auruft. Dass müßte ihm dann das JS mit übergeben. Von daher kommt diese Lösung nicht in Frage.

Kann ich mit LS dynamisch Felder in einer Maske anlegen?
Titel: Re: Agenten im Kontext des Webbenutzers ausführen
Beitrag von: 0xse am 13.12.06 - 17:45:23
Maximum Perversum: 200 Textfelder die alle hintereinander sind, als Durchgangs HTML, und von dem Agenten gefüllt werden. Wenigstens funktionierts jetzt =)
Titel: Re: Agenten im Kontext des Webbenutzers ausführen
Beitrag von: Thomator am 14.12.06 - 11:28:20
Mach Dir doch ein 'HTML-Island', in das Du vom Agenten aus den Text reinschreibst. Da gibt es keine Größenbeschränkungen.

Sieht so aus: Berechneter Wert mit z.B.: Value HTML <- wichtig: ohne Hochkommas, also wie auf ein Feld berechnet.

Im WebQueryOpen-Agenten setzt Du den Wert mit:

docCTX.HTML = <Dein Text>


EDIT: Hab noch vergessen: Der berechnete Wert muss als Durchgangs-HTML markiert sein, sons wird das im Web nicht angezeigt