= API-Referenz
:description: Übersicht der ECM-API-Namespaces: ecm.dms (Objekte), ecm.security (Benutzer/Gruppen), ecm.db (SQL), ecm.system (Serverdefinition). Einstiegspunkt: ECM()-Factory.
:keywords: API, ecm.dms, ecm.security, ecm.db, ecm.system, ECM, Namespaces, ECM()-Factory
:page-tags: api, overview

Die API ist über die `ECM()`-Factory zugänglich und in folgende Namespaces unterteilt:

[cols="1,3,1"]
|===
|Namespace |Beschreibung |Referenz

|`ecm.dms`
|Ordner-, Register- und Dokumentenoperationen
|xref:api/dms/index.adoc[→ ecm.dms]

|`ecm.security`
|Benutzer- und Gruppenverwaltung
|xref:api/security/index.adoc[→ ecm.security]

|`ecm.system`
|Server-Metadaten und Objektdefinitionen
|xref:api/system/index.adoc[→ ecm.system]

|`ecm.db`
|Direkter SQL-Zugriff über ADO
|xref:api/db/index.adoc[→ ecm.db]
|===

== ECM-Factory

[source,python]
----
from ecmind_blue_client.ecm import ECM
from ecmind_blue_client.pool import SyncPoolClient

client = SyncPoolClient(servers="<host>:4000:1", username="<username>", password="<password>")
ecm = ECM(client)
----

Die `ECM()`-Funktion ist überladen: Ein `SyncPoolClient` liefert `ECMSync`, ein `AsyncPoolClient` liefert `ECMAsync`.

== impersonate()

[source,python]
----
ecm.impersonate(username: str) -> ECMSync | ECMAsync
----

Gibt eine neue ECM-Instanz zurück, die alle Anfragen mit dem angegebenen Benutzerkontext ausführt (`$$$SwitchContextUserName$$$`).
Der ausführende Benutzer benötigt die Systemrolle *Kontextwechsel*.

Unterstützt sowohl den direkten Aufruf als auch die Verwendung als Context-Manager (`with` / `async with`).

[tabs]
====
Sync::
+
[source,python]
----
with ecm.impersonate("john") as ecm_john:
    ecm_john.dms.insert(MyFolder(Title="Test"))
----

Async::
+
[source,python]
----
async with ecm.impersonate("john") as ecm_john:
    await ecm_john.dms.insert(MyFolder(Title="Test"))
----
====
