models Paket

Datenmodelle und Typdefinitionen für das Dataverse SDK.

Stellt Datenklassen und Hilfsprogramme für Dataverse-Entitäten bereit:

Module

batch

Öffentliche Ergebnistypen für Batchvorgänge.

fetchxml_query

FetchXmlQuery - inert-Abfrageobjekt, das von QueryOperations.fetchxml() zurückgegeben wird.

filters

Composable OData filter expressions for the Dataverse SDK.

Stellt eine Ausdrucksstruktur bereit, die in OData-$filter-Zeichenfolgen kompiliert wird, mit Python Operatorüberladungen (&, |, ~) zum Erstellen komplexer Filterbedingungen.

Beispiel::

from PowerPlatform.Dataverse.models.filters import col, raw


# Preferred GA idiom — col() proxy
expr = col("statecode") == 0
print(expr.to_odata())  # statecode eq 0


# Complex composition with OR and AND
expr = (col("statecode") == 0) | (col("statecode") == 1) & (col("revenue") > 100000)
print(expr.to_odata())


# In / not-in
expr = col("statecode").in_([0, 1, 2])
print(expr.to_odata())
# Microsoft.Dynamics.CRM.In(PropertyName='statecode',PropertyValues=["0","1","2"])


# Raw OData escape hatch (no deprecation warning)
expr = raw("Microsoft.Dynamics.CRM.Today(PropertyName='createdon')")


# Negation
expr = ~(col("statecode") == 1)
print(expr.to_odata())  # not (statecode eq 1)
labels

Bezeichnungsmodelle für Dataverse-Metadaten.

protocol

DataverseModel-Strukturprotokoll für die typierte Entitätsintegration.

query_builder

Fluent-Abfrage-Generator zum Erstellen von OData-Abfragen.

Stellt eine typsichere, auffindbare Schnittstelle zum Erstellen komplexer Abfragen für Dataverse-Tabellen mit Methodenverkettung bereit.

Beispiel::

# Via client (recommended) -- flat iteration over records
from PowerPlatform.Dataverse.models import col


for record in (client.query.builder("account")
               .select("name", "revenue")
               .where(col("statecode") == 0)
               .where(col("revenue") > 1_000_000)
               .order_by("revenue", descending=True)
               .top(100)
               .execute()):
    print(record["name"])


# With composable expression tree
from PowerPlatform.Dataverse.models import col, raw


for record in (client.query.builder("account")
               .select("name", "revenue")
               .where((col("statecode") == 0) | (col("statecode") == 1))
               .where(col("revenue") > 100000)
               .top(100)
               .execute()):
    print(record["name"])


# Lazy paged iteration (one QueryResult per HTTP page)
for page in (client.query.builder("account")
             .select("name")
             .execute_pages()):
    process_batch(page)


# Get results as a pandas DataFrame
df = (client.query.builder("account")
      .select("name", "telephone1")
      .where(col("statecode") == 0)
      .top(100)
      .execute()
      .to_dataframe())
record

Datensatzmodelle für Dataverse-Daten.

relationship

Beziehungsmodelle für Dataverse (Eingabe und Ausgabe).

table_info

Tabellen- und Spaltenmetadatenmodelle für Dataverse.

upsert

Upsert-Datenmodelle für das Dataverse SDK.

Klassen

AlternateKeyInfo

Alternative Schlüsselmetadaten für eine Dataverse-Tabelle.

BatchItemResponse

Antwort von einem einzelnen Vorgang innerhalb einer Batchanforderung.

Antworten werden in der Übermittlungsreihenfolge zurückgegeben. Bei Vorgängen, die einem Changeset hinzugefügt werden, werden Antworten in der Position des Änderungssets in dieser Reihenfolge angezeigt.

Beispiel:


   for item in result.responses:
       if item.is_success:
           print(f"[OK] {item.status_code} entity_id={item.entity_id}")
       else:
           print(f"[ERR] {item.status_code}: {item.error_message}")
BatchResult

Ergebnis der Ausführung einer Batchanforderung.

Enthält einen BatchItemResponse pro übermittelten HTTP-Vorgang. Vorgänge, die auf mehrere HTTP-Anforderungen (z. B. add_columns mit drei Spalten) erweitert werden, tragen drei Einträge bei.

Beispiel:


   result = client.batch.new().execute()
   print(f"Succeeded: {len(result.succeeded)}, Failed: {len(result.failed)}")
   for guid in result.entity_ids:
       print(f"[OK] entity_id: {guid}")
