Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Driri am 21.10.04 - 16:32:35
-
Hallo,
ich habe einen Agent fürs Web, der per WebQuerySave getriggert werden soll. Innerhalb dieses Agents möchte ich aus einem berechneten Feld (enthält @UserName) den Wert auslesen und mir den gekürzten Namen ausgeben lassen.
Ich probiere das mit Evaluate und @Name, allerdings kriege ich da keinen Wert raus.
Ich habe mir mal folgenden simplen Agent gebaut, mit dem ich das Verhalten simulieren wollte, bekomme als Fehlermeldung allerdings immer "Operation failed".
Bin ich zu blöde, hab ich Tomaten auf den Augen oder will Evaluate schlicht nicht mit @Name zusammenarbeiten ?
Dim ws As New NotesUIWorkspace
Dim session As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim doc As NotesDocument
Dim user As String
Dim formel As String
Set db = session.CurrentDatabase
Set view = db.GetView("VThema")
Set doc = view.GetFirstDocument
formel = "@Name([CN];"+doc.CreatedBy(0)+")"
user = Evaluate(formel, doc)
Call ws.Prompt(PROMPT_OK, "Test", user)
-
Evaluate gibt auf jeden Fall ein Variant zurück. Du darfst user also nicht als String deklarieren und musst das Ergebnis dann mit user (0) abfragen.
(Habe aber eben das nur kurz überfliegen können. K.A., ob noch was klemmt).
HTH,
Bernhard
-
Hi Bernhard,
hab ich geändert, die Fehlermeldung bleibt leider die selbe. Ich hab mir das mal im Debugger angesehen.
Was ich ein wenig merkwürdig finde ist, daß die Variable "formel" folgenden Wert enthält :
@Name([CN];CN=User/OU=OU/O=ORG/C=DE)
Müßte der Wert nicht eigentlich in Anführungszeichen gesetzt sein ? Ohne müßte @Name das doch eigentlich als Feldnamen oder Variable interpretieren, oder ?
-
So, jetzt längerer Blick. Deine Formel muss so aussehen, Ingo:
formel = {@Name([CN]; "} + doc.CreatedBy (0) + {")}
HTH,
Bernhard
-
*Klatscht sich beide Hände vor die Stirn*
Ich sags ja, ich hab Tomaten auf den Augen. Danke Bernhard, das wars ;)
-
Wie immer: Gern geschehen, Driri.
Bernhard
-
Hi,
es geht auch einfacher:
...
formel = {@Name([CN]; CreatedBy)}
user = Evaluate(formel, doc)
...
Der Bezug zum Dokument wird über den zweiten Parameter von Evalute hergestellt.
Axel
-
Du hast natürlich vollkommen Recht, Axel. Mein Blick war immer noch zu kurz (und die Gedanken eigentlich bei einem ganz anderen Problem). Weiter, als zu "irgendwie kommt mir das jetzt komisch vor" hat es gestern nicht gereicht ...
Danke,
Bernhard
-
Macht ja nix, funktioniert ja in beiden Fällen.
Aber da hätte ich noch mal eine Frage zu :
Gibt es einen Unterschied zwischen der Verwendung von {} und | als Abgrenzung ?
Ich hatte die Formel erst so wie von Bernhard aufgemalt im Script, allerdings mit |. Ich dachte bisher immer, daß man die genauso verwenden kann, ist dem nicht so ? Weil mit den Pipes hatte ich immer die Fehlermeldung.
-
Der Unterschied zwischen geschweiften Klammern und Pipes besteht eigentlich nur darin, dass mit den Pipes auch Zeilenumbrüche in den String mit aufgenommen werden - ansonsten ist es egal, welche Zeichen man verwendet.
Bernhard
-
" | und { sind alles String Delimiter.
Welches sinnvoll ist, hängt auch von dem ab, was im String stehen soll.
Wenn Du bspw. einen db.Search String bastelst und Du willst (in Formelsprachen Syntax) ein OR haben, so musst Du | verwenden. Daher scheidet | als String Delimiter aus.
{ hat den Vorteil, dass Du leicht Zeilenumbrüch machen kannst, bspw.
msgbox{Das ist eine Meldung,
die über mehrere Zeilen geht und in der man
kein chr(13) oder so braucht ;-)}
Andreas
-
Okay, vielen Dank für die Erläuterung. Dann weiß ich in Zukunft bescheid ;)
-
Ingo, warum überhaupt @name verwenden?
Dim Namen as New NotesName (doc.CreatedBy(0))
Resultat = Namen.Abbreviated
-
Noch kürzer mit
name = session.CommonUsername
Andreas
P.S.: Ok, ok, ich nehme es zurück ;D
Es ist ja eine Web-Anwendung, das hatte ich überlesen. Eine wie immer kleine aber feine Einschränkung ;)
-
Aehm, Andreas, das geht, wenn man den Agenten mit der Option "Run as web-user" definiert.
-
Stimmt Jens,
wenn das eingestellt ist, geht es. Aber es ist ja nicht die Regel und da wollte ich keine falsche Fährte legen ;)
Andreas
-
Das ist allerdings ein weiser Entschluss, tatsächlich ist es häufig nicht eingestellt, dabei ist das ein ganz schön praktisches Feature
-
@Jens :
Danke für den Tipp, die Klasse hab ich mir noch nie zu Gemüte geführt.
Ich habs jetzt allerdings mit @Name umgesetzt, funktioniert ja auch wunderbar.
-
Ingo, dann schau doch mal diesen Artikel zum Namensystem (http://www.atnotes.de/index.php?board=26;action=display;threadid=14119) an, da steht noch mehr dazu drin.