CodamAIDocs
Themafertig

Datei-Modelle löschen

Beim Löschen eines Datei-Modells verschwinden der Datensatz, der Dateiinhalt und alle aufbewahrten Versionen. Die Historie des Datensatzes bleibt, der Inhalt nicht.

Ausprägungen
direkt gelöschtmitgelöscht über DELETE-Flag (1:1, 1:n)durch PUT/PATCH aus dem Elternobjekt entferntgeteilte Datei (n:1, n:m) → bleibtalle Versionen weg

Worum es geht

Ein Datei-Modell besteht aus zwei Teilen: dem Datensatz in der Datenbank (Name, Größe, fileId und deine eigenen Felder) und dem Inhalt im Dateispeicher. Bei auditierten Datei-Modellen liegen dort außerdem die alten Versionen jedes Uploads. Siehe Dateiversionen.

Wird der Datensatz gelöscht, löscht CDMS den Inhalt mit, und zwar alle Versionen. Ein Datei-Modell, dessen Datensatz weg ist, hat keinen lesbaren Inhalt mehr. Das ist wichtig für personenbezogene Daten: Eine Löschung ist erst dann eine Löschung, wenn auch die Bytes weg sind.

Datensatz und Inhalt

  1. 1
    Client→CDMS
    schickt DELETE /fileasset/delete/f1…
  2. 2
    CDMS
    prüft Sichtbarkeit und Löschrolle des Datei-Modells
  3. 3
    CDMS→File storage
    merkt vor, den Inhalt zu entfernen: die aktuelle Datei und alle aufbewahrten Versionen
    Vorgemerkt wird im Löschablauf, sobald CDMS den Datensatz erreicht. Entfernt wird erst nach dem Commit der Datenbank.
  4. 4
    Hook
    DELETE-Hooks laufen
  5. 5
    CDMS→Database
    entfernt den Datensatz und committet
  6. 6
    CDMS→File storage
    entfernt den Inhalt samt Versionen
    Ergebnis: 200 ohne Körper. GET /fileasset/f1…/file liefert danach 404.

Im Dateispeicher sieht das so aus, für ein auditiertes Datei-Modell mit drei Uploads:

Datei im Speichervorhernachher
<fileId> (aktueller Inhalt)„Fassung drei“gelöscht
<fileId> + Versionskennung„Fassung zwei“gelöscht
<fileId> + Versionskennung„Fassung eins“gelöscht

Welche Dateien mitgehen

Eine Datei kann an einem anderen Objekt hängen, etwa das Logo einer Firma oder die Anhänge einer Akte. Ob sie beim Löschen dieses Objekts mitgeht, entscheidet wie immer das DELETE-Flag. Siehe Abhängige Objekte (Kaskaden).

Das Elternobjekt wird gelöscht. Was passiert mit der Datei?
BeziehungBeispielFlag DELETEDatei
1:1Company.logojaDatensatz und Inhalt gelöscht
1:nDossier.attachmentsjajeder Anhang gelöscht, mit Inhalt
n:1Dossier.template, eine Vorlage für viele Aktenneinbleibt mit Inhalt, auch wenn keine Akte mehr darauf zeigt
n:m über ein VerbindungsmodellDossier.assets → Dossier2Asset.assetan der Verbindung ja, an der Datei neindie Verbindungen gehen, die Datei bleibt

Eine geteilte Datei bleibt also bestehen, auch wenn das letzte Objekt gelöscht wird, das auf sie zeigt. CDMS räumt sie nicht von selbst weg. Brauchst du sie nicht mehr, lösche sie direkt.

Durch PUT oder PATCH entfernt

Fällt ein abhängiger Anhang durch PUT oder PATCH aus seiner Liste, wird er gelöscht, und zwar ebenfalls mit Inhalt und Versionen. Siehe Löschen durch Ändern.

Etwas anderes ist es, eine Datei zu ersetzen: Ein neuer Upload am selben Datensatz löscht nichts, bei auditierten Modellen wird der alte Inhalt zur Version. Siehe Ersetzen und Umbenennen.

Was von einer gelöschten Datei bleibt

Nach dem Löschen eines auditierten Datei-Modells
Bleibt
  • die Historie des Datensatzes: Name, Größe, wer wann hochgeladen und gelöscht hat
Ist weg
  • der Datensatz
  • der aktuelle Inhalt
  • alle Versionen
  • jeder Weg, einen alten Inhalt herunterzuladen

Die Historie zeigt also, dass es die Datei gab und wie sie hieß, aber nicht mehr, was drinstand. Siehe Was nach dem Löschen bleibt.

Fallen

Wie es weitergeht

Quellen im Code und in der Wissensdatenbank
  • CDMS/cdms-system-layer – AbstractLayer.recursiveDelete (FileInterface → fileStorage().stageDeletion, followTransaction)
  • CDMS/cdms-localfs-storage – LocalFSFileController.deleteFile (listSideFiles: Versionen und liegengebliebene Zwischendateien)
  • CDMS/cdms-integrationtest – AbstractRecursiveFileDeleteTest (1:1, 1:n, n:1, n:m), AbstractFileRollbackTest.deleteRemovesEveryUploadOfTheRecord, aRefusedDeleteKeepsTheContentAndItsHistory
  • documentation/05-api-guide/06-schreiben.md, 20-api/04-schreibsemantik.md, 30-daten-und-persistenz/05-dateien-und-storage.md
Suchen