CascadeConfiguration

Definiert das Kaskadierungsverhalten für Beziehungsvorgänge.

Gültige Werte für jeden Parameter:

  • "Cascade": Ausführen des Vorgangs für alle verwandten Datensätze

  • "NoCascade": Führen Sie den Vorgang nicht für verwandte Datensätze aus.

  • "RemoveLink": Entfernen Sie den Beziehungslink, behalten Sie jedoch die Datensätze bei

  • "Restrict": Prevent the operation if related records exist

ColumnInfo

Spaltenmetadaten aus einer Dataverse-Tabellendefinition.

ColumnProxy

Fluent-Proxy zum Erstellen von OData-Filterausdrücken aus einem Spaltennamen.

Zurückgegeben von col. Operatorüberladungen und -methoden erzeugen FilterExpression Instanzen, die an übergeben QueryBuilder.where()werden können.

Beispiel:


   from PowerPlatform.Dataverse.models.filters import col

   expr = col("statecode") == 0               # equality
   expr = col("revenue") > 1_000_000          # comparison
   expr = col("name").like("Contoso%")        # startswith
   expr = col("name").is_null()               # null check
   expr = col("statecode").in_([0, 1])        # in
DataverseModel

Strukturelles Protokoll, mit dem typierte Entitätsinstanzen an records.create() und records.update()übergeben werden können.

Implementieren Sie dieses Protokoll für jede Entitätsklasse (Dataclass, Pydantic-Modell, Handrolld), damit es direkt an CRUD-Vorgänge übergeben werden kann, ohne den Tabellennamen anzugeben oder manuell in das Diktieren zu konvertieren.

Erforderliche Klassenvariablen:

  • __entity_logical_name__ — Dataverse logische Entitätsname (z. B. "account")

  • __entity_set_name__ — Name des OData-Entitätssatzes (z. B. "accounts")

Erforderliche Instanzmethoden:

  • to_dict() — Zurückgeben der Datensatznutzlast als dict

  • from_dict(data) — Klassifikanzmethode zur Wiederherstellung aus einer Antwort dict

Beispiel:


   from dataclasses import dataclass
   from PowerPlatform.Dataverse import DataverseModel

   @dataclass
   class Account:
       __entity_logical_name__ = "account"
       __entity_set_name__ = "accounts"
       name: str = ""
       telephone1: str = ""

       def to_dict(self) -> dict:
           return {"name": self.name, "telephone1": self.telephone1}

       @classmethod
       def from_dict(cls, data: dict) -> "Account":
           return cls(
               name=data.get("name", ""),
               telephone1=data.get("telephone1", ""),
           )

   # isinstance() works today — Protocol is runtime_checkable:
   assert isinstance(Account(), DataverseModel)

   # Type your own helpers against the Protocol now:
   def save(entity: DataverseModel) -> None:
       data = entity.to_dict()
       client.records.create(entity.__entity_logical_name__, data)

Hinweis

Direct Dispatch (client.records.create(entity) ohne Tabellennamen

oder diktieren) wird noch nicht unterstützt und wird in einer zukünftigen Version hinzugefügt.

ExpandOption

Strukturierte Optionen für eine $expand Navigationseigenschaft.

Ermöglicht das Angeben von geschachtelten $select, $filter, $orderbyund $top Optionen für eine einzelne Navigationseigenschaftserweiterung, die auf die OData-Syntax $expand folgt.

Beispiel:


   # Expand Account_Tasks with nested options
   opt = (ExpandOption("Account_Tasks")
          .select("subject", "createdon")
          .filter("contains(subject,'Task')")
          .order_by("createdon", descending=True)
          .top(5))

   query = (client.query.builder("account")
            .select("name")
            .expand(opt)
            .execute())
FetchXmlQuery

Inert FetchXML-Abfrageobjekt. Es wird keine HTTP-Anforderung ausgeführt, bis execute sie execute_pages aufgerufen wird.

Erhalten über client.query.fetchxml(xml).

FilterExpression

Basisklasse für kompositable OData-Filterausdrücke.

Unterstützt Python Operatorüberladungen für die logische Komposition:

  • expr1 & expr2 Produziert (expr1 and expr2)

  • expr1 | expr2 Produziert (expr1 or expr2)

  • ~expr Produziert not (expr)

