[Gelöst] On Validate eines Feldes starten

22. März 2007 17:03

Hallo,

ich habe beim Onvalidate eines Feldes eine Funktionalität hinterlegt die dann Daten in andere Tabellen schreibt. Es gibt nun viele Zeilen wo man das Validate dieses Feldes ausführen müsste, das artet ziemlich in arbeit aus (Runter und F8 usw.).

Kann ich irgendwie den OnValidate dieses Feldes für alle Zeilen starten? Also das der Anwender eine Schalftfläche klickt und dann entsprechend für alle zutreffenden Zeilen das Validate ausgeführt wird?
Zuletzt geändert von tesarolle am 22. März 2007 18:05, insgesamt 1-mal geändert.

22. März 2007 17:07

Code:
Setze Filter nach deinen Kriterien auf Variable Record;
Record.FIND('-');
REPEAT
   Record.VALIDATE(...);
UNTIL Record.NEXT = 0;

22. März 2007 17:28

Hallo vielen Dank,

also ich habe folgenden Code:

Code:
BEGIN
  rec_WARENEINGANG.SETRANGE("No.", "No.");
  rec_WARENEINGANG.SETRANGE(KUNUMMER, KUNUMMER);
  rec_WARENEINGANG.MODIFYALL(STATUS, STATUS::WARENAUSGANG, TRUE);


Und wenn der ausgeführt wird soll nach der Änderung des Status sofort pro Satz der Validate ausgeführt werden, muss ich das dann in die Schleife von Dir einbauen? Oder würde das auch einfacher gehen?

22. März 2007 17:32

Du meinst den Validate von Feld Status?
der wird doch ausgeführt, wenn du als letzten Parameter des Modifyall-Befehls TRUE setzt, und laut deinem Code ist das so.....

22. März 2007 17:36

Entweder MODIFYALL oder REPEAT-Schleife (auch ich vermisse kläglichst ein VALIDATEALL).

Du musst also eine REPEAT-Schleife einbauen. In diese gehört vor das VALIDATE ein MODIFY statt MODIFYALL.

22. März 2007 17:37

Michael Schumacher hat geschrieben:Du meinst den Validate von Feld Status?
der wird doch ausgeführt, wenn du als letzten Parameter des Modifyall-Befehls TRUE setzt, und laut deinem Code ist das so.....


Das TRUE steuert nur den OnModify-Trigger und nicht den OnValidate-Trigger.

22. März 2007 17:48

Also ich bin immer noch an der Sache mit dem Status usw.

Ja ich meine den on validate des feldes status.

Ich habe im Kopf Bereich eine Schaltfläche, die mir Zeilenbereich in allen Zeilen (No,KUNUMMER) den Status auf WARENAUSGANG setzt. Ich habe jetzt auf der Form ins VALIDATE des Feldstatus sowie in der Tabelle im Validate des Feldes Status meine Funktion drin, aber leider führt er den validate nicht aus.

Wenn ich hingegen manuell den status von "wareneingang" auf "warenausgang" ändere führt er mir die funktionalität ordnungsgemäß aus.

22. März 2007 17:50

Ohje, jetzt verstehe ich glaub nur noch Bahnhof. Wie soll ich den in den Code eine schleife unterkriegen? :-)

Code:
BEGIN
  rec_WARENEINGANG.SETRANGE("No.", "No.");
  rec_WARENEINGANG.SETRANGE(KUNUMMER, KUNUMMER);
  rec_WARENEINGANG.MODIFYALL(STATUS, STATUS::WARENAUSGANG, TRUE);

22. März 2007 17:57

Code:
rec_WARENEINGANG.SETRANGE("No.", "No.");
rec_WARENEINGANG.SETRANGE(KUNUMMER, KUNUMMER);
IF rec_WARENENIGANG.FIND('-') THEN
 REPEAT
   rec_WARENEINGANG.STATUS := rec_WARENEINGANG.STATUS::WARENAUSGANG;
   rec_WARENEINGANG.VALIDATE(....);
   rec_WARENEINGANG.MODIFY(TRUE);   
 UNTIL rec_WARENEINGANG.NEXT = 0;

22. März 2007 18:05

Vielen Dank an Euch beide! SUPER!!!!!

Hat auf Anhieb funktioniert! :oops: !

Schönen Feierabend! Morgen verschone ich das Forum mit meinen Beiträgen *g*!

22. März 2007 20:22

Natalie hat geschrieben:Das TRUE steuert nur den OnModify-Trigger und nicht den OnValidate-Trigger.

Siehste, auch mir passieren mal Fehler :oops: Du hast natürlich Recht!

Online Hilfe hat geschrieben:Please note that the OnValidate trigger is never executed when MODIFYALL is used.

9. Oktober 2007 08:41

Hallo zusammen,

mal ne grundsätzliche Frage zu MODIFYALL vs. Repeat mit Validate. Ich hatte vor kurzem den Fehler gemacht, dass ich auf eine Tabelle ein filterspezifisches MODIFYALL gemacht habe, dabei kam es allerdings zu einigen Fehlern, weil der OnValidate-Trigger des Feldes nicht ausgeführt wurde.
Macht es überhaupt Sinn das MODIFYALL zu verwenden oder ist es nicht besser immer eine Schleife mit einem Validate zu machen?

Ich frage deshalb, weil es ja nicht unbedingt viele Fälle gibt, wo man nur die Felder ändert und selbst da ist es doch kein Problem, einfach 2 Zeilen mehr Code zu schreiben, oder? Und wenn man ein Validate macht ist man doch immer auf der sicheren Seite, auch wenn es natürlich Fälle gibt, wo das umgangen werden muss.

Ist jetzt mal reine Neugier von mir, ich bin für mich aber ziemlich sicher, dass ich MODIFYALL nicht mehr so schnell verwenden werde, dann lieber eine Schleife und ein simples Modify ;-)