Endgültig Löschen und Papierkorb

Mit „Löschen” kann „In Papierkorb schieben” oder „Endgültig löschen” gemeint sein. In beiden Fällen (sowie auch für das „Wiederherstellen” aus dem Papierkorb) greifen Löschberechtigungen aus der Datentabelle. Über Navigationssteuerelemente für Masken und Ansichten wird konfiguriert, ob Datensätze endgültig gelöscht oder in den Papierkorb verschoben werden. Daneben gibt es spezielle Einstellungen für die Masken in Dialogen (Hier gibt es keine Navigationskonfiguration) sowie Kalenderansichten (mit ihrer Kontextaktion zum Löschen).

Anwendungseinstellungen und -konfigurationen unterstützen keinen Papierkorb und bilden in manchen Fällen eine eigene Art von Löschabhängigkeiten ab.

In Papierkorb verschieben & Wiederherstellen

Ob ein Papierkorb verwendet wird, ist eine Einstellung der Datentabelle.

Wenn ein Papierkorb aktiviert ist, können Datensätze entweder manuell oder aber über einen täglich laufenden periodischen Hintergrundprozess automatisch endgültig aus dem Papierkorb gelöscht werden. Die Standardeinstellungen dieses Hintergrundprozesses in den Anwendungseinstellungen kann pro Datentabelle individuell angepasst werden, wodurch beispielsweise die Datensätze bestimmter Datentabellen nie automatisch endgültig gelöscht werden können.

Ansichten zeigen entweder nur Datensätze an, die sich nicht im Papierkorb befinden, oder aber nur solche im Papierkorb. Der Papierkorb (oder die Papierkörbe) einer Anwendung sind also einfach nur als Ansichten zu konfigurieren. Kalenderansichten können nicht als Papierkorb konfiguriert werden.

Für Datensätze im Papierkorb und die Papierkorb-Funktionalität allgemein gilt:

  • Sie werden in Ansichten nicht angezeigt (Ausgenommen spezielle Papierkorb-Ansichten).
  • Kalenderansichten können keine Papierkorb-Ansicht sein.
  • Sie können nicht mehr bearbeitet werden (Damit entsprechen die Felder „Geändert von” und „Geändert am” dem Benutzer, der den Datensatz in den Papierkorb geschoben hat sowie dem Datum dieser Aktion).
  • Über das Maskensteuerelement „Löschstatus anzeigen” kann in diesen Datensätzen visualisiert werden, dass sie im Papierkorb liegen.
  • Daten, die in anderen Datensätzen über Quell-Relationen eingebunden sind, werden für Quelldatensätze im Papierkorb weiter angezeigt.
  • Sie werden von der Suche nicht gefunden. Daten aus Quelldatensätzen werden für Datensätze gefunden, die nicht im Papierkorb liegen.
  • Werden sie über einen Import aktualisiert, werden sie automatisch wiederhergestellt.
  • Für Datentabellen, die auf „Basis.Rolle” beruhen (Ausnahme: Benutzerprofile), steht kein Papierkorb zur Verfügung.
  • Auch Papierkorb-Ansichten können für OData freigegeben werden.
  • In Berichten werden entweder ausgewählte Datensätze (unabhängig ihres Lösch-Status) verarbeitet oder sie werden auf alle Datensätze einer Datentabelle angewendet (hier werden Datensätze im Papierkorb ausgeschlossen).
  • In Dashboards werden Datensätze in Papierkorb nicht angezeigt.
  • Über Formeln werden Datensätze im Papierkorb gefunden.
  • Während ein Datensatz sich im Papierkorb befindet, werden für ihn keine Workflows ausgeführt oder gestartet.

Datensätze können über entsprechende Navigationssteuerelemente für Masken und Ansichten aus dem Papierkorb wiederhergestellt werden.

Endgültig löschen

Benutzer erhalten eine Übersicht über die Anzahl endgültig zu löschender Datensätze, bevor sie die Funktion ausführen. Die Hintergrundprozesse erzeugen darüber hinaus ein Anwendungsprotokoll.

Ein endgültig gelöschter Datensatz ist in der Anwendung nicht mehr auffindbar und kann nicht wiederhergestellt werden.

Über den Customer.config-Paramter „BA:DeletionLogging” kann ein externes Protokoll aller Löschungen angelegt werden. In diesem Protokoll wird der EntityTitle der gelöschten Datensätze ausgegeben.

Über die OData-Schnittstelle können Informationen über endgültig gelöschte Datensätze abgerufen werden. Hier steht der EntityTitle nicht zur Verfügung.

Kaskadierendes Löschen und Löschabhängigkeiten