Label

Stellt eine Bezeichnung dar, die mehrere lokalisierte Versionen aufweisen kann.

LocalizedLabel

Stellt eine lokalisierte Bezeichnung mit einem Sprachcode dar.

LookupAttributeMetadata

Metadaten für ein Nachschlageattribute.

Gültige required_level Werte:

  • "None": Das Attribut ist optional.

  • "Empfohlen": Das Attribut wird empfohlen.

  • "ApplicationRequired": Das Attribut ist erforderlich.

ManyToManyRelationshipMetadata

Metadaten für eine m:n-Entitätsbeziehung.

OneToManyRelationshipMetadata

Metadaten für eine 1:n-Entitätsbeziehung.

QueryBuilder

Fluent-Schnittstelle zum Erstellen und Ausführen von OData-Abfragen für einen Synchronisierungsclient.

Stellt Methodenketten zum Erstellen komplexer Abfragen mit schreibbaren Filterausdrücken bereit. Kann eigenständig (via build()) verwendet werden oder an einen Client (via execute) gebunden werden.

QueryParams

Eingegebenes Wörterbuch, das von QueryBuilder.build().

Stellt IDE autovervollständigen bereit, wenn Buildergebnisse manuell übergeben werden client.records.list() .

QueryResult

Iterierbarer Wrapper um eine Liste von Record Objekten.

Wird zurückgegeben von execute (flacher Modus) und list.

Abwärtskompatibel: for r in result funktioniert weiterhin ohne Änderung.

RelationshipInfo

Typiertes Rückgabemodell für Beziehungsmetadaten.

Zurückgegeben von create_one_to_many_relationship, create_many_to_many_relationship, get_relationship, und create_lookup_field.

Beispiel:


   result = client.tables.create_one_to_many_relationship(lookup, relationship)
   print(result.relationship_schema_name)
   print(result.lookup_schema_name)
TableInfo

Tabellenmetadaten mit diktierähnlicher Abwärtskompatibilität.

Unterstützt sowohl den neuen Attributzugriff (info.schema_name) als auch den Legacy-Diktatschlüsselzugriff (info["table_schema_name"]) für die Abwärtskompatibilität mit Code, der mit der unformatierten Diktier-API geschrieben wurde.

Beispiel:


   info = client.tables.create("new_Product", {"new_Price": "decimal"})
   print(info.schema_name)              # new attribute access
   print(info["table_schema_name"])     # legacy dict-key access
UpsertItem

Stellt einen einzelnen Upsert-Vorgang dar, der auf einen Datensatz anhand seines alternativen Schlüssels ausgerichtet ist.

Wird verwendet upsert , um einen oder mehrere Datensätze zu upsertieren, die durch alternative Schlüssel und nicht durch primäre GUIDs identifiziert wurden.

Beispiel:


   item = UpsertItem(
       alternate_key={"accountnumber": "ACC-001", "address1_postalcode": "98052"},
       record={"name": "Contoso Ltd", "telephone1": "555-0100"},
   )

Functions

col

Gibt einen für das Erstellen von ColumnProxy Filterausdrücken zurück.

Dies ist das bevorzugte GA-Idiom zum Erstellen von Filterausdrücken:


   from PowerPlatform.Dataverse.models.filters import col

   expr = col("statecode") == 0
   expr = col("revenue") > 1_000_000
   expr = col("name").like("Contoso%")
   expr = col("statecode").in_([0, 1])
   expr = col("parentaccountid").is_null()
col(name: str) -> ColumnProxy

Parameter

Name Beschreibung
name
Erforderlich

Logischer Spaltenname (Groß-/Kleinschreibung wird nicht beachtet).

Gibt zurück

Typ Beschreibung

Eine ColumnProxy Bindung an die Spalte.

Ausnahmen

Typ Beschreibung

Wenn name leer ist.

raw

Verbatim OData-Filterausdruck (unverändert übergeben).

Diese Funktion ist nicht veraltet – es handelt sich um die OData-Escape-Schlüpfung ohne typierten Ersatz.

Beispiel:


   raw("Microsoft.Dynamics.CRM.Today(PropertyName='createdon')")
raw(filter_string: str) -> FilterExpression

Parameter

Name Beschreibung
filter_string
Erforderlich

Unformatierte OData-Filterzeichenfolge.

Gibt zurück

Typ Beschreibung

Ein FilterExpression.