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???
Feldwert aktualisieren
- waxweazl
- Erledigt
-
-
Ist das Feld vielleicht auf "Computed when composed" gestellt? Wenn ja, versuchs mal mit "Computed for display"
-
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 -
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?
-
Nein
-
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 -
Das geht aber nur wenn ich per Agent mir das Dokument hole.
Das Maske muss nicht eingebettet sein, nur in der Datenbank vorhanden -
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 SubDas 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. -
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. -
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.