Feldwert aktualisieren

  • Ich habe in einer Form 2 Zeitfelder die ich voneinander subtrahiere um die Tagedifferenz zwischen den beiden zu erhalten. Das Feld das die Tage beinhaltet ist computed... das Problem ist. Um das Feld zu aktualisieren muss ich das Dokument öffnen, in den Editiermodus gehen und wieder spiechern.
    Ist es nötig einen agent zuschreiben der das selbe Prozedere durchläuft oder kann man das Problem anders lösen???

  • Ist das Feld vielleicht auf "Computed when composed" gestellt? Wenn ja, versuchs mal mit "Computed for display"

    Life is not a journey to the grave with the intention of arriving safely in a pretty and well-preserved body, but rather to skid in broadside, thoroughly used up, totally worn out, and loudly proclaiming "Wow, what a ride!!! :evil:
    Beschleunigung ist, wenn die Tränen der Ergriffenheit waagrecht zum Ohr hin abfliessen - Walter Röhrl

  • Moin


    hast Du es schon mal mit


    @Command([ViewRefreshFields])


    probiert? Macht sich in Schaltflächen immer gut, wenn mal ne Aktualisierung vorgenommen werden muss.


    Gruß
    Christian

    Man hilft den Menschen nicht, wenn man für sie tut, was sie selbst tun können. (A. Lincoln)

  • also das sich das Feld neu berechnet funktioniert ja einwandfrei


    jedoch wollte ich, das sich das Feld auch dann berechnet, wenn ich nicht in jedes Dokument klicke, in den edit modus gehe und dann speicher...


    wie lässt sich das denn realisieren? gehts auch ohne script/agent?

  • Hallo,


    im LotusSkript gibts die Methode:


    notesDocument.ComputeWithForm( doDataTypes, raiseError )


    damit sollte es gehen.
    (Es sollten damit alle Berechneten Felder der Maske berechnet werden. "Glaub ich zumindest")


    Du musst dabei, glaube ich das Feld "Form" in der Maske haben.


    Das Skript musst du halt dann ausführen, wenn sich die Werte geändert haben.


    Gruß,
    Steal

  • schreibe einen agent, mit keinem ziel mit der formel:


    @Command( [ToolsRefreshSelectedDocs] )


    diesen aus der Ansicht aufgerufen sollte funktionieren.
    Christian

  • Also das aktualisieren sollte schon über einen Agent laufen der Zeitgesteuert 1 mal am Tag alles durchläuft.


    Hier mal der erstellte Code:


    Sub Initialize
    Dim sess As New NotesSession

    Set db =sess.CurrentDatabase
    Set newdocView = db.GetView("all_docs")

    If newdocView Is Nothing Then
    Messagebox "Cannot create Project List!", MB_OK + MB_ICONEXCLAMATION, "ERROR"
    Exit Sub
    End If

    Set doc = newdocView.GetFirstDocument

    While Not doc Is Nothing

    doc.EditMode = True
    Call doc.Save( True, True )

    Set doc = newdocView.GetNextDocument(doc)
    Wend
    End Sub


    Das Script läuft durch, jedoch werden die Felder nicht aktualisiert. In der Domino Hilfe habe ich nichts gefunden, wie man diese über script neu berechnen lassen kann.
    Wer von Euch kann mir weiterhelfen.

    • Offizieller Beitrag

    Msgbox und editMode gibt es nur im Frontend. Zeitgesteuerte Agenten haben aber kein Frontend.


    Anstelle von EditMode könntest Du es mit ComputewithForm probieren.


    Gruß
    Dirk


    */edit
    doc.EditMode = True
    erstellt ein neues Feld in Deinem Dokument und setzt es auf True.

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein

  • Lieber waxweasle,


    mach es nicht in den Dokumenten, sondern mit einer Ansicht, in der du die Tagedifferenz berechnest - aber vergiß dort bitte nicht, die automatische Update-Frequenz der Ansicht auf max. 12 Std. zu stellen, sonst zwingst du deinen Server in die Knie, weil die Ansicht für Notes nie aktuell ist (du ziehst ja irgendetwas von @Now oder @Today ab - sonst bräuchtest du nicht die tägliche Aktualisierung).


    Deinem Agenten - so du ihn unbedingt einsetzen willst - fehlt auf jeden Fall ein doc.ComputeWithForm. Aber er weist auch noch einen weiteren Verständnisfehler auf: wer soll bei der Messagebox-Frage auf den OK-Knopf drücken ? Du wirfst ein wenig die UI- und Nicht-UI-Klassen durcheinander.


    Weshalb ich dir zu der Ansicht rate, ist simpel: wenn du jeden Tag alle Dokumente mit einem Agenten anfasst, dann darf es keine Repliken mehr geben, in denen editierend gearbeitet wird. Und handhabbar sind lokale Repliken auf Notebooks auch nicht, da du täglich alle Dokumente änderst. Wenn die Anwender morgens die Replikation anstossen, replizieren sie also jeden Tag alle Inhalte. Willst du das ?

  • Nun, prinzipiell ist es natürlich nicht gut, alle in der DB befindlichen Dokumente zu replizieren. Man könnte jedoch die Aktualisierung der Tagesdifferenz so reduzieren, sodass nur die aktualisiert werden, die nicht bearbeitet wurden. Das würde die Aktualisierung der Dokumente auf konstant 40 setzten....


    Das mit der MsgBox habe ich schon herausgenommen. Prinzipiell gehe ich ja davon aus, das sich Dokumente an diesem Platz befinden.


    Anhand der Vermischung seht ihr jal, das ich mit der ganzen Scripterei noch nicht so vertraut bin.


    LN4ever
    Was meinst du damit, ich soll es in der Ansicht, nicht in den Dokumenten machen? Weil, das Feld in der die Tagesdifferenz steht, sich ja in den Dokumenten befindet... oder meintest du damit, dass ich die komplette Zeitdifferenz erst in der view berechnen soll und das Feld aus der Form herausnehmen soll?!?


    Das ist natürlich eine gute Idee und spart den ganzen Aufwand mit dem Script...

  • Genau das meine ich - im Dokument selbst kannst du ja gerne in einem BERECHNET oder BERECHNET ZUR ANZEIGE-Feld rechnen, aber das dient nur zur Anzeige oder Weiterverarbeitung in dieser Maske. Wenn der Benutzer das Dokument ändert, ist es egal, ob er ein Feld mehr oder weniger ändert, er speichert die Änderungen ohnehin. Dein Agent würde viele Dokumente ändern, die von den Benutzern eigentlich gar nicht angefaßt wurden.


    Die Berechnung zur Laufzeit in einer Ansicht erspart dir, die Dokumente selbst ständig zu ändern. Und damit vermeidest du unsinnigen Repliziertraffic sowie Speicher- und Replizierkonflikte.


    Erkauft wird das dadurch, daß die Ansicht, in der gerechnet wird, nicht mehr hochperformant ist, wenn es sich um viele Dokumente handelt.