delete()

Löscht ein bestehendes ECM-Objekt. Das Objekt wird standardmäßig in den Papierkorb verschoben — mit hard_delete=True wird es dauerhaft entfernt.

Das zu löschende Objekt kann entweder über eine Modell-Instanz oder direkt über object_id und object_type angegeben werden.

1. Signatur

  • Sync

  • Async

ecm.dms.delete(
    model: ECMFolderModel | ECMRegisterModel | ECMDocumentModel | int,
    object_type: int | str | None = None,
    *,
    hard_delete: bool = False,
    delete_cascading: bool = False,
) -> None
await ecm.dms.delete(
    model: ECMFolderModel | ECMRegisterModel | ECMDocumentModel | int,
    object_type: int | str | None = None,
    *,
    hard_delete: bool = False,
    delete_cascading: bool = False,
) -> None

2. Parameter

Parameter Standard Beschreibung

model

Das zu löschende Objekt — entweder eine Modell-Instanz mit gesetzter id oder eine plain int-ID (dann muss object_type angegeben werden).

object_type

None

Nur erforderlich, wenn model ein int ist. Identifiziert den Objekttyp: int für eine numerische Typ-ID oder str für den internen Namen.

hard_delete

False

Bei True wird das Objekt dauerhaft gelöscht (HARDDELETE=1) und nicht in den Papierkorb verschoben.

delete_cascading

False

Bei True werden alle Kindobjekte rekursiv mitgelöscht (DELETECASCADING=1). Sinnvoll für Ordner oder Register mit Unterstruktur.

3. Ausnahmen

ValueError

model ist ein int, aber object_type wurde nicht angegeben.

ValueError

model ist eine Modell-Instanz mit id = None.

4. Beispiele

4.1. Objekt nach Abfrage löschen

Der häufigste Anwendungsfall: Objekt zuerst laden, dann löschen.

  • Sync

  • Async

folder = ecm.dms.get(InvoiceFolder, 12345)
ecm.dms.delete(folder)
folder = await ecm.dms.get(InvoiceFolder, 12345)
await ecm.dms.delete(folder)

4.2. Löschen per object_id und internem Namen

Ist die ID bekannt, muss das Objekt nicht vollständig geladen werden. Der interne Name des Objekttyps wird als object_type übergeben:

  • Sync

  • Async

ecm.dms.delete(12345, "InvoiceFolder")
await ecm.dms.delete(12345, "InvoiceFolder")

4.3. Löschen per object_id und numerischer Typ-ID

Alternativ kann die numerische Typ-ID verwendet werden, falls der interne Name nicht bekannt ist:

  • Sync

  • Async

# Typ-ID z.B. aus get_object_type_by_id() ermitteln
type_id = ecm.dms.get_object_type_by_id(12345)
ecm.dms.delete(12345, type_id)
type_id = await ecm.dms.get_object_type_by_id(12345)
await ecm.dms.delete(12345, type_id)

4.4. Dauerhaft löschen (ohne Papierkorb)

Mit hard_delete=True wird das Objekt endgültig entfernt und kann nicht wiederhergestellt werden:

  • Sync

  • Async

ecm.dms.delete(12345, "InvoiceFolder", hard_delete=True)
await ecm.dms.delete(12345, "InvoiceFolder", hard_delete=True)

4.5. Ordner mit gesamter Unterstruktur löschen

Mit delete_cascading=True werden alle untergeordneten Register und Dokumente mitgelöscht:

  • Sync

  • Async

ecm.dms.delete(42, "InvoiceFolder", delete_cascading=True)
await ecm.dms.delete(42, "InvoiceFolder", delete_cascading=True)

4.6. Alle Treffer einer Abfrage löschen

Objekte stapelweise löschen: in jeder Iteration wird eine begrenzte Anzahl abgerufen und gelöscht, bis keine Treffer mehr zurückkommen. So wird der Speicher nicht unnötig belastet und das seitenbasierte Paging von stream() umgangen.

  • Sync

  • Async

while True:
    batch = (
        ecm.dms.select(InvoiceFolder)
        .where(InvoiceFolder.Year == 2020)
        .limit(100)
        .execute()
    )
    if not batch:
        break
    for folder in batch:
        ecm.dms.delete(folder, hard_delete=True, delete_cascading=True)
while True:
    batch = await (
        ecm.dms.select(InvoiceFolder)
        .where(InvoiceFolder.Year == 2020)
        .limit(100)
        .execute()
    )
    if not batch:
        break
    for folder in batch:
        await ecm.dms.delete(folder, hard_delete=True, delete_cascading=True)

5. Siehe auch

  • get() — Einzelnes Objekt anhand seiner ID laden

  • select() — Objekte mit typisiertem Modell abfragen

  • insert() — Neues Objekt anlegen