Löschen verhindern von bestimmten Tabellen

22. Oktober 2014 09:25

Guten Morgen zusammen,

Ich muss eine Tabelle erstellen, in welcher ich 3 Felder habe.
"Tabellennr.", "Tabellenname" & "Löschen verhindern" (boolean).

Soweit so gut. Jetzt soll ich in dieser Tabelle, Tabellen eintragen, welche nicht gelöscht werden dürfen, um dies zu erzielen hab ich in der CU1 den OnDatabaseDelete-Trigger um die Abfrage, ob die Tabelle, welche gerade versucht zu löschen wird, überhaupt gelöscht werden darf.

Code:
IF LöschenVerhindern.GET(RecRef.NUMBER) THEN BEGIN
  IF LöschenVerhindern."Löschen verhindern" THEN
    ERROR('Löschen wurde verhindert');
END
ELSE BEGIN
bla bla bla.. der Rest der in dem Trigger schon vorher stand..


Mein Problem liegt jetzt darin, wenn ich eine Tabelle lösche, kommt er nicht einmal zu der Abfrage, und löscht sie einfach.
Hat irgendjemand eine Idee, wie ich das Problem lösen könnte?

Liebe Grüße,
Wolfie

Re: Löschen verhindern von bestimmten Tabellen

22. Oktober 2014 09:28

Was verstehst du unter "Tabelle löschen"? (Alle?) Datensätze der Tabelle löschen, oder das Tabellen-Objekt im Object Designer löschen?

Re: Löschen verhindern von bestimmten Tabellen

22. Oktober 2014 09:33

Ich meine das Tabellen Objekt.

Re: Löschen verhindern von bestimmten Tabellen

22. Oktober 2014 09:48

Codeunit 1 war dann der völlig falsche Ansatz. OnDatabaseDelte (und die anderen Trigger) prüfen Operationen an Daten (einer Tabelle), nicht an Objekten. Darum wurde der Trigger in deinem Szenario auch nicht durchlaufen.

Ich weiß auch ehrlich gesagt gar nicht, wie sich deine Anforderung überhaupt in NAV umsetzen lässt. Ich tippe eher an eine Programmierung direkt am SQL-Server.

Darf ich fragen, warum du das überhaupt brauchst? Du kannst Objekte auch im Object Designer sperren ...

Re: Löschen verhindern von bestimmten Tabellen

22. Oktober 2014 09:54

Natalie hat geschrieben:Codeunit 1 war dann der völlig falsche Ansatz. OnDatabaseDelte (und die anderen Trigger) prüfen Operationen an Daten (einer Tabelle), nicht an Objekten. Darum wurde der Trigger in deinem Szenario auch nicht durchlaufen.

Ich weiß auch ehrlich gesagt gar nicht, wie sich deine Anforderung überhaupt in NAV umsetzen lässt. Ich tippe eher an eine Programmierung direkt am SQL-Server.

Darf ich fragen, warum du das überhaupt brauchst? Du kannst Objekte auch im Object Designer sperren ...


Ah okay, verstehe. Habs gerade probiert, mit meinem aktuellen Code, kann ich tatsächlich keine Daten aus den angegebenen Tabellen löschen.

Kann dir eigentlich nicht genau sagen warum ich das brauche, hab gestern die Aufgabe von meinem Chef erhalten und versucht diese umzusetzen...
Werde sobald er da ist, wohl noch einmal mit ihm reden, vielleicht gabs ja nur Kommunikationsprobleme, und ich hab etwas falsch verstanden. :)

Liebe Grüße, Wolfie

Re: Löschen verhindern von bestimmten Tabellen

22. Oktober 2014 11:51

Aber selbst bei Datensätzen klappt es soweit ich weiß nur, wenn der Tabellen Trigger hierfür aufgerufen wurde.

Also nur bei DELETE(TRUE).

mfg,
winfy

Re: Löschen verhindern von bestimmten Tabellen

23. Oktober 2014 10:24

HI,

seit NAV 2013 wird unabhängig des Parameters für den Trigger das OnDataBaseDelete etc. ausgeführt.
Hier muss nur folgendes beachtet werden:
1. Auch temporäre Tabellen laufen durch diesen Trigger
2. Ohne Zusatz Programmierung kann diese Funktion nicht verhindert werden.
3. Beachte die Reihenfolge! Diveser Funktionen werden je nach Changelog Einrichtung nicht durchlaufen (außer man greift hier auch wieder ein;))


Mit freundlichen Grüßen,
Matthias König

Re: Löschen verhindern von bestimmten Tabellen

24. Oktober 2014 10:02

MatthiasKönig hat geschrieben:seit NAV 2013 wird unabhängig des Parameters für den Trigger das OnDataBaseDelete etc. ausgeführt.


Aha,
danke für die Info das wusste ich noch nicht.

mfg,
winfy