models Paquete

Modelos de datos y definiciones de tipos para el SDK de Dataverse.

Proporciona clases de datos y asistentes para entidades de Dataverse:

Módulos

batch

Tipos de resultados públicos para operaciones por lotes.

fetchxml_query

FetchXmlQuery: objeto de consulta inert devuelto por QueryOperations.fetchxml().

filters

Expresiones de filtro de OData redactables para el SDK de Dataverse.

Proporciona un árbol de expresiones que se compila en cadenas de OData $filter, con sobrecargas de operador de Python (&, |, ~) para crear condiciones de filtro complejas.

Ejemplo::

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

Etiquetar modelos para metadatos de Dataverse.

protocol

Protocolo estructural de DataverseModel para la integración de entidades con tipo.

query_builder

Generador de consultas fluent para construir consultas OData.

Proporciona una interfaz detectable y segura para tipos para crear consultas complejas en tablas de Dataverse con encadenamiento de métodos.

Ejemplo::

# 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

Registre modelos para datos de Dataverse.

relationship

Modelos de relación para Dataverse (entrada y salida).

table_info

Modelos de metadatos de tabla y columna para Dataverse.

upsert

Modelos de datos upsert para el SDK de Dataverse.

Clases

AlternateKeyInfo

Metadatos de clave alternativos para una tabla de Dataverse.

BatchItemResponse

Respuesta de una sola operación dentro de una solicitud por lotes.

Las respuestas se devuelven en orden de envío. En el caso de las operaciones agregadas a un conjunto de cambios, las respuestas aparecen en la posición del conjunto de cambios en ese orden.

Ejemplo:


   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

Resultado de ejecutar una solicitud por lotes.

Contiene una BatchItemResponse por operación HTTP enviada. Las operaciones que se expanden a varias solicitudes HTTP (por ejemplo, add_columns con tres columnas) contribuyen a tres entradas.

Ejemplo:


   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

Define el comportamiento en cascada para las operaciones de relación.

Valores válidos para cada parámetro:

  • "Cascade": realizar la operación en todos los registros relacionados

  • "NoCascade": No realizar la operación en registros relacionados

  • "RemoveLink": quite el vínculo de relación, pero mantenga los registros.

  • "Restringir": impedir la operación si existen registros relacionados

ColumnInfo

Metadatos de columna de una definición de tabla de Dataverse.

ColumnProxy

Proxy fluent para compilar expresiones de filtro de OData a partir de un nombre de columna.

Devuelto por col. Las sobrecargas de operador y los métodos generan FilterExpression instancias que se pueden pasar a QueryBuilder.where().

Ejemplo:


   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

Protocolo estructural que permite pasar instancias de entidad con tipo a records.create() y records.update().

Implemente este protocolo en cualquier clase de entidad (dataclass, modelo Pydantic, inscrito manualmente) para permitir que se pase directamente a operaciones CRUD sin especificar el nombre de la tabla ni convertir en dict manualmente.

Variables de clase necesarias:

  • __entity_logical_name__ : nombre de entidad lógica de Dataverse (por ejemplo, "account")

  • __entity_set_name__ : nombre del conjunto de entidades de OData (por ejemplo, "accounts")

Métodos de instancia necesarios:

  • to_dict() : devuelve la carga del registro como dict

  • from_dict(data) — clasemethod para reconstruir a partir de una respuesta dict

Ejemplo:


   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)

Nota:

Envío directo (client.records.create(entity) sin un nombre de tabla

o dict) aún no se admite y se agregará en una versión futura.

ExpandOption

Opciones estructuradas para una $expand propiedad de navegación.

Permite especificar opciones anidadas $select, $filter, $orderbyy $top para una sola expansión de propiedades de navegación, siguiendo la sintaxis de OData $expand .

Ejemplo:


   # 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

Objeto de consulta Inert FetchXML. No se realiza ninguna solicitud HTTP hasta execute que se llama a o execute_pages .

Obtenido a través de client.query.fetchxml(xml).

FilterExpression

Clase base para expresiones de filtro de OData que se pueden componer.

Admite sobrecargas de operador de Python para la composición lógica:

  • expr1 & expr2 produce (expr1 and expr2)

  • expr1 | expr2 produce (expr1 or expr2)

  • ~expr produce not (expr)

Label

Representa una etiqueta que puede tener varias versiones localizadas.

LocalizedLabel

Representa una etiqueta localizada con un código de idioma.

LookupAttributeMetadata

Metadatos de un atributo de búsqueda.

Valores de required_level válidos:

  • "None": el atributo es opcional.

  • "Recomendado": se recomienda el atributo

  • "ApplicationRequired": se requiere el atributo

ManyToManyRelationshipMetadata

Metadatos de una relación de entidad de varios a varios.

OneToManyRelationshipMetadata

Metadatos de una relación de entidad uno a varios.

QueryBuilder

Interfaz fluent para compilar y ejecutar consultas de OData en un cliente de sincronización.

Proporciona encadenamiento de métodos para construir consultas complejas con expresiones de filtro compuestas. Se puede usar independiente (a través build()de ) o enlazarse a un cliente (a través de execute).

QueryParams

Diccionario con tipo devuelto por QueryBuilder.build().

Proporciona autocompletar del IDE al pasar los resultados de compilación a client.records.list() manualmente.

QueryResult

Contenedor iterable alrededor de una lista de Record objetos.

Devuelto por execute (modo plano) y list.

Compatible con versiones anteriores: for r in result sigue funcionando sin cambios.

RelationshipInfo

Modelo de valor devuelto con tipo para metadatos de relación.

Devuelto por create_one_to_many_relationship, create_many_to_many_relationship, get_relationshipy create_lookup_field.

Ejemplo:


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

Metadatos de tabla con compatibilidad con versiones anteriores de tipo dict.

Admite tanto el acceso a atributos nuevos (info.schema_name) como el acceso heredado de clave dict (info["table_schema_name"]) para la compatibilidad con versiones anteriores con el código escrito en la API de dict sin procesar.

Ejemplo:


   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

Representa una sola operación upsert que tiene como destino un registro mediante su clave alternativa.

Se usa con upsert para upsert uno o varios registros identificados por claves alternativas en lugar de GUID principales.

Ejemplo:


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

Funciones

col

Devuelve un ColumnProxy para compilar expresiones de filtro.

Esta es la expresión de disponibilidad general preferida para construir expresiones de filtro:


   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

Parámetros

Nombre Description
name
Requerido

Nombre lógico de columna (sin distinción entre mayúsculas y minúsculas, se reducirá).

Devoluciones

Tipo Description

ColumnProxy Enlazado a la columna.

Excepciones

Tipo Description

Si name está vacío.

raw

Expresión de filtro de OData textual (pasada sin cambios).

Esta función no está en desuso: es el sombreado de escape OData sin reemplazo con tipo.

Ejemplo:


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

Parámetros

Nombre Description
filter_string
Requerido

Cadena de filtro OData sin formato.

Devoluciones

Tipo Description

Un objeto FilterExpression.