Formel in LotusScript ausführen

  • Ist es möglich die Funktionen aus der Formelsprache in Lotus Script auszuführen?


    Hintergrund ist der:


    2 Datumsfelder mit Start und Ende. Noch ein Feld "Dauer" in dem die Tage mit Hilfe von @BusinessDays dargestellt werden sollen.
    Das Feld Dauer soll jedoch erst ausgefüllt werden, wenn Das Enddatum eingetragen ist. Dabei bietet sich ja die "OnChange" Methode von Datumsfeldern an, allerdings kann man dort keine Formelsprache benutzen. Weiterhin soll das Feld nicht nur berechnet, sondern auch bearbeitbar sein. Es sollte dann halt sowas wie @SetField bzw. FieldSetText benutzt werden.



    Danke und MfG


    Sub

  • Irgendwie funktioniert das nicht mit der Evaluate Methode.


    Es kommt folgender Fehler:


    "Instance Member EVALUATE does not exist"



    Egal wie ich mir das Session Objekt hole:


    Dim notesSession As New NotesSession


    oder so:


    Dim session As Variant
    Set session = CreateObject("Notes.NotesSession")


    ein session.Evaluate bringt immer die Meldung. :/

  • So:


    Dim workspace As New NotesUIWorkspace
    Dim notesSession As New NotesSession
    Dim akt_dokument As NotesUIDocument
    Set akt_dokument = workspace.CurrentDocument

    'Messagebox(notesSession.UserName)
    asd = Evaluate ("@Now", akt_dokument )

    Messagebox(asd)




    Er meckert irgendwie auch nich, in Richtung "Not a Member". Nur zur Laufzeit. :/


    EDIT: Sry...das es nich nach deiner Antwort steht.

  • Ich habe es noch nie geschafft ueber die Klasse Notessession ein evaluate abzusetzen. Einfach die Klasse weglassen. In der Hilfe gibt´s auch Beispiele dafuer.


    Also so:


    wert = Evaluate({@Formel})

  • allgemeine Frage.


    Auch schon mal den Rueckgabewert von Evaluate angesehen?


    Auszug aus der Hilfe.


    ' For each document in a Notes database, use a Notes macro to
    ' compute the average for a list of numeric entries in the
    ' NumberList field. Evaluate returns a Variant, and Notes
    ' macros return an array. In this case, the array contains only
    ' 1 element (element 0). For more info, see the Notes
    ' documentation.


    Andreas

  • Dim workspace As New NotesUIWorkspace
    Dim notesSession As New NotesSession
    Dim akt_dokument As NotesUIDocument
    Set akt_dokument = workspace.CurrentDocument


    'Messagebox(notesSession.UserName)
    asd = Evaluate ("@Now", akt_dokument )


    Messagebox(asd)



    hatte ich schon weiter oben gemacht, allerdings direkt auf meinen eigenen Beitrag geantwortet. ;)

  • Dann versuch doch mals folgendes:


    Dim varTest as Variant


    varTest = Evaluate(|@Now|)


    Msgbox varTest(0)



    Evaluate liefert als Ergebins in jedem Fall einen Array zurueck, auch wenn dieser nur ein Element hat.
    Daher must Du das Ergebins auch als Array ansprechen.


    Andreas

  • Prinzipiell sollte das dann so aussehen:
    asd = Evaluate({@Now},akt_dokument )
    oder
    asd = Evaluate({@Now} )


    wobei ich nicht genau erklaeren kann, warum man bie @now ein evaluate benutzt anstatt Now

  • Es geht eigentlich um @BusinessDays, @Now soll nur als einfaches Beispiel dienen.



    Eure Beispiele gehen, jedoch frage ich mich, wieso ihr da | bzw. { stehen habt, davon ist in der Hilfe, bzw. Methodenbeschreibung weit und breit nichts zu sehen. Dort stehen immer Anführungszeichen, d.h. die Makro-, bzw. Formelnamen werden als String übergeben.



    Ich hoffe ich komme jetzt selbständig weiter.


    Danke.

  • Bei einigen Formeln werden Anfuehrungszeichen mit eingegeben. Und die wuerde falsch interpretiert. Mit {} oder | | werden diese nicht als stoerend in LS augenommen.
    z.B.


    evaluate(@ismember("[Rolle1";@userroles))
    wuerde ein Fehler auftauchen
    evaluate({@ismember("[Rolle1";@userroles)})
    hier nicht

  • Das "|" und "{}" haben in diesem Fall die deselbe Bedeutung.


    In der Hilfe wird die von Evaluate auszufuehrende Funktion zuerst einer Konstanten bzw. einer Variablen zugewiesen und diese dann bei Evaluate verwendet.


    Mit den angegebenen Zeichen kannst Du solche kleinen Funktionen (@Now, ...) aber sehr gut direkt im Evaluate angegen.
    Auch hast Du den Vorteil, dass Du bei diesen Zeichen bei den Werten innerhalb dieser zeichen auch Anfuehrungszeichen verwenden kannst.


    Also z.B.


    varTest = Evaluate(|@Left("Guten Morgen"; 3)|)


    Msgbox vatTest(0) wuerde in diesem Fall "Gut" zurueckgeben.


    Andreas