models Pacote

Modelos de dados e definições de tipo para o SDK do Dataverse.

Fornece classificações de dados e auxiliares para entidades do Dataverse:

Módulos

batch

Tipos de resultados públicos para operações em lote.

fetchxml_query

FetchXmlQuery — objeto de consulta inerte retornado por QueryOperations.fetchxml().

filters

Expressões de filtro OData composable para o SDK do Dataverse.

Fornece uma árvore de expressão que é compilada em cadeias de caracteres OData $filter, com sobrecargas de operador Python (&, |, ~) para compor condições complexas de filtro.

Exemplo::

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

Modelos de rótulo para metadados do Dataverse.

protocol

Protocolo estrutural DataverseModel para integração de entidade tipada.

query_builder

Construtor de consultas fluente para construir consultas OData.

Fornece uma interface detectável e segura para criar consultas complexas em tabelas do Dataverse com encadeamento de métodos.

Exemplo::

# 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 dados do Dataverse.

relationship

Modelos de relação para Dataverse (entrada e saída).

table_info

Modelos de metadados de tabela e coluna para o Dataverse.

upsert

Modelos de dados upsert para o SDK do Dataverse.

Classes

AlternateKeyInfo

Metadados de chave alternativos para uma tabela do Dataverse.

BatchItemResponse

Resposta de uma única operação dentro de uma solicitação em lote.

As respostas são retornadas na ordem de envio. Para operações adicionadas a um conjunto de alterações, as respostas aparecem na posição do conjunto de alterações nessa ordem.

Exemplo:


   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 da execução de uma solicitação em lote.

Contém uma BatchItemResponse por operação HTTP enviada. As operações que se expandem para várias solicitações HTTP (por exemplo, add_columns com três colunas) contribuem com três entradas.

Exemplo:


   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 o comportamento em cascata para operações de relação.

Valores válidos para cada parâmetro:

  • "Cascade": executar a operação em todos os registros relacionados

  • "NoCascade": não execute a operação em registros relacionados

  • "RemoveLink": remover o link de relação, mas manter os registros

  • "Restrict": impedir a operação se houver registros relacionados

ColumnInfo

Metadados de coluna de uma definição de tabela do Dataverse.

ColumnProxy

Proxy fluente para a criação de expressões de filtro OData de um nome de coluna.

Retornado por col. As sobrecargas e os métodos do operador produzem FilterExpression instâncias que podem ser passadas para QueryBuilder.where().

Exemplo:


   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 Estrutural permitindo que instâncias de entidade tipadas sejam passadas para records.create() e records.update().

Implemente este Protocolo em qualquer classe de entidade (dataclass, modelo Pydantic, laminado manualmente) para permitir que ele seja passado diretamente para operações CRUD sem especificar o nome da tabela ou converter em ditado manualmente.

Variáveis de classe necessárias:

  • __entity_logical_name__ — Nome da entidade lógica do dataverse (por exemplo "account")

  • __entity_set_name__ — Nome do conjunto de entidades OData (por exemplo "accounts")

Métodos de instância necessários:

  • to_dict() — retornar o conteúdo do registro como dict

  • from_dict(data) — classmethod para reconstruir a partir de uma resposta dict

Exemplo:


   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

Expedição direta (client.records.create(entity) sem um nome de tabela

ou ditado) ainda não tem suporte e será adicionado em uma versão futura.

ExpandOption

Opções estruturadas para uma $expand propriedade de navegação.

Permite especificar , e $orderby$filteropções aninhadas$select, e $top opções para uma única expansão de propriedade de navegação, seguindo a sintaxe OData$expand.

Exemplo:


   # 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 FetchXML inert. Nenhuma solicitação HTTP é feita até execute ou execute_pages é chamada.

Obtido por .client.query.fetchxml(xml)

FilterExpression

Classe base para expressões de filtro OData composable.

Dá suporte a sobrecargas de operador Python para composição lógica:

  • expr1 & expr2 Produz (expr1 and expr2)

  • expr1 | expr2 Produz (expr1 or expr2)

  • ~expr Produz not (expr)

Label

Representa um rótulo que pode ter várias versões localizadas.

LocalizedLabel

Representa um rótulo localizado com um código de idioma.

LookupAttributeMetadata

Metadados para um atributo de pesquisa.

Valores de required_level válidos:

  • "Nenhum": o atributo é opcional

  • "Recomendado": o atributo é recomendado

  • "ApplicationRequired": o atributo é necessário

ManyToManyRelationshipMetadata

Metadados para uma relação de entidade muitos para muitos.

OneToManyRelationshipMetadata

Metadados para uma relação de entidade um para muitos.

QueryBuilder

Interface fluente para compilar e executar consultas OData em um cliente de sincronização.

Fornece encadeamento de métodos para construir consultas complexas com expressões de filtro composáveis. Pode ser usado autônomo (via build()) ou associado a um cliente (via execute).

QueryParams

Dicionário digitado retornado por QueryBuilder.build().

Fornece o preenchimento automático do IDE ao passar os resultados do client.records.list() build manualmente.

QueryResult

Wrapper iterável em torno de uma lista de Record objetos.

Retornado por execute (modo simples) e list.

Compatível com versões anteriores: for r in result continua funcionando sem alterações.

RelationshipInfo

Modelo de retorno digitado para metadados de relação.

Retornado por create_one_to_many_relationship, create_many_to_many_relationship, get_relationshipe create_lookup_field.

Exemplo:


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

Metadados de tabela com compatibilidade com versões anteriores semelhantes a ditados.

Dá suporte ao novo acesso de atributo (info.schema_name) e ao acesso de chave de ditado herdado (info["table_schema_name"]) para compatibilidade com o código gravado na API de ditado bruto.

Exemplo:


   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 uma única operação upsert direcionada a um registro por sua chave alternativa.

Usado para upsert upsert um ou mais registros identificados por chaves alternativas em vez de GUIDs primários.

Exemplo:


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

Funções

col

Retornar um ColumnProxy para criar expressões de filtro.

Esse é o idioma de GA preferencial para construir expressões 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

Nome Description
name
Obrigatório

O nome lógico da coluna (que não diferencia maiúsculas de minúsculas, será reduzido).

Retornos

Tipo Description

Um ColumnProxy associado à coluna.

Exceções

Tipo Description

Se name estiver vazio.

raw

Expressão de filtro OData verbatim (passada por inalterado).

Essa função não foi preterida , é a escotilha de escape OData sem substituição tipada.

Exemplo:


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

Parâmetros

Nome Description
filter_string
Obrigatório

Cadeia de caracteres de filtro OData bruta.

Retornos

Tipo Description

Um FilterExpression.