Das endgültige Löschen eines Datensatzes kann Datensätze in Ziel-Relationen berücksichtigen. Das gewünschte Verhalten kann für Ziel-Relationsdefinitionen innerhalb von Datentabellen pro Relationsdefinition festgelegt werden. Bestimmte Zieldatensätze können entweder automatisch mitgelöscht werden („kaskadierendes Löschen”) oder aber das Löschen eines Datensatzes zunächst verhindern („Löschabhängigkeit”).

Kaskadierendes Löschen erfolgt für den Benutzer transparent, das bedeutet er wird im Vorfeld nicht darüber informiert. Kaskadierendes Löschen berücksichtigt auch das Verschieben in den Papierkorb und das Wiederherstellen.

Sowohl für kaskadierendes Löschen als auch für Löschabhängigkeiten muss der Benutzer allerdings grundsätzlich Bearbeitungs- und Löschberechtigung auf alle betroffenen Datensätze haben. Die Löschadministrator-Berechtigung, welche über die Rollenverwaltung vergeben werden kann, kann sich hierüber hinwegsetzen. Das bedeutet, ein Löschadministrator kann das Löschen von Datensätzen, die er löschen darf, inklusive aller kaskadierend oder abhängig zu löschenden Datensätze unabhängig seiner Berechtigung auf diese erzwingen.

Optionen für das endgültige Löschen

In den Navigationssteuerelementen für Masken und Ansichten sowie in den Maskeneinstellungen für das Löschverhalten in Dialogen und in Kalenderansichten für das Löschen über die Kontextaktion kann der Konfigurierer folgende Vorgaben treffen:

Löschen als „In den Papierkorb verschieben”

Hierbei gibt es nicht viel zu beachten, es erfolgt keine Überprüfung abhängiger Datensätze, kaskadierende Datensätze werden transparent mit in den Papierkorb verschoben.

Die Aktion wird für Datensätze, die sich bereits im Papierkorb befinden und in Papierkorbansichten automatisch inaktiv.

Löschen als „Endgültig löschen”

Ohne weitere Optionen können Benutzer Datensätze nur endgültig löschen, wenn sie keine Löschabhängigkeiten haben und sie Löschberechtigungen auf möglicherweise vorhandene kaskadierend zu löschende Datensätze haben.

Über die Einstellung „Abhängige Datensätze endgültig löschen” können Rollen definiert werden, die beim endgültigen Löschen eines Datensatzes automatisch auch solche Datensätze endgültig löschen, zu welchen eine Löschabhängigkeit besteht und auf die der Benutzer Löschberechtigungen hat. Diese Einstellung kann noch eingeschränkt werden über die Einstellung „Nur aus Papierkorb endgültig löschen”. Hierdurch wird das Löschen abhängiger Datensätze nur auf solche eingeschränkt, die sich ebenfalls im Papierkorb befinden.

Löschadministratoren können sich entscheiden, ob sie die Überprüfung der Löschberechtigungen auf die abhängigen zu löschenden Datensätze beim Ausführen der Aktion außer Kraft setzen wollen.

Löschen als „In den Papierkorb schieben oder endgültig löschen”

Diese Kombination behandelt Datensätze ohne Papierkorb wie die Option „Endgültig löschen” und solche mit Papierkorb wie die Option „In den Papierkorb schieben”.

Löschen an anderen Stellen

In den Einstellungen für das automatische endgültige Löschen aus dem Papierkorb in den Anwendungseinstellungen sowie für den Datenimport gibt es ähnliche Optionen wie für die Navigationssteuerelemente.

Zwei Sonderfälle sind das Löschen aus einem Dialog, wofür es spezielle Einstellungen in der Maskenkonfiguration gibt, sowie das Löschen über die Kontextaktion in Kalenderansichten, wofür es entsprechende Einstellungen in der Konfiguration für Kalenderansichten gibt.

Bereinigen der Datentabellen in der Datenbank

Das endgültige Löschen entfernt die Datensätze aus Performance- und Konsistenzgründen nicht physikalisch aus der Datenbank, sondern macht sie lediglich für die Anwendung unauffindbar. Es verbleiden in der Datenbank sogenannte „Löschstubs”, die beim Bereinigen der Datentabellen endgültig entfernt werden. Erst der automatisch laufende Hintergrundprozess „Entfernung von Löschstubs” entfernt Daten physikalisch aus der Datenbank und stellt dabei die Konsistenz der Daten sicher. Das physikalische Löschen muss zu einer Zeit erfolgen, in der am besten keinerlei anderen Aktionen in der Datenbank stattfinden. Der Hintergrundprozess erzeugt immer Einträge im Serverprotokoll und im Fehlerfall auch Anwendungsprotokolle. Über einige Customer.Config-Parameter („BA:OrmPurge.*”) kann das Verhalten des Hintergrundprozesses beeinflusst werden.