models Paquet

Modèles de données et définitions de type pour le Kit de développement logiciel (SDK) Dataverse.

Fournit des classes de données et des helpers pour les entités Dataverse :

Modules

batch

Types de résultats publics pour les opérations de traitement par lots.

fetchxml_query

FetchXmlQuery : objet de requête inert retourné par QueryOperations.fetchxml().

filters

Expressions de filtre OData composables pour le Kit de développement logiciel (SDK) Dataverse.

Fournit une arborescence d’expressions qui se compile sur des chaînes OData $filter, avec des surcharges d’opérateur Python (&, |, ~) pour composer des conditions de filtre complexes.

Exemple::

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

Modèles d’étiquette pour les métadonnées Dataverse.

protocol

DataverseModel structural Protocol pour l’intégration d’entités typées.

query_builder

Générateur de requêtes Fluent pour la construction de requêtes OData.

Fournit une interface détectable de type sécurisée pour créer des requêtes complexes sur des tables Dataverse avec chaînage de méthodes.

Exemple::

# 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

Enregistrer des modèles pour les données Dataverse.

relationship

Modèles de relation pour Dataverse (entrée et sortie).

table_info

Modèles de métadonnées de table et de colonne pour Dataverse.

upsert

Modèles de données Upsert pour le Kit de développement logiciel (SDK) Dataverse.

Classes

AlternateKeyInfo

Métadonnées de clé alternatives pour une table Dataverse.

BatchItemResponse

Réponse d’une seule opération au sein d’une demande de traitement par lots.

Les réponses sont retournées dans l’ordre de soumission. Pour les opérations ajoutées à un ensemble de modifications, les réponses apparaissent dans la position du jeu de modifications dans cet ordre.

Exemple :


   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

Résultat de l’exécution d’une demande de lot.

Contient une BatchItemResponse par opération HTTP envoyée. Les opérations qui s’étendent à plusieurs requêtes HTTP (par exemple, add_columns avec trois colonnes) contribuent à trois entrées.

Exemple :


   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

Définit le comportement en cascade pour les opérations de relation.

Valeurs valides pour chaque paramètre :

  • « Cascade » : effectuer l’opération sur tous les enregistrements associés

  • « NoCascade » : n’effectuez pas l’opération sur les enregistrements associés

  • « RemoveLink » : supprimez le lien de relation, mais conservez les enregistrements

  • « Restreindre » : empêcher l’opération si des enregistrements associés existent

ColumnInfo

Métadonnées de colonne à partir d’une définition de table Dataverse.

ColumnProxy

Proxy Fluent pour la création d’expressions de filtre OData à partir d’un nom de colonne.

Retourné par col. Les surcharges d’opérateur et les méthodes produisent des FilterExpression instances qui peuvent être passées à QueryBuilder.where().

Exemple :


   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

Protocole structurel permettant aux instances d’entité typées d’être passées à records.create() et records.update().

Implémentez ce protocole sur n’importe quelle classe d’entité (dataclass, modèle Pydantic, roulé manuellement) pour lui permettre d’être transmis directement aux opérations CRUD sans spécifier le nom de la table ou convertir manuellement en dict.

Variables de classe requises :

  • __entity_logical_name__ — Nom d’entité logique Dataverse (par exemple "account")

  • __entity_set_name__ — Nom du jeu d’entités OData (par exemple "accounts")

Méthodes d’instance requises :

  • to_dict() — retourner une charge utile d’enregistrement en tant que dict

  • from_dict(data) — classmethod à reconstruire à partir d’une réponse dict

Exemple :


   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)

Note

Distribution directe (client.records.create(entity) sans nom de table

ou dict) n’est pas encore pris en charge et sera ajouté dans une version ultérieure.

ExpandOption

Options structurées pour une $expand propriété de navigation.

Permet de spécifier des options imbriquées$select, $filteret $top$orderbydes options pour une extension de propriété de navigation unique, en suivant la syntaxe OData$expand.

Exemple :


   # 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

Objet de requête FetchXML inert. Aucune requête HTTP n’est effectuée tant qu’elle execute n’est pas appelée.execute_pages

Obtenu via client.query.fetchxml(xml).

FilterExpression

Classe de base pour les expressions de filtre OData composables.

Prend en charge les surcharges d’opérateur Python pour la composition logique :

  • expr1 & expr2 Produit (expr1 and expr2)

  • expr1 | expr2 Produit (expr1 or expr2)

  • ~expr Produit not (expr)

Label

Représente une étiquette qui peut avoir plusieurs versions localisées.

LocalizedLabel

Représente une étiquette localisée avec un code de langue.

LookupAttributeMetadata

Métadonnées d’un attribut de recherche.

Valeurs required_level valides :

  • « None » : l’attribut est facultatif

  • « Recommandé » : l’attribut est recommandé

  • « ApplicationRequired » : l’attribut est requis

ManyToManyRelationshipMetadata

Métadonnées pour une relation d’entité plusieurs-à-plusieurs.

OneToManyRelationshipMetadata

Métadonnées pour une relation d’entité un-à-plusieurs.

QueryBuilder

Interface Fluent pour la création et l’exécution de requêtes OData sur un client de synchronisation.

Fournit un chaînage de méthodes pour construire des requêtes complexes avec des expressions de filtre composables. Peut être utilisé autonome (via build()) ou lié à un client (via execute).

QueryParams

Dictionnaire typé retourné par QueryBuilder.build().

Fournit la saisie semi-automatique de l’IDE lors de la transmission manuelle des résultats de client.records.list() build.

QueryResult

Wrapper itérable autour d’une liste d’objets Record .

Retourné par execute (mode plat) et list.

Rétrocompatible : for r in result continue de fonctionner sans modification.

RelationshipInfo

Modèle de retour typé pour les métadonnées de relation.

Retourné par create_one_to_many_relationship, create_many_to_many_relationship, get_relationshipet create_lookup_field.

Exemple :


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

Métadonnées de table avec compatibilité descendante de type dicté.

Prend en charge l’accès aux nouveaux attributs () et l’accès à la clé de dictée héritéinfo.schema_name (info["table_schema_name"]) pour la compatibilité descendante avec le code écrit sur l’API de dictée brute.

Exemple :


   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

Représente une opération upsert unique ciblant un enregistrement par sa clé alternative.

Utilisé pour upsert upserter un ou plusieurs enregistrements identifiés par d’autres clés plutôt que par des GUID principaux.

Exemple :


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

Functions

col

Retournez un pour générer des ColumnProxy expressions de filtre.

Il s’agit de l’idiome ga préféré pour la construction d’expressions de filtre :


   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

Paramètres

Nom Description
name
Obligatoire

Nom logique de colonne (sans respect de la casse, sera en minuscules).

Retours

Type Description

Lié ColumnProxy à la colonne.

Exceptions

Type Description

S’il name est vide.

raw

Expression de filtre OData verbatim (transmise par inchangé).

Cette fonction n’est pas déconseillée : il s’agit de la trappe d’échappement OData sans remplacement typé.

Exemple :


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

Paramètres

Nom Description
filter_string
Obligatoire

Chaîne de filtre OData brute.

Retours

Type Description

Un FilterExpression.