[gelöst] Code soll DB-Objekte löschen können

20. April 2010 11:14

Guten Tag

Habe nachfolgende Problemstellung: Ein Report soll jeweils als .fob-Datei eingelesen und ausgeführt werden. Nach erfolgreicher Ausführung sollte sich das Objekt selbst automatisch löschen bzw. das Objekt darf anschliessend nicht mehr in der Datenbank vorhanden sein (ohne dass man es manuell mit <DEL> löscht natürlich). Hat jemand einen Input für diese Problematik?

Danke für Eure Tipps!
Zuletzt geändert von blunx am 20. April 2010 12:01, insgesamt 1-mal geändert.

Re: Code soll DB-Objekte löschen können

20. April 2010 11:30

Ich habe das ganze gerade mit FORM 55555 getestet:
Code:
obj.SETRANGE(Type,obj.Type::Form);
obj.SETRANGE(ID,55555);
if obj.findset then begin
repeat
  obj.delete;
until obj.next = 0;
end;

In deinem Fall wäre der Typ natürlich Report.
Ich filtere nicht auf Company, um das Objekt überall zu löschen (sollte nur bei Tabellen relevant sein).
Der Code wird fehlerfrei ausgeführt und erfüllt seinen Zweck.
obj ist eine Variable auf die Systemtabelle Object.
Den Code im OnPostReport-Trigger ausführen.

Re: Code soll DB-Objekte löschen können

20. April 2010 11:31

Ein Objekt, das sich noch gerade selbst ausführt, kann sich nicht selbst löschen.
Ich habs zumindest nicht ausprobiert, aber wäre ich das Programm :mrgreen: , würdest du mich ganz schön durcheinander bringen! :shock:

Du kannst aber nach der Reportausführung ein Killerobjekt ausführen lassen. Dabei wird im Importbuchblatt automatisch die Löschung der enthaltenen Objekte vorgeschlagen.
Wäre vor allem dan praktisch, wenn mehrere Objekte auf einmal gelöscht werden sollen.

Bei nur einem Report wäre das schon wieder zu aufwändig ....

Re: Code soll DB-Objekte löschen können

20. April 2010 12:01

Hallo zusammen

@ Danjo: Danke! That's it! :-) Funktioniert prima.

@ Natalie:
Natalie hat geschrieben:Ein Objekt, das sich noch gerade selbst ausführt, kann sich nicht selbst löschen.
Ich habs zumindest nicht ausprobiert, aber wäre ich das Programm , würdest du mich ganz schön durcheinander bringen!

Ohne Dich durcheinanderbringen zu wollen; es geht prima! :wink:
Und Danke noch für den Mibuso-Link - für ein Report jedoch wirklich zu aufwändig.

Danke Euch für Eure Hilfe & einen guten Tag!

Re: Code soll DB-Objekte löschen können

20. April 2010 12:58

blunx hat geschrieben:Ohne Dich durcheinanderbringen zu wollen; es geht prima! :wink:

Der Code in der Form - klar, da ist ja kein Konflikt.
Aber im OnPost-Trigger des betroffenen Objektes selbst? Das muss mir einer erklären :shock:

Re: [gelöst] Code soll DB-Objekte löschen können

20. April 2010 13:06

Wieso es geht weiß ich auch nicht mit Sicherheit.
Aber ich hatte im Test die Form von sich selbst aus gelöscht (Button).
Die Form bleibt dann auch funktional geöffnet bis ich sie schliesse.
Meine Vermutung ist das die kompilierten Objekte im Client gecached werden beim RUN, und von dort aus laufen.
Das dürfte die Funktionalität sein, die es erlaubt eine CodeUnit auf SingleInstance laufen zu lassen und sie trotzdem noch zu ändern.

Re: [gelöst] Code soll DB-Objekte löschen können

20. April 2010 13:19

@ Natalie: Bin ebenso überrascht wie Du, dass man ein Objekt, welches im Zugriff ist, löschen kann?! :shock: Habe sowas ähnliches auch hinbekommen; jedoch lediglich über eine Codeunit, welche (zeitverzögert) ausgeführt wird und das Objekt löscht. Mir wäre nie in den Sinn gekommen, den Befehl direkt über das zu löschende Objekt auszuführen. :-? Die "Killer"-Variante erschien mir anfangs der einzige gangbare (aber gleichzeitig aufwändige) Weg; dank Danjo wissen wir es besser! :-)

@ Dajo: Sowas klingt plausibel.

Danke für Eure Tipps!

Re: [gelöst] Code soll DB-Objekte löschen können

20. April 2010 13:22

Da sich das jeweilige Objekt (Form, Report, Dataport, Codeunit) zur Laufzeit immer im Object Cache befindet (selbst, wenn dieser auf 0 steht), kann man das Objekt problemlos aus der Datenbank löschen.
Im Cache ist es weiterhin und wird sogar noch zuende ausgeführt.

Problematisch wird es nur, wenn in dem Report (oder was auch immer) noch andere Objekte gelöscht werden sollen, welche der Report anschließend noch benötigt.
Solange der Objekt Cache groß genug ist, befinden sich diese ebenfalls dort drin, ist er jedoch zu klein, so wird der Report wahrscheinlich ein Problem bekommen.