[Gelöst] Subscriber OnBeforeDeleteEvent auf Table Item

21. Januar 2019 11:00

Hi,

ich soll eine Abfrage realisieren damit bestimmte Benutzer nicht ausversehen Artikel/Debitor/Vendors löschen...
(Geht bestimmt auch über Zugriffsrechte, die muss ich aber erst noch einrichten)

Habe von der Tabelle Item das Event OnBeforeDeleteEvent abonniert.

Code:
LOCAL [EventSubscriber] OnBeforeDeleteItem(VAR Rec : Record Item;RunTrigger : Boolean)
CompanyUserSetup.GET(USERID);
IF NOT CompanyUserSetup."Allow Delete Item" THEN
    ERROR('Artikel löschen nicht erlaubt');


der wird allerdings auch ausgelöst wenn versucht wird ein Artikel über ein Auftrag zu buchen.
Und zwar in der Codeunit 5895 Inventory Adjustment, Funktion CopyItemToItem

Code:
LOCAL CopyItemToItem(VAR FromItem : Record Item;VAR ToItem : Record Item)
WITH ToItem DO BEGIN
  RESET;
  DELETEALL;
  IF FromItem.FINDSET THEN
    REPEAT
      ToItem := FromItem;
      INSERT;
    UNTIL FromItem.NEXT = 0;
END;


Verstehe nicht was diese Funktion macht, es sind dort auch keine Temporären Tabellen.
Der Artikel wird gelöscht und neu angelegt?

Besser OnDeleteRecord Event auf der Item Page Card abonnieren?

Danke
Zuletzt geändert von elTorito am 21. Januar 2019 11:38, insgesamt 1-mal geändert.

Re: Subscriber OnBeforeDeleteEvent auf Table Item

21. Januar 2019 11:18

Hallo,

generell kannst du nicht ausschließen, das irgendeine Tabelle temporär benutzt wird, deshalb sollte dein Subscriber immer darauf prüfen.
Hast du mehrere Mandanten, und verwendest CHANGECOMPANY, dann sollte dein Subscriber auch prüfen, ob er im richtigen Mandanten ist. Denn anders als beim normalen OnDelete- Trigger wird ein Subscriber immer ausgeführt, auch beim DELETE(FALSE). Daher solltes du RunTrigger abfragen, der ein kompatibles Verhalten ermöglicht.

Und JA, wenn du verhindern möchtest, das jemand versehentlich Artikel löscht, ist es in diesem Fall besser den Event in der Page zu subscriben.

Re: Subscriber OnBeforeDeleteEvent auf Table Item

21. Januar 2019 11:38

Danke Dir.

Re: [Gelöst] Subscriber OnBeforeDeleteEvent auf Table Item

21. Januar 2019 11:50

elTorito hat geschrieben:...der wird allerdings auch ausgelöst wenn versucht wird ein Artikel über ein Auftrag zu buchen.
Und zwar in der Codeunit 5895 Inventory Adjustment, Funktion CopyItemToItem...

Interessantes Vorgehen.

Die Parameter werden "by reference" übergeben und kommen im Ursprung aus der Funktion "MakeMultiLevelAdjmt". Und da ist die Tabelle temporär. Und damit ist sie auch beim Löschen temporär.

Das Erste was ich mache, wenn ich einen neuen Subscriber anlege, ist daher immer

Code:
IF Rec.ISTEMPORARY THEN
  EXIT;


Aber der Weg über die PageAction ist auch gut. Allerdings solltest du dann schauen, ob es nicht eine andere Page gibt, wo das Löschen dann möglich ist.
Zuletzt geändert von m_schneider am 22. Januar 2019 09:16, insgesamt 1-mal geändert.

Re: [Gelöst] Subscriber OnBeforeDeleteEvent auf Table Item

21. Januar 2019 16:27

Eigentlich reicht ja die Meldung "Möchten Sie den Datensatz wirklich löschen/umbenennen?" Aber solche Meldungen lesen ist nicht jedermanns Sache ;-)

Danke für den Tipp mit Abfrage auf ISTemporary.