Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet 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?
-
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
-
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.
-
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?
-
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 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.
-
Das aus dem Dokument aufrufen ist sicher machbar, aber kann ich dann auch etwas mit dem Agenten an den User ausgeben?
-
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 & "]"
-
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 :)
-
Juchu! Endlich ans Laufen bekommen :D
-
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 ?
-
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
-
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?
-
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?
-
Ja, aber im Web wird daraus eine <textarea> und alles HTML-Artige (s.o.) wird auskommentiert.
-
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.
-
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?
-
Maximum Perversum: 200 Textfelder die alle hintereinander sind, als Durchgangs HTML, und von dem Agenten gefüllt werden. Wenigstens funktionierts jetzt =)
-
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