[Gelöst] Funktion nach OnDelete ausführen?

9. Februar 2007 11:14

Hi,

ich habe eine Tabelle, und "muss" nach löschen einer Zeile eine Funktion ausführen. Geht das ? der OnDelete() Trigger wird ja vor dem löschen ausgeführt, da kann ich also nicht den FUnktionsaufruf reinsetzen.

Ich könnte die Funktion aufrufen, und die zu löschende Zeile nicht berücksichtigen, da ich mittels der Funktion, aber eine Feld, das mit ein Key belegt ist, ändere, führt das dazu das ich ein doppelten Datensatz habe.

Oder Ich ändere erst die zu löschende Zeile, führe dann meine Funktion aus, und lösche anschl. die zu löschende Zeile.

Wie würdet Ihr das machen?


Danke.
Zuletzt geändert von elTorito am 9. Februar 2007 14:29, insgesamt 1-mal geändert.

9. Februar 2007 11:43

Kommt auf die danach auszuführende Funktion an! Was soll sie denn grob machen? Inwiefern arbeitet sie mit dem zu löschenden Datensatz?

9. Februar 2007 11:47

Handelt sich dabei um eine SortierFunktion.
Nach Eintragen/Modifizieren/Löschen müssen alle Datensaetze ein Feld überschrieben bekommen.

Naja. Eigentlich nur beim eintragen/löschen.... Ich fange bei 1 an... zaehle hoch... Wenn nun ein Datensatz irgendwo in der Mitte hinzukommt, oder einer Weggelöscht wird, müssen die SortierNr der Felder alle anderen Datensaetze neue nummeriert werden. So das ich immer fortlaufende Nummern habe.

9. Februar 2007 11:53

Das heißt, du würdest nach Löschung dir alle verbleibenden Datensätze angucken.... Wie wäre es, wenn du an dieser Stelle einen Filter setzt, der dir den zu löschenden Datensatz einfach auslässt?
Oder Falls du diese DS in einer REPEAT-Schleife abarbeitest, zu Anfang in einer IF-Abfrage klären, ob es sich um den Lösch-DS handelt.

So, und ganz andere Möglichkeit: Muss die Löschfunktion unbedingt auf Tabellenebene greifen?
Wäre es nicht sinnvoller, in deiner Form eine Funktion zu hinterlegen, die die Sortiernummern neu belegt? Diese müsste dann nach dem Löschen manuell angestoßen werden.
Oder aber (ich weiß nicht, ob das möglich ist), du belegt diese Funktion mit dem Shortcut F4 und führst in dieser Funktion nacheinander Delete und die Neusortierung durch.

Wirres Zeug - hoffe du verstehst mich *g*

9. Februar 2007 11:56

Ich habs gerade in einem Modul nachgeschaut - es geht!
Also, lege auf deine Form eine Löschfunktion mit Shortcut F4.

9. Februar 2007 14:29

Das mit dem Shortcut hat irgendwie nicht funktioniert. So scheint es nun zu funktionieren:

Code:

NeueZeilenNr := 0;
IF CONFIRM('Sicher das Sie diesen Artikel aus der Zeile löschen möchten?',TRUE) THEN BEGIN
  ModArtZeilen.RESET;
  ModArtZeilen.SETFILTER(Shopname, Shopname);
  ModArtZeilen.SETFILTER(Kategorie, Kategorie);
  ModArtZeilen.SETFILTER(LineNo, '<>%1', LineNo);
  IF ModArtZeilen.FIND('-') THEN
    REPEAT
      NeueZeilenNr := NeueZeilenNr + 1;
      ModArtZeilen.Sortiernr := NeueZeilenNr;
      ModArtZeilen.MODIFY();
  UNTIL ModArtZeilen.NEXT = 0;
END ELSE BEGIN
  ERROR('NICHTS GEÄNDERT');
END;



Im Ondelete Trigger hab ich dann den FUnktionsaufruf stehen:

renameSortierNrAfterDelete(Shopname, Kategorie, LineNo);

9. Februar 2007 14:30

Nur aus Neugier: Was hat denn mit dem Shortcut nicht geklappt?

9. Februar 2007 14:45

Natalie hat geschrieben:Nur aus Neugier: Was hat denn mit dem Shortcut nicht geklappt?


Hab ein Form, mit ein SubForm. Die zu löschende Zeile ist im Subform.
Habe dort ein Menu Button implementiert, und Shortcut nur "F4", die Anwendung hat sich dann bei drücken von F4 ins Nirvana verabschiedet, schien irgendwie in endlosschleife zu laufen ;-) Selbst wenn ich kein C/AL Code hinterlegte. Dito andere Shortcuts, welche sich nicht über shortcut aufrufen ließen , sondern nur über den Menü Button. Strange.. aber da kam ich irgendwie nicht mit weiter ...