TableOperations Classe
Namespace para operações de metadados no nível da tabela.
Acessado por .client.tables Fornece operações para criar, excluir, inspecionar e listar tabelas do Dataverse, bem como adicionar e remover colunas.
Exemplo:
client = DataverseClient(base_url, credential)
# Create a table
info = client.tables.create(
"new_Product",
{"new_Price": "decimal", "new_InStock": "bool"},
solution="MySolution",
)
# List tables
tables = client.tables.list()
# Get table info
info = client.tables.get("new_Product")
# Add columns
client.tables.add_columns("new_Product", {"new_Rating": "int"})
# Remove columns
client.tables.remove_columns("new_Product", "new_Rating")
# Delete a table
client.tables.delete("new_Product")
Construtor
TableOperations(client: DataverseClient)
Parâmetros
| Nome | Description |
|---|---|
|
client
Obrigatório
|
A instância pai DataverseClient . |
Métodos
| add_columns |
Adicione uma ou mais colunas a uma tabela existente. Exemplo:
|
| create |
Crie uma tabela personalizada com as colunas especificadas. |
| create_alternate_key |
Crie uma chave alternativa em uma tabela. As chaves alternativas permitem que operações upsert identifiquem registros por uma ou mais colunas em vez do GUID primário. Após a criação, a chave é enfileirada para a construção do índice; ela status fará a transição de |
| create_lookup_field |
Crie uma relação de campo de pesquisa simples. Esse é um método de conveniência que encapsula create_one_to_many_relationship o caso comum de adicionar um campo de pesquisa a uma tabela existente. |
| create_many_to_many_relationship |
Crie uma relação muitos para muitos entre tabelas. Essa operação cria uma relação muitos para muitos e uma tabela intersect para gerenciar a relação. |
| create_one_to_many_relationship |
Crie uma relação um-para-muitos entre tabelas. Essa operação cria a relação e o atributo de pesquisa na tabela de referência. |
| delete |
Exclua uma tabela personalizada por nome de esquema. Aviso Esta operação é irreversível e excluirá todos os registros no tabela junto com a definição da tabela. Exemplo:
|
| delete_alternate_key |
Exclua uma chave alternativa por sua ID de metadados. Aviso Excluir uma chave alternativa que está em uso por operações upsert será fazer com que essas operações falhem. essa operação é irreversível. Exemplo:
|
| delete_relationship |
Exclua uma relação por sua ID de metadados. Aviso Excluir uma relação também remove o atributo de pesquisa associado para relações um-para-muitos. essa operação é irreversível. Exemplo:
|
| get |
Obtenha metadados básicos para uma tabela se ela existir. Exemplo:
|
| get_alternate_keys |
Liste todas as chaves alternativas definidas em uma tabela. |
| get_relationship |
Recuperar metadados de relação por nome de esquema. Exemplo:
|
| list |
Liste todas as tabelas não privadas no ambiente do Dataverse. Por padrão, retorna todas as tabelas em que Exemplo:
|
| list_columns |
Listar todas as definições de atributo (coluna) para uma tabela. Exemplo:
|
| list_relationships |
Listar todas as definições de relação no ambiente. Exemplo:
|
| list_table_relationships |
Listar todas as relações de uma tabela específica. Combina relações um para muitos, muitos para um e muitos para muitos para a tabela determinada consultando Exemplo:
|
| remove_columns |
Remova uma ou mais colunas de uma tabela. Exemplo:
|
add_columns
Adicione uma ou mais colunas a uma tabela existente.
Exemplo:
created = client.tables.add_columns(
"new_MyTestTable",
{"new_Notes": "string", "new_Active": "bool"},
)
print(created) # ['new_Notes', 'new_Active']
add_columns(table: str, columns: Dict[str, Any]) -> List[str]
Parâmetros
| Nome | Description |
|---|---|
|
table
Obrigatório
|
Nome do esquema da tabela (por exemplo |
|
columns
Obrigatório
|
Mapeamento de nomes de esquema de coluna (com prefixo de personalização) para seus tipos. Os tipos com suporte são os mesmos que para create. |
Retornos
| Tipo | Description |
|---|---|
|
Nomes de esquema das colunas que foram criadas. |
Exceções
| Tipo | Description |
|---|---|
|
Se a tabela não existir. |
create
Crie uma tabela personalizada com as colunas especificadas.
create(table: str, columns: Dict[str, Any], *, solution: str | None = None, primary_column: str | None = None, display_name: str | None = None) -> TableInfo
Parâmetros
| Nome | Description |
|---|---|
|
table
Obrigatório
|
Nome do esquema da tabela com prefixo de personalização (por exemplo |
|
columns
Obrigatório
|
Mapeamento de nomes de esquema de coluna (com prefixo de personalização) para seus tipos. Os tipos com suporte incluem |
|
solution
Obrigatório
|
Nome exclusivo da solução opcional que deve ser o proprietário da nova tabela. Quando a tabela é omitida é criada na solução padrão. |
|
primary_column
Obrigatório
|
Nome do esquema de coluna de nome primário opcional com prefixo de personalização (por exemplo |
|
display_name
Obrigatório
|
Nome de exibição legível para a tabela (por exemplo |
Parâmetros somente de palavra-chave
| Nome | Description |
|---|---|
|
solution
|
Valor padrão: None
|
|
primary_column
|
Valor padrão: None
|
|
display_name
|
Valor padrão: None
|
Retornos
| Tipo | Description |
|---|---|
|
Metadados de tabela com |
Exceções
| Tipo | Description |
|---|---|
|
Se a criação da tabela falhar ou a tabela já existir. |
Exemplos
Crie uma tabela com colunas simples:
from enum import IntEnum
class ItemStatus(IntEnum):
ACTIVE = 1
INACTIVE = 2
result = client.tables.create(
"new_Product",
{
"new_Title": "string",
"new_Price": "decimal",
"new_Status": ItemStatus,
},
solution="MySolution",
primary_column="new_ProductName",
display_name="Product",
)
print(f"Created: {result['table_schema_name']}")
create_alternate_key
Crie uma chave alternativa em uma tabela.
As chaves alternativas permitem que operações upsert identifiquem registros por uma ou mais colunas em vez do GUID primário. Após a criação, a chave é enfileirada para a construção do índice; ela status fará a transição de "Pending" uma vez "Active" que o índice esteja pronto.
create_alternate_key(table: str, key_name: str, columns: List[str], *, display_name: str | None = None, language_code: int = 1033) -> AlternateKeyInfo
Parâmetros
| Nome | Description |
|---|---|
|
table
Obrigatório
|
Nome do esquema da tabela (por exemplo |
|
key_name
Obrigatório
|
Nome do esquema para a nova chave alternativa (por exemplo |
|
columns
Obrigatório
|
Lista de nomes lógicos de coluna que compõem a chave (por exemplo |
|
display_name
Obrigatório
|
Nome de exibição para a chave. O padrão é |
|
language_code
Obrigatório
|
Código de idioma para rótulos. O padrão é 1033 (inglês). |
Parâmetros somente de palavra-chave
| Nome | Description |
|---|---|
|
display_name
|
Valor padrão: None
|
|
language_code
|
Valor padrão: 1033
|
Retornos
| Tipo | Description |
|---|---|
|
Metadados para a chave alternativa recém-criada. |
Exceções
| Tipo | Description |
|---|---|
|
Se a tabela não existir. |
|
|
Se a solicitação da API Web falhar. |
Exemplos
Crie uma chave alternativa de coluna única para upsert:
key = client.tables.create_alternate_key(
"new_Product",
"new_product_code_key",
["new_productcode"],
display_name="Product Code",
)
print(f"Key ID: {key.metadata_id}")
print(f"Columns: {key.key_attributes}")
create_lookup_field
Crie uma relação de campo de pesquisa simples.
Esse é um método de conveniência que encapsula create_one_to_many_relationship o caso comum de adicionar um campo de pesquisa a uma tabela existente.
create_lookup_field(referencing_table: str, lookup_field_name: str, referenced_table: str, *, display_name: str | None = None, description: str | None = None, required: bool = False, cascade_delete: str = 'RemoveLink', solution: str | None = None, language_code: int = 1033) -> RelationshipInfo
Parâmetros
| Nome | Description |
|---|---|
|
referencing_table
Obrigatório
|
Nome lógico da tabela que terá o campo de pesquisa (tabela filho). |
|
lookup_field_name
Obrigatório
|
Nome do esquema para o campo de pesquisa (por exemplo, |
|
referenced_table
Obrigatório
|
Nome lógico da tabela que está sendo referenciada (tabela pai). |
|
display_name
Obrigatório
|
Nome de exibição para o campo de pesquisa. O padrão é o nome da tabela referenciada. |
|
description
Obrigatório
|
Descrição opcional para o campo de pesquisa. |
|
required
Obrigatório
|
Se a pesquisa é necessária. Usa |
|
cascade_delete
Obrigatório
|
Comportamento de exclusão ( |
|
solution
Obrigatório
|
Nome exclusivo da solução opcional ao qual adicionar a relação. |
|
language_code
Obrigatório
|
Código de idioma para rótulos. O padrão é 1033 (inglês). |
Parâmetros somente de palavra-chave
| Nome | Description |
|---|---|
|
display_name
|
Valor padrão: None
|
|
description
|
Valor padrão: None
|
|
required
|
Valor padrão: False
|
|
cascade_delete
|
Valor padrão: RemoveLink
|
|
solution
|
Valor padrão: None
|
|
language_code
|
Valor padrão: 1033
|
Retornos
| Tipo | Description |
|---|---|
|
Metadados de relação com |
Exceções
| Tipo | Description |
|---|---|
|
Se a solicitação da API Web falhar. |
Exemplos
Crie um campo de pesquisa simples:
result = client.tables.create_lookup_field(
referencing_table="new_order",
lookup_field_name="new_AccountId",
referenced_table="account",
display_name="Account",
required=True,
cascade_delete=CASCADE_BEHAVIOR_REMOVE_LINK,
)
print(f"Created lookup: {result.lookup_schema_name}")
create_many_to_many_relationship
Crie uma relação muitos para muitos entre tabelas.
Essa operação cria uma relação muitos para muitos e uma tabela intersect para gerenciar a relação.
create_many_to_many_relationship(relationship: ManyToManyRelationshipMetadata, *, solution: str | None = None) -> RelationshipInfo
Parâmetros
| Nome | Description |
|---|---|
|
relationship
Obrigatório
|
Metadados que definem a relação muitos para muitos. |
|
solution
Obrigatório
|
Nome exclusivo da solução opcional ao qual adicionar relação. |
Parâmetros somente de palavra-chave
| Nome | Description |
|---|---|
|
solution
|
Valor padrão: None
|
Retornos
| Tipo | Description |
|---|---|
|
Metadados de relação com |
Exceções
| Tipo | Description |
|---|---|
|
Se a solicitação da API Web falhar. |
Exemplos
Criar uma relação muitos para muitos: Funcionário <–> Projeto:
from PowerPlatform.Dataverse.models import (
ManyToManyRelationshipMetadata,
)
relationship = ManyToManyRelationshipMetadata(
schema_name="new_employee_project",
entity1_logical_name="new_employee",
entity2_logical_name="new_project",
)
result = client.tables.create_many_to_many_relationship(relationship)
print(f"Created: {result.relationship_schema_name}")
create_one_to_many_relationship
Crie uma relação um-para-muitos entre tabelas.
Essa operação cria a relação e o atributo de pesquisa na tabela de referência.
create_one_to_many_relationship(lookup: LookupAttributeMetadata, relationship: OneToManyRelationshipMetadata, *, solution: str | None = None) -> RelationshipInfo
Parâmetros
| Nome | Description |
|---|---|
|
lookup
Obrigatório
|
Metadados que definem o atributo de pesquisa. |
|
relationship
Obrigatório
|
Metadados que definem a relação. |
|
solution
Obrigatório
|
Nome exclusivo da solução opcional ao qual adicionar relação. |
Parâmetros somente de palavra-chave
| Nome | Description |
|---|---|
|
solution
|
Valor padrão: None
|
Retornos
| Tipo | Description |
|---|---|
|
Metadados de relação com |
Exceções
| Tipo | Description |
|---|---|
|
Se a solicitação da API Web falhar. |
Exemplos
Criar uma relação um-para-muitos: Departamento (1) –> Funcionário (N):
from PowerPlatform.Dataverse.models import (
LookupAttributeMetadata,
OneToManyRelationshipMetadata,
Label,
LocalizedLabel,
CascadeConfiguration,
)
from PowerPlatform.Dataverse.common.constants import (
CASCADE_BEHAVIOR_REMOVE_LINK,
)
lookup = LookupAttributeMetadata(
schema_name="new_DepartmentId",
display_name=Label(
localized_labels=[
LocalizedLabel(label="Department", language_code=1033)
]
),
)
relationship = OneToManyRelationshipMetadata(
schema_name="new_Department_Employee",
referenced_entity="new_department",
referencing_entity="new_employee",
referenced_attribute="new_departmentid",
cascade_configuration=CascadeConfiguration(
delete=CASCADE_BEHAVIOR_REMOVE_LINK,
),
)
result = client.tables.create_one_to_many_relationship(lookup, relationship)
print(f"Created lookup field: {result.lookup_schema_name}")
delete
Exclua uma tabela personalizada por nome de esquema.
Aviso
Esta operação é irreversível e excluirá todos os registros no
tabela junto com a definição da tabela.
Exemplo:
client.tables.delete("new_MyTestTable")
delete(table: str) -> None
Parâmetros
| Nome | Description |
|---|---|
|
table
Obrigatório
|
Nome do esquema da tabela (por exemplo |
Exceções
| Tipo | Description |
|---|---|
|
Se a tabela não existir ou a exclusão falhar. |
delete_alternate_key
Exclua uma chave alternativa por sua ID de metadados.
Aviso
Excluir uma chave alternativa que está em uso por operações upsert será
fazer com que essas operações falhem. essa operação é irreversível.
Exemplo:
client.tables.delete_alternate_key(
"new_Product",
"12345678-1234-1234-1234-123456789abc",
)
delete_alternate_key(table: str, key_id: str) -> None
Parâmetros
| Nome | Description |
|---|---|
|
table
Obrigatório
|
Nome do esquema da tabela (por exemplo |
|
key_id
Obrigatório
|
GUID de metadados da chave alternativa a ser excluída. |
Exceções
| Tipo | Description |
|---|---|
|
Se a tabela não existir. |
|
|
Se a solicitação da API Web falhar. |
delete_relationship
Exclua uma relação por sua ID de metadados.
Aviso
Excluir uma relação também remove o atributo de pesquisa associado
para relações um-para-muitos. essa operação é irreversível.
Exemplo:
client.tables.delete_relationship(
"12345678-1234-1234-1234-123456789abc"
)
delete_relationship(relationship_id: str) -> None
Parâmetros
| Nome | Description |
|---|---|
|
relationship_id
Obrigatório
|
O GUID dos metadados de relação. |
Exceções
| Tipo | Description |
|---|---|
|
Se a solicitação da API Web falhar. |
get
Obtenha metadados básicos para uma tabela se ela existir.
Exemplo:
info = client.tables.get("new_MyTestTable")
if info:
print(f"Logical name: {info['table_logical_name']}")
print(f"Entity set: {info['entity_set_name']}")
get(table: str) -> TableInfo | None
Parâmetros
| Nome | Description |
|---|---|
|
table
Obrigatório
|
Nome do esquema da tabela (por exemplo, |
Retornos
| Tipo | Description |
|---|---|
|
Metadados de tabela ou |
get_alternate_keys
Liste todas as chaves alternativas definidas em uma tabela.
get_alternate_keys(table: str) -> List[AlternateKeyInfo]
Parâmetros
| Nome | Description |
|---|---|
|
table
Obrigatório
|
Nome do esquema da tabela (por exemplo |
Retornos
| Tipo | Description |
|---|---|
|
Lista de objetos de metadados de chave alternativos. Pode estar vazio se nenhuma chave alternativa for definida. |
Exceções
| Tipo | Description |
|---|---|
|
Se a tabela não existir. |
|
|
Se a solicitação da API Web falhar. |
Exemplos
Liste chaves alternativas e imprima seu status:
keys = client.tables.get_alternate_keys("new_Product")
for key in keys:
print(f"{key.schema_name}: {key.status}")
get_relationship
Recuperar metadados de relação por nome de esquema.
Exemplo:
rel = client.tables.get_relationship("new_Department_Employee")
if rel:
print(f"Found: {rel.relationship_schema_name}")
get_relationship(schema_name: str) -> RelationshipInfo | None
Parâmetros
| Nome | Description |
|---|---|
|
schema_name
Obrigatório
|
O nome do esquema do relacionamento. |
Retornos
| Tipo | Description |
|---|---|
|
Metadados de relação ou |
Exceções
| Tipo | Description |
|---|---|
|
Se a solicitação da API Web falhar. |
list
Liste todas as tabelas não privadas no ambiente do Dataverse.
Por padrão, retorna todas as tabelas em que IsPrivate eq false. Forneça uma expressão OData $filter opcional para restringir ainda mais os resultados.
A expressão é combinada com a cláusula padrão IsPrivate eq false usando and.
Exemplo:
# List all non-private tables
tables = client.tables.list()
for table in tables:
print(table["LogicalName"])
# List only tables whose schema name starts with "new_"
custom_tables = client.tables.list(
filter="startswith(SchemaName, 'new_')"
)
# List tables with only specific properties
tables = client.tables.list(
select=["LogicalName", "SchemaName", "EntitySetName"]
)
list(*, filter: str | None = None, select: List[str] | None = None) -> List[Dict[str, Any]]
Parâmetros
| Nome | Description |
|---|---|
|
filter
Obrigatório
|
Expressão OData |
|
select
Obrigatório
|
Lista opcional de nomes de propriedades a serem incluídos na resposta (projetada por meio da opção de consulta OData |
Parâmetros somente de palavra-chave
| Nome | Description |
|---|---|
|
filter
|
Valor padrão: None
|
|
select
|
Valor padrão: None
|
Retornos
| Tipo | Description |
|---|---|
|
Lista de dicionários de metadados EntityDefinition. |
list_columns
Listar todas as definições de atributo (coluna) para uma tabela.
Exemplo:
# List all columns on the account table
columns = client.tables.list_columns("account")
for col in columns:
print(f"{col['LogicalName']} ({col.get('AttributeType')})")
# List only specific properties
columns = client.tables.list_columns(
"account",
select=["LogicalName", "SchemaName", "AttributeType"],
)
# Filter to only string attributes
columns = client.tables.list_columns(
"account",
filter="AttributeType eq 'String'",
)
list_columns(table: str, *, select: List[str] | None = None, filter: str | None = None) -> List[Dict[str, Any]]
Parâmetros
| Nome | Description |
|---|---|
|
table
Obrigatório
|
Nome do esquema da tabela (por exemplo, |
|
select
Obrigatório
|
Lista opcional de nomes de propriedades para projeto via |
|
filter
Obrigatório
|
Expressão OData |
Parâmetros somente de palavra-chave
| Nome | Description |
|---|---|
|
select
|
Valor padrão: None
|
|
filter
|
Valor padrão: None
|
Retornos
| Tipo | Description |
|---|---|
|
Lista de dicionários de metadados de atributo bruto. |
Exceções
| Tipo | Description |
|---|---|
|
Se a tabela não for encontrada. |
|
|
Se a solicitação da API Web falhar. |
list_relationships
Listar todas as definições de relação no ambiente.
Exemplo:
# List all relationships
rels = client.tables.list_relationships()
for rel in rels:
print(f"{rel['SchemaName']} ({rel.get('@odata.type')})")
# Filter by type
one_to_many = client.tables.list_relationships(
filter="RelationshipType eq Microsoft.Dynamics.CRM.RelationshipType'OneToManyRelationship'"
)
# Select specific properties
rels = client.tables.list_relationships(
select=["SchemaName", "ReferencedEntity", "ReferencingEntity"]
)
list_relationships(*, filter: str | None = None, select: List[str] | None = None) -> List[Dict[str, Any]]
Parâmetros
| Nome | Description |
|---|---|
|
filter
Obrigatório
|
Expressão OData |
|
select
Obrigatório
|
Lista opcional de nomes de propriedades para projeto via |
Parâmetros somente de palavra-chave
| Nome | Description |
|---|---|
|
filter
|
Valor padrão: None
|
|
select
|
Valor padrão: None
|
Retornos
| Tipo | Description |
|---|---|
|
Lista de dicionários de metadados de relação brutos. |
Exceções
| Tipo | Description |
|---|---|
|
Se a solicitação da API Web falhar. |
list_table_relationships
Listar todas as relações de uma tabela específica.
Combina relações um para muitos, muitos para um e muitos para muitos para a tabela determinada consultando EntityDefinitions({id})/OneToManyRelationships, EntityDefinitions({id})/ManyToOneRelationshipse EntityDefinitions({id})/ManyToManyRelationships.
Exemplo:
# List all relationships for the account table
rels = client.tables.list_table_relationships("account")
for rel in rels:
print(f"{rel['SchemaName']} -> {rel.get('@odata.type')}")
list_table_relationships(table: str, *, filter: str | None = None, select: List[str] | None = None) -> List[Dict[str, Any]]
Parâmetros
| Nome | Description |
|---|---|
|
table
Obrigatório
|
Nome do esquema da tabela (por exemplo |
|
filter
Obrigatório
|
Expressão OData |
|
select
Obrigatório
|
Lista opcional de nomes de propriedades para projeto via |
Parâmetros somente de palavra-chave
| Nome | Description |
|---|---|
|
filter
|
Valor padrão: None
|
|
select
|
Valor padrão: None
|
Retornos
| Tipo | Description |
|---|---|
|
Lista combinada de dicionários de metadados de relacionamento um para muitos, muitos para um e muitos para muitos. |
Exceções
| Tipo | Description |
|---|---|
|
Se a tabela não for encontrada. |
|
|
Se a solicitação da API Web falhar. |
remove_columns
Remova uma ou mais colunas de uma tabela.
Exemplo:
removed = client.tables.remove_columns(
"new_MyTestTable",
["new_Notes", "new_Active"],
)
print(removed) # ['new_Notes', 'new_Active']
remove_columns(table: str, columns: str | List[str]) -> List[str]
Parâmetros
| Nome | Description |
|---|---|
|
table
Obrigatório
|
Nome do esquema da tabela (por exemplo |
|
columns
Obrigatório
|
Nome do esquema de coluna ou lista de nomes de esquema de coluna a serem removidos. Deve incluir o prefixo de personalização (por exemplo |
Retornos
| Tipo | Description |
|---|---|
|
Nomes de esquema das colunas que foram removidas. |
Exceções
| Tipo | Description |
|---|---|
|
Se a tabela ou uma coluna especificada não existir. |