select_lol()
Gibt einen ECMModelQueryLolSync (sync) bzw. ECMModelQueryLolAsync (async) zurück, der Objekte über das LOL-Format (Linear Object List) abfragt.
LOL-Abfragen sind in der Regel schneller als HOL-Abfragen bei großen, flachen Ergebnismengen, da der Server eine kompakte, spaltenorientierte Zeilenmenge zurückgibt statt eines objektbasierten XML-Baums. Gegenüber select() (HOL) gibt es jedoch einige Einschränkungen.
1. Signatur
-
Sync
-
Async
ecm.dms.select_lol(model_class: type[T]) -> ECMModelQueryLolSync[T]
ecm.dms.select_lol(model_class: type[T]) -> ECMModelQueryLolAsync[T]
2. Parameter
| Name | Typ | Beschreibung |
|---|---|---|
|
|
Die Modelklasse, die den Objekttyp beschreibt. |
3. Unterschiede zu select() (HOL)
select() (HOL) |
select_lol() (LOL) |
|
|---|---|---|
Performance |
Langsamer |
Schneller bei großen, flachen Mengen |
Sortierung |
Verfügbar |
Verfügbar |
|
Verfügbar |
Nicht verfügbar |
|
Verfügbar (strukturiert) |
Nicht verfügbar (nur via Systemfelder) |
|
Verfügbar |
Nicht verfügbar |
|
Verfügbar |
Ignoriert (Server liefert keine Icons) |
|
Verfügbar |
Nicht verfügbar |
Tabellenfeld-Werte |
Typisiert, mit |
Untypisierte Rohstrings, |
|
Wenn Dateiinformationen, Basisparameter, Varianten oder hierarchische Abfragen benötigt werden, ist select() die richtige Wahl. |
4. Query-Builder Methoden
| Methode | Beschreibung |
|---|---|
|
Filterbedingungen hinzufügen. Mehrere Argumente werden mit AND verknüpft. |
|
Sortierrichtung festlegen. Die Reihenfolge der Argumente bestimmt die Sortierpriorität. |
|
Maximale Gesamtanzahl Treffer über alle Seiten (entspricht |
|
Anzahl Objekte pro Server-Anfrage (Standard: 1000). |
|
Startposition (0-basiert). |
|
Zugriffsrechte mit abrufen (befüllt |
|
Gibt nur die angegebenen Felder zurück. Ohne Argumente wird die Einschränkung zurückgesetzt. |
|
Nur Objekte aus dem Papierkorb zurückgeben. |
|
Führt die Abfrage aus und gibt eine vollständige Liste zurück (alle Seiten im Speicher). |
|
Führt die Abfrage seitenweise aus und gibt einen Generator zurück. |
5. Einschränkungen im Detail
5.1. Dateiinformationen
.file_properties() steht nicht zur Verfügung. Teilweise Datei-Metadaten sind nur über Systemfelder zugänglich, die explizit im Modell deklariert werden müssen:
| Systemfeld | Bedeutung |
|---|---|
|
Dateigröße in Bytes |
|
Anzahl der Dateien |
|
Anzahl der Dokumentseiten |
Dateiendung, MIME-Typ und MIME-Gruppe werden im LOL-Modus vom Server grundsätzlich nicht zurückgegeben.
5.2. Basisparameter
.base_params() ist nicht verfügbar — obj.system.base_params ist immer None. Audit-Metadaten sind nur zugänglich, wenn die entsprechenden Systemfelder über ecm_system_fields am Modell deklariert sind:
| Systemfeld | Bedeutung |
|---|---|
|
Ersteller-ID |
|
Erstellungsdatum |
|
GUID des Eigentümers |
|
Letzter Bearbeiter |
|
Datum der letzten Änderung |
|
Anzahl Verlinkungen |
|
Anzahl Textnotizen |
6. Beispiele
6.1. Einfache Abfrage
-
Sync
-
Async
for folder in (
ecm.dms.select_lol(InvoiceFolder)
.where(InvoiceFolder.Year >= 2020)
.order_by(InvoiceFolder.Year.DESC)
.stream()
):
print(folder.system.id, folder.Title)
async for folder in (
ecm.dms.select_lol(InvoiceFolder)
.where(InvoiceFolder.Year >= 2020)
.order_by(InvoiceFolder.Year.DESC)
.stream()
):
print(folder.system.id, folder.Title)
6.2. Selektive Felder
-
Sync
-
Async
for folder in (
ecm.dms.select_lol(InvoiceFolder)
.fields(InvoiceFolder.Title, InvoiceFolder.Year)
.stream()
):
print(folder.Title, folder.Year)
async for folder in (
ecm.dms.select_lol(InvoiceFolder)
.fields(InvoiceFolder.Title, InvoiceFolder.Year)
.stream()
):
print(folder.Title, folder.Year)
6.3. Mit Rechten
-
Sync
-
Async
for folder in (
ecm.dms.select_lol(InvoiceFolder)
.rights()
.stream()
):
if folder.system.rights.edit_metadata:
print(f"{folder.system.id}: Bearbeitung erlaubt")
async for folder in (
ecm.dms.select_lol(InvoiceFolder)
.rights()
.stream()
):
if folder.system.rights.edit_metadata:
print(f"{folder.system.id}: Bearbeitung erlaubt")
6.4. Papierkorb
-
Sync
-
Async
for folder in ecm.dms.select_lol(InvoiceFolder).garbage_mode().stream():
print(f"Gelöscht: {folder.system.id} – {folder.Title}")
async for folder in ecm.dms.select_lol(InvoiceFolder).garbage_mode().stream():
print(f"Gelöscht: {folder.system.id} – {folder.Title}")
6.5. Wann select_lol() statt select() verwenden?
-
Sync
-
Async
# Empfohlen für: große Mengen, nur Indexdaten (ohne Varianten/Dateiinfos/Hierarchie)
for doc in (
ecm.dms.select_lol(InvoiceDocument)
.where(InvoiceDocument.Year == 2024)
.order_by(InvoiceDocument.Title.ASC)
.pagesize(500)
.stream()
):
print(doc.system.id, doc.Title)
# Empfohlen für: Dateiinfos, Basisparameter, Varianten, Hierarchien → select() verwenden
for doc in (
ecm.dms.select(InvoiceDocument)
.where(InvoiceDocument.Year == 2024)
.file_properties()
.stream()
):
print(doc.system.file_properties.extension)
# Empfohlen für: große Mengen, nur Indexdaten (ohne Varianten/Dateiinfos/Hierarchie)
async for doc in (
ecm.dms.select_lol(InvoiceDocument)
.where(InvoiceDocument.Year == 2024)
.order_by(InvoiceDocument.Title.ASC)
.pagesize(500)
.stream()
):
print(doc.system.id, doc.Title)
# Empfohlen für: Dateiinfos, Basisparameter, Varianten, Hierarchien → select() verwenden
async for doc in (
ecm.dms.select(InvoiceDocument)
.where(InvoiceDocument.Year == 2024)
.file_properties()
.stream()
):
print(doc.system.file_properties.extension)