Worum es geht
CDMS löscht hart. Die Zeile verschwindet aus der Datenbank, und das Objekt ist für alle Anfragen weg: Lesen liefert 404, Suchen findet es nicht, Verweise darauf sind leer. Es gibt kein Feld „gelöscht“, keinen Papierkorb und keinen Endpunkt zum Wiederherstellen. Das nennt man: kein Soft-Delete.
Was bleibt, ist die Historie, sofern das Modell auditiert ist. Auditiert heißt: CDMS schreibt zu jeder Änderung eine Revision, also einen gespeicherten Stand mit Zeitpunkt und Urheber. Siehe Was auditiert wird.
Der Zeitstrahl eines Objekts
flowchart LR
A["ADD<br/>angelegt"] --> M1["MOD<br/>geändert"] --> M2["MOD<br/>geändert"] --> D["DEL<br/>gelöscht"]
D -.-> X["Lesen: 404<br/>Rollback: 404<br/>Historie: lesbar"]
Jede Revision hat einen Typ: ADD für das Anlegen, MOD für jede Änderung, DEL für das Löschen. Die DEL-Revision sagt, wer wann gelöscht hat. Ihre Felder sind leer, außer der id. Den letzten Inhalt vor dem Löschen findest du in der Revision davor.
Die Historie nach dem Löschen
Die Historie liest du wie bei einem bestehenden Objekt, mit seiner id:
POST /api/rest/order/7e1…/history
{ "response": ["id", "orderNr", "price"] }{ "data": [
{ "revision": { "id": "7e1…", "orderNr": null, "price": null },
"revisionMeta": { "ref": 57, "username": "ben", … },
"revisionType": "DEL" },
{ "revision": { "id": "7e1…", "orderNr": "A-1000", "price": 120.5 },
"revisionMeta": { "ref": 42, "username": "anna", … },
"revisionType": "MOD" },
{ "revision": { "id": "7e1…", "orderNr": "A-1000", "price": 90.8 },
"revisionMeta": { "ref": 17, "username": "anna", … },
"revisionType": "ADD" }
],
"meta": { … } }Dafür brauchst du die Leserolle und die Historienrolle des Modells, und das Modell muss den History-Endpunkt haben. Siehe Historie lesen.
Was bleibt, was weg ist
- das Objekt ist weg
- die Historie bleibt: alle Revisionen bis zur Löschung
- wer wann gelöscht hat
- abhängige Kinder: jedes mit eigener Historie, sofern ihr Modell auditiert ist
- Dateiinhalt und Versionen sind weg
- das Objekt ist weg
- es bleibt nichts davon in CDMS
- Dateiinhalt ist weg
Zu Dateien siehe Datei-Modelle löschen.
Kein Rollback für Gelöschtes
Ein Rollback setzt ein bestehendes Objekt auf den Stand einer älteren Revision zurück. Für ein gelöschtes Objekt geht das nicht:
-
1Client→CDMSschickt
POST /order/7e1…/rollback/42 -
2CDMSsucht das Objekt mit den Filtern des Lesens
-
3CDMS→Clientgibt es nicht mehr → 404
not-found|<Dto>|<id>Ergebnis: Nichts wird angelegt. Die Historie bleibt unverändert.
Ein Objekt behält seine id für immer, und eine gelöschte id wird nicht neu vergeben. Deshalb kann CDMS ein gelöschtes Objekt nicht unter seiner alten id zurückholen. Siehe Auf einen alten Stand zurücksetzen.
Einen alten Stand neu anlegen
Brauchst du ein gelöschtes Objekt wieder, lege es neu an:
-
1Client→CDMSliest die Historie und nimmt die Revision vor der
DEL-Revision -
2Client→CDMSschickt deren Felder ohne
idanPOST /order/create -
3CDMS→Databaselegt ein neues Objekt anErgebnis: Das neue Objekt hat eine neue
id, ein neues_createdOnund eine eigene, neue Historie. Die alte Historie bleibt unter der altenid. Abhängige Kinder und Dateiinhalte musst du ebenso neu anlegen.
Fallen
Wie es weitergeht
- Die Schritte eines DELETE: Der Ablauf eines DELETE
- Revisionen lesen: Historie lesen
- Was eine Revision enthält: Was eine Revision festhält