Tabelle 37 / Verkaufszeile - Onvalidate Feld No.

3. März 2007 21:15

Ich habe laut einer Schulungsunterlage in der Tabelle 37 - Verkaufszeile beim Feld No. beim OnValidate Trigger beim Abschnitt

CASE Type OF
...
...
Type::Item:
..
..
Qualitätsklasse := Item.Qualitätsklasse;
....

das Feld Qualitätsklasse aus dem Artikel zugewiesen. Funktioniert auch.

Nun zur Frage - wo (Funktion) findet der update der Tabelle statt?
Danke

4. März 2007 00:24

Was für ein Update der Tabelle meinst du?

Du befindest dich mitten in der Tabelle, deren Feld geändert werden soll. In dem Augenblick, wo du die Qualitätsklasse zuweist, ist dieser Wert gespeichert, ohne dass du mit MODIFY etc. arbeitest. Dies funktioniert aber wie gesagt nur, weil du dich direkt auf der betroffenen Tabelle befindest.

4. März 2007 02:27

wenn du den genauen Zeitpunkt wissen willst, ab wann der Inhalt von externen Objekten erkannt wird:
Sobald der OnAfterValidate des Controls "No." auf der Form ausgeführt wurde ist der wert auch für externe Objekte gespeichert, vorher nur für Objekte, die aus diesem Trigger gestartet werden.

4. März 2007 12:33

Michael Schumacher hat geschrieben:Sobald der OnAfterValidate des Controls "No." auf der Form ausgeführt wurde ist der wert auch für externe Objekte gespeichert, vorher nur für Objekte, die aus diesem Trigger gestartet werden.


Ist das wirklich so? Ich war bisher immer der Meinung, dass der Datensatz erst verlassen werden muss (blättern, schliessen der Form), bevor Änderungen für andere Anwender sichtbar werden.

4. März 2007 12:34

Ja, wenn ich einen Wert selber auf der Form (!) ändere. Wir reden hier aber über Änderungen auf Table-Ebene.

4. März 2007 14:02

rotsch hat geschrieben:Ich war bisher immer der Meinung, dass der Datensatz erst verlassen werden muss (blättern, schliessen der Form), bevor Änderungen für andere Anwender sichtbar werden.

Nur wenn das Property "delayed insert" auf yes steht, ist das so, wie du dachtest. Es gilt grundsätzlich: solange Du dich noch auf Feldern des Primary-Key bewegst, wird nichts gespeichert, erst wenn du diese Felder verlässt, und die o.g. property auf No (Standard) steht, wird der Satz gespeichert und ist für alle sichtbar.
Da in der Verkaufszeile das Feld "No." nicht im PK steht könnte die Änderung sofort nach ausführen des OnAfterValidate-Triggers endgültig sein. Im Falle der Verkaufszeilen-Subform allerdings nur dann, wenn im Trigger auch ein Currform.saverecord oder Currform.Update(true) steht.
Denn hier ist die eigenschaft delayed insert auf yes.

4. März 2007 14:09

Natalie hat geschrieben:Ja, wenn ich einen Wert selber auf der Form (!) ändere. Wir reden hier aber über Änderungen auf Table-Ebene.

In der Regel wird der Validate-Trigger des Feldes "no." durch eine Eingabe in der Form ausgelöst.
Kaum jemand geht hin und editiert direkt in der Tabelle ;-)
Wenn die Änderung durch Reports oder Timer ausgelöst wird ist die Änderung evtl. noch später endgültig.