dayscott hat geschrieben:Timo LÀsser hat geschrieben:dayscott hat geschrieben:- Code: Alles auswÀhlen
Cust.SETCURRENTKEY("Currency Code"); //damit alle Customer mit Currency Code='EUR' an einem StĂŒck stehen
Cust.SETRANGE("Currency Code",'EUR');
Cust.MODIFYALL("Currency Code",'',TRUE);
Hier besteht bei einigen NAV-Versionen die Gefahr, dass der OnModify-Trigger (entgegen dem gesetzten Parameter)
nicht durchlaufen wird.
super Sache,... wieso wird dann in der Schulung genau
das als Best Practise tituliert? -.-
Weil der Befehl MODIFYALL genau fĂŒr diese Aufgaben vorgesehen ist.
Sofern man ohne den OnModify-Trigger auskommt (situationsabhÀngig!!!), ist es auch in der Praxis die eleganteste Art.
Leider gibt es jedoch NAV-Versionen, bei denen die AusfĂŒhrung des OnModify-Triggers nicht angestossen wird (leider weiĂ ich nicht auswendig, welche Versionen dies konkret sind).
dayscott hat geschrieben:Timo LÀsser hat geschrieben:Immer dann, wenn du die Felder Ànderst, nach welchen du auch sortiert hast, besteht die Gefahr, dass
es zu einer Endlosschleife kommt
direkt nach dem ersten bearbeiteten Datensatz SchluĂ ist, da der "Cursor" an das Ende gerutscht ist
Kann man nĂ€her begrĂŒnden
warum und wann genau diese unerwĂŒnschten Seiteneffekte passieren, falls sie denn passieren?
Jetzt wird es kompliziert...
Nehmen wir das Beispiel mit dem WĂ€hrungscode:
Du sortierst danach, somit stehen die DatensĂ€tze nach WĂ€hrungscode aufsteigend zur VerfĂŒgung.
Ănderst du nun im ersten Datensatz den WĂ€hrungscode von EUR nach USD, so rutscht dieser Datensatz in der Sortierung weiter nach hinten.
(Wenn du gefiltert hast, dann sogar ausserhalb des Filters.)
Somit gibt es in der Sortierung keinen folgenden Datensatz mit WĂ€hrungscode EUR, da wir mittlerweile bei USD angekommen sind.
dayscott hat geschrieben:Timo LĂ€sser hat geschrieben:Die einzige saubere und sichere Lösung, welche mir bekannt ist, wĂ€hre, dass du die tatsĂ€chliche DatenĂ€nderung auf einer Record-Kopie durchfĂŒhrst:
- Code: Alles auswÀhlen
Cust.SETCURRENTKEY("Currency Code");
Cust.SETRANGE("Currency Code",'EUR');
IF Cust.FIND('-') THEN
REPEAT
Cust2 := Cust;
Cust2.VALIDATE("Currency Code.",'');
Cust2.MODIFY(TRUE);
UNTIL Cust.NEXT = 0
Das ist dann das Best Practise fĂŒr die Praxis?
Wie ich schon weiter oben in diesem Beitrag geschrieben habe:
Ja, wenn du den OnModify-Trigger ausfĂŒhren lassen willst.
Muss der OnModify-Trigger nicht ausgefĂŒhrt werden, so kannst du bedenkenlos
MODIFYALL verwenden.