[gelöst] Aktualisierung von Feldern

26. Februar 2016 10:13

Hallo Ihr,

ich habe ein neues FlowField eingefügt und möchte es immer dann neu berechnen lassen, wenn ich den Wert eines anderen Feldes ändere. Ich nutze im OnValidate des geänderten Feldes dafür die CALCFIELDS-Funktion der Tabelle. Wenn ich jetzt die UPDATE-Funktion der Page ausführe, kommen die neuen Werte schön an. Es dauert halt nur eine Ewigkeit. Ich vermute, er berechnet beim Update noch viele andere Felder (die sich aber gar nicht ändern). Gibt es eine Möglichkeit, ganz gezielt nur ein Feld auf der Page zu aktualisieren? Oder dies nur für bestimmte Datensätze zu tun?

Viele Grüße,
Uta
Zuletzt geändert von UGo am 29. Februar 2016 16:13, insgesamt 1-mal geändert.

Re: Aktualisierung von Feldern

26. Februar 2016 10:25

Hallo Uta,

weißt du denn, was ein Flowfield ist und macht?

"... If a FlowField is the direct source expression of a control on a page, then the FlowField is automatically calculated when the page is displayed."


zur Aktualisierung des Wertes deines Flowfields, sobald sich der Wert eines Feldes ändert, kannst du über die Update-Funktion erreichen.
Vereinfacht ausgedrückt - wenn du den Wert des entspr. Feldes änderst, aktualisiert sich der Wert deines Flowfields noch nicht - wenn du aber mal F5 drückst, dann sollte
im Flowfield der neuberechnete Wert enthalten sein.
Damit du nicht immer F5 drücken musst, nutzt du an der entspr. Stelle (Validate des Feldes auf d. Page) eine CurrPage.UPDATE

https://msdn.microsoft.com/en-us/library/dd301466.aspx


Somit kannst du die CALCFIELDS-Fkt weglassen

Re: Aktualisierung von Feldern

26. Februar 2016 10:41

Vielen Dank für den Hinweis. Stimmt - ich kann CALCFIELDS auch weglassen. Nur habe ich immer noch das Problem, daß ein Update auf der Page mehrere Sekunden dauert weil viele Flowfields berechnet werden.
Kann man das irgendwie gezielter anstoßen?

Re: Aktualisierung von Feldern

26. Februar 2016 11:45

UGo hat geschrieben:Kann man das irgendwie gezielter anstoßen?


du meinst gezielt nur ein Flowfiel neuberechnen lassen?
das leider so nicht - macht auch eigentl. keinen Sinn. ---> Wozu brauche ich die restl. Flowfields auf der Page, wenn die Infos mich nicht interessieren

Wenn somit die anderen Flowfields "unnötig" sind, dann könntest du die von der Page entfernen und so die Performance steigern

letztendlich kannst du auch noch am SQL-Server schrauben, um dort ggf. zu optimieren.
hier mal eine alte Diskussion

http://forum.mibuso.com/discussion/45326/effect-on-performance-when-adding-new-flowfield-in-a-table

Re: Aktualisierung von Feldern

26. Februar 2016 16:49

UGo hat geschrieben:Nur habe ich immer noch das Problem, daß ein Update auf der Page mehrere Sekunden dauert weil viele Flowfields berechnet werden.

Ich lehne mich mal weit aus dem Fenster und behaupte, dass nicht die FlowFields auf der Page das Problem sind, sondern Funktionsaufrufe (z. B. im OnAfterGetRecord, OnAfterGetCurrRecord, OnFind bzw. als SourceExpression in den Controls).
Der CurrPage.UPDATE sorgt nämlich nicht nur für die Neuberechnung der FlowFields, sondern auch dafür, dass die o. g. Trigger erneut durchlaufen werden.

Sofern sich auf der Page viele berechnete Werte befinden, welche jedoch nur relativ selten und/oder von relativ wenigen Anwendern benötigt werden, so ist es sinnvoller, diese in eine neue Page auszulagern (wie z. B. die Statistiken).
Wenn ein Anwender dann mal wirklich die Werte benötigt, ruft er sich (evtl. auch über eine Tastenkombination) die Statistik-Page auf und hat alles Werte auf einen Blick.
In der restlichen Zeit profitieren alle Anwender von der deutlich besseren Performance.

Re: Aktualisierung von Feldern

29. Februar 2016 15:34

Hallo Timo,

habe jetzt erstmal gründlich die FlowFields in der Seite aussortiert.
Und Du hast Recht - es gibt noch zwei über Code berechnete Felder, die beim onAfterGetRecord aktualisiert werden. Man könnte sie auch als FlowFields abbilden, aber sie errechnen sich selbst aus FlowFields. Könnte das der Grund sein, warum im Code erstmal die "Basis-Flowfields" kalkuliert und dann meine beiden daraus berechnet werden?
Wenn ich einige der seltener benötigten Informationen in eine Infobox packe, wird die Aktualisierung dann auch schon schneller? Schließlich bezieht sich so eine Infobox ja immer nur auf einen Datensatz. Oder sollte man wirklich eine eigene Page erstellen und diese erst dann aufmachen wenn die Info abgerufen wird?

Viele Grüße,
Uta

Re: Aktualisierung von Feldern

29. Februar 2016 15:46

UGo hat geschrieben:Wenn ich einige der seltener benötigten Informationen in eine Infobox packe, wird die Aktualisierung dann auch schon schneller?
Nein, denn dann werden die Daten ja weiterhin automatisch berechnet, wenn der Datensatz "betreten" wird.

UGo hat geschrieben:Oder sollte man wirklich eine eigene Page erstellen und diese erst dann aufmachen wenn die Info abgerufen wird?
Das wäre die optimale Lösung, denn dann würden die Daten erst berechnet, wenn der Anwender sie wirklich sehen möchte/muss.

Re: Aktualisierung von Feldern

29. Februar 2016 15:54

o.k. - verstanden.
Noch eine letzte Frage: Kann man FlowFields aus FlowFields der gleichen Tabelle berechnen oder muss man das tatsächlich im Code abbilden?

Re: Aktualisierung von Feldern

29. Februar 2016 16:13

Hab's gerade ausprobiert. FlowFields lassen sich nur aus Dezimalwerten berechnen, nicht aus anderen Flow Fields.

Re: [gelöst] Aktualisierung von Feldern

29. Februar 2016 17:23

FlowFields dürfen nicht auf FlowFields basieren.

In manchen Build-Versionen von NAV hat es den Anschein, als wenn es doch möglich wäre, doch dann auch nur, wenn die zugrundeliegenden FlowFields ebenfalls in der Form/Page sichtbar sind.
Dieses Verhalten ist jedoch keineswegs von Microsoft beabsichtigt und könnte als Bug eingestuft und in einem anderen Build geändert werden, so dass die scheinbare Lösung plötzlich nicht mehr funktioniert.
(Ich konnte dieses Verhalten schon in so mancher Build-Version reproduzieren, jedoch nicht in allen. Wie es aktuell aussieht entzieht sich jedoch meiner Kenntnis.)