TableOperations Classe
Namespace para operações de metadados ao nível da tabela.
Acedido via client.tables. Fornece operações para criar, eliminar, inspecionar e listar tabelas do Dataverse, bem como para adicionar e remover colunas.
Example:
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
| Name | Description |
|---|---|
|
client
Necessário
|
A instância principal DataverseClient . |
Métodos
| add_columns |
Adicione uma ou mais colunas a uma tabela existente. Example:
|
| create |
Crie uma tabela personalizada com as colunas especificadas. |
| create_alternate_key |
Crie uma chave alternativa numa mesa. Chaves alternativas permitem que operações upsert identifiquem registos por uma ou mais colunas em vez do GUID principal. Após a criação, a chave é colocada na fila para construção de índices; irá status transitar de |
| create_lookup_field |
Crie uma relação simples de campo de pesquisa. Este é um método de conveniência que se adapta create_one_to_many_relationship ao caso comum de adicionar um campo de consulta a uma tabela existente. |
| create_many_to_many_relationship |
Crie uma relação muitos-para-muitos entre as tabelas. Esta operação cria uma relação muitos-para-muitos e uma tabela de interseção para gerir a relação. |
| create_one_to_many_relationship |
Crie uma relação um-para-muitos entre as mesas. Esta operação cria tanto a relação como o atributo de pesquisa na tabela de referência. |
| delete |
Apaga uma tabela personalizada pelo nome do esquema. Warning Esta operação é irreversível e irá apagar todos os registos no tabela juntamente com a definição da tabela. Example:
|
| delete_alternate_key |
Elimine uma chave alternativa pelo seu ID de metadados. Warning Eliminar uma chave alternativa que esteja em uso por operações upsert irá Fazer com que essas operações falhassem. Esta operação é irreversível. Example:
|
| delete_relationship |
Apague uma relação pelo seu ID de metadados. Warning Eliminar uma relação também remove o atributo de pesquisa associado para relações de um para muitos. Esta operação é irreversível. Example:
|
| get |
Obtenha metadados básicos para uma tabela, se existir. Example:
|
| get_alternate_keys |
Liste todas as chaves alternativas definidas numa tabela. |
| get_relationship |
Recuperar metadados de relação pelo nome do esquema. Example:
|
| list |
Liste todas as tabelas não privadas no ambiente Dataverse. Por defeito, devolve todas as tabelas onde Example:
|
| list_columns |
Liste todas as definições de atributos (colunas) para uma tabela. Example:
|
| list_relationships |
Liste todas as definições de relação no ambiente. Example:
|
| list_table_relationships |
Liste todas as relações para uma tabela específica. Combina relações um-para-muitos, muitos-para-um e muitos-para-muitos para a tabela dada, consultando Example:
|
| remove_columns |
Remove uma ou mais colunas de uma tabela. Example:
|
add_columns
Adicione uma ou mais colunas a uma tabela existente.
Example:
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
| Name | Description |
|---|---|
|
table
Necessário
|
Nome do esquema da tabela (por exemplo, |
|
columns
Necessário
|
Mapeamento dos nomes dos esquemas das colunas (com prefixo de personalização) para os seus tipos. Os tipos suportados são os mesmos que para create. |
Devoluções
| Tipo | Description |
|---|---|
|
Nomes de esquemas 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
| Name | Description |
|---|---|
|
table
Necessário
|
Nome do esquema da tabela com prefixo de personalização (por exemplo, |
|
columns
Necessário
|
Mapeamento dos nomes dos esquemas das colunas (com prefixo de personalização) para os seus tipos. Os tipos suportados incluem |
|
solution
Necessário
|
Solução opcional, nome único que deve ser o proprietário da nova tabela. Quando omitida, a tabela é criada na solução padrão. |
|
primary_column
Necessário
|
Nome principal opcional, nome do esquema com prefixo de personalização (por exemplo, |
|
display_name
Necessário
|
Nome de visualização legível por humanos para a tabela (por exemplo, |
Parâmetros Só de Palavra-Chave
| Name | Description |
|---|---|
|
solution
|
Default value: None
|
|
primary_column
|
Default value: None
|
|
display_name
|
Default value: None
|
Devoluções
| Tipo | Description |
|---|---|
|
Metadados da tabela com |
Exceções
| Tipo | Description |
|---|---|
|
Se a criação da tabela falhar ou se 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 numa mesa.
Chaves alternativas permitem que operações upsert identifiquem registos por uma ou mais colunas em vez do GUID principal. Após a criação, a chave é colocada na fila para construção de índices; irá status transitar de "Pending" para "Active" quando o índice estiver pronto.
create_alternate_key(table: str, key_name: str, columns: List[str], *, display_name: str | None = None, language_code: int = 1033) -> AlternateKeyInfo
Parâmetros
| Name | Description |
|---|---|
|
table
Necessário
|
Nome do esquema da tabela (por exemplo, |
|
key_name
Necessário
|
Nome do esquema para a nova chave alternativa (por exemplo, |
|
columns
Necessário
|
Lista de nomes lógicos de colunas que compõem a chave (por exemplo, |
|
display_name
Necessário
|
Mostra o nome da chave. O padrão é |
|
language_code
Necessário
|
Código linguístico para rótulos. O padrão é 1033 (inglês). |
Parâmetros Só de Palavra-Chave
| Name | Description |
|---|---|
|
display_name
|
Default value: None
|
|
language_code
|
Default value: 1033
|
Devoluções
| Tipo | Description |
|---|---|
|
Metadados para a nova chave alternativa criada. |
Exceções
| Tipo | Description |
|---|---|
|
Se a tabela não existir. |
|
|
Se o pedido da Web API 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 simples de campo de pesquisa.
Este é um método de conveniência que se adapta create_one_to_many_relationship ao caso comum de adicionar um campo de consulta 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
| Name | Description |
|---|---|
|
referencing_table
Necessário
|
Nome lógico da tabela que terá o campo de consulta (tabela filha). |
|
lookup_field_name
Necessário
|
Nome do esquema para o campo de pesquisa (por exemplo, |
|
referenced_table
Necessário
|
Nome lógico da tabela referenciada (tabela pai). |
|
display_name
Necessário
|
Mostrar nome para o campo de pesquisa. Por defeito, o nome da tabela referenciada. |
|
description
Necessário
|
Descrição opcional para o campo de pesquisa. |
|
required
Necessário
|
Se a pesquisa é obrigatória. O valor padrão é |
|
cascade_delete
Necessário
|
Eliminar comportamento ( |
|
solution
Necessário
|
Solução opcional: nome único para adicionar a relação. |
|
language_code
Necessário
|
Código linguístico para rótulos. O padrão é 1033 (inglês). |
Parâmetros Só de Palavra-Chave
| Name | Description |
|---|---|
|
display_name
|
Default value: None
|
|
description
|
Default value: None
|
|
required
|
Default value: False
|
|
cascade_delete
|
Default value: RemoveLink
|
|
solution
|
Default value: None
|
|
language_code
|
Default value: 1033
|
Devoluções
| Tipo | Description |
|---|---|
|
Metadados de relação com |
Exceções
| Tipo | Description |
|---|---|
|
Se o pedido da Web API 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 as tabelas.
Esta operação cria uma relação muitos-para-muitos e uma tabela de interseção para gerir a relação.
create_many_to_many_relationship(relationship: ManyToManyRelationshipMetadata, *, solution: str | None = None) -> RelationshipInfo
Parâmetros
| Name | Description |
|---|---|
|
relationship
Necessário
|
Metadados que definem a relação muitos-para-muitos. |
|
solution
Necessário
|
Solução opcional: nome único para adicionar relação. |
Parâmetros Só de Palavra-Chave
| Name | Description |
|---|---|
|
solution
|
Default value: None
|
Devoluções
| Tipo | Description |
|---|---|
|
Metadados de relação com |
Exceções
| Tipo | Description |
|---|---|
|
Se o pedido da Web API falhar. |
Exemplos
Crie uma relação muitos-para-muitos: Colaborador <-> 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 as mesas.
Esta operação cria tanto a relação como 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
| Name | Description |
|---|---|
|
lookup
Necessário
|
Metadados que definem o atributo de pesquisa. |
|
relationship
Necessário
|
Metadados que definem a relação. |
|
solution
Necessário
|
Solução opcional: nome único para adicionar relação. |
Parâmetros Só de Palavra-Chave
| Name | Description |
|---|---|
|
solution
|
Default value: None
|
Devoluções
| Tipo | Description |
|---|---|
|
Metadados de relação com |
Exceções
| Tipo | Description |
|---|---|
|
Se o pedido da Web API falhar. |
Exemplos
Crie 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
Apaga uma tabela personalizada pelo nome do esquema.
Warning
Esta operação é irreversível e irá apagar todos os registos no
tabela juntamente com a definição da tabela.
Example:
client.tables.delete("new_MyTestTable")
delete(table: str) -> None
Parâmetros
| Name | Description |
|---|---|
|
table
Necessário
|
Nome do esquema da tabela (por exemplo, |
Exceções
| Tipo | Description |
|---|---|
|
Se a tabela não existir ou falhar a eliminação. |
delete_alternate_key
Elimine uma chave alternativa pelo seu ID de metadados.
Warning
Eliminar uma chave alternativa que esteja em uso por operações upsert irá
Fazer com que essas operações falhassem. Esta operação é irreversível.
Example:
client.tables.delete_alternate_key(
"new_Product",
"12345678-1234-1234-1234-123456789abc",
)
delete_alternate_key(table: str, key_id: str) -> None
Parâmetros
| Name | Description |
|---|---|
|
table
Necessário
|
Nome do esquema da tabela (por exemplo, |
|
key_id
Necessário
|
GUID de metadados da chave alternativa a eliminar. |
Exceções
| Tipo | Description |
|---|---|
|
Se a tabela não existir. |
|
|
Se o pedido da Web API falhar. |
delete_relationship
Apague uma relação pelo seu ID de metadados.
Warning
Eliminar uma relação também remove o atributo de pesquisa associado
para relações de um para muitos. Esta operação é irreversível.
Example:
client.tables.delete_relationship(
"12345678-1234-1234-1234-123456789abc"
)
delete_relationship(relationship_id: str) -> None
Parâmetros
| Name | Description |
|---|---|
|
relationship_id
Necessário
|
O GUID dos metadados da relação. |
Exceções
| Tipo | Description |
|---|---|
|
Se o pedido da Web API falhar. |
get
Obtenha metadados básicos para uma tabela, se existir.
Example:
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
| Name | Description |
|---|---|
|
table
Necessário
|
Nome do esquema da tabela (por exemplo, |
Devoluções
| Tipo | Description |
|---|---|
|
Metadados da tabela, ou |
get_alternate_keys
Liste todas as chaves alternativas definidas numa tabela.
get_alternate_keys(table: str) -> List[AlternateKeyInfo]
Parâmetros
| Name | Description |
|---|---|
|
table
Necessário
|
Nome do esquema da tabela (por exemplo, |
Devoluções
| Tipo | Description |
|---|---|
|
Lista de objetos de metadados chave alternativos. Pode estar vazio se não forem definidas chaves alternativas. |
Exceções
| Tipo | Description |
|---|---|
|
Se a tabela não existir. |
|
|
Se o pedido da Web API falhar. |
Exemplos
Liste as chaves alternativas e imprima o seu estado:
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 pelo nome do esquema.
Example:
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
| Name | Description |
|---|---|
|
schema_name
Necessário
|
O nome do esquema da relação. |
Devoluções
| Tipo | Description |
|---|---|
|
Metadados da relação, ou |
Exceções
| Tipo | Description |
|---|---|
|
Se o pedido da Web API falhar. |
list
Liste todas as tabelas não privadas no ambiente Dataverse.
Por defeito, devolve todas as tabelas onde 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.
Example:
# 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
| Name | Description |
|---|---|
|
filter
Necessário
|
Expressão OData |
|
select
Necessário
|
Lista opcional de nomes de propriedades a incluir na resposta (projetada através da opção de consulta OData |
Parâmetros Só de Palavra-Chave
| Name | Description |
|---|---|
|
filter
|
Default value: None
|
|
select
|
Default value: None
|
Devoluções
| Tipo | Description |
|---|---|
|
Lista de dicionários de metadados EntityDefinition. |
list_columns
Liste todas as definições de atributos (colunas) para uma tabela.
Example:
# 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
| Name | Description |
|---|---|
|
table
Necessário
|
Nome do esquema da tabela (por exemplo, |
|
select
Necessário
|
Lista opcional de nomes de propriedades a projetar via |
|
filter
Necessário
|
Expressão OData |
Parâmetros Só de Palavra-Chave
| Name | Description |
|---|---|
|
select
|
Default value: None
|
|
filter
|
Default value: None
|
Devoluções
| Tipo | Description |
|---|---|
|
Lista de dicionários brutos de metadados de atributos. |
Exceções
| Tipo | Description |
|---|---|
|
Se a tabela não for encontrada. |
|
|
Se o pedido da Web API falhar. |
list_relationships
Liste todas as definições de relação no ambiente.
Example:
# 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
| Name | Description |
|---|---|
|
filter
Necessário
|
Expressão OData |
|
select
Necessário
|
Lista opcional de nomes de propriedades a projetar via |
Parâmetros Só de Palavra-Chave
| Name | Description |
|---|---|
|
filter
|
Default value: None
|
|
select
|
Default value: None
|
Devoluções
| Tipo | Description |
|---|---|
|
Lista de dicionários brutos de metadados de relações. |
Exceções
| Tipo | Description |
|---|---|
|
Se o pedido da Web API falhar. |
list_table_relationships
Liste todas as relações para uma tabela específica.
Combina relações um-para-muitos, muitos-para-um e muitos-para-muitos para a tabela dada, consultando EntityDefinitions({id})/OneToManyRelationships, EntityDefinitions({id})/ManyToOneRelationships, e EntityDefinitions({id})/ManyToManyRelationships.
Example:
# 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
| Name | Description |
|---|---|
|
table
Necessário
|
Nome do esquema da tabela (por exemplo, |
|
filter
Necessário
|
Expressão OData |
|
select
Necessário
|
Lista opcional de nomes de propriedades a projetar via |
Parâmetros Só de Palavra-Chave
| Name | Description |
|---|---|
|
filter
|
Default value: None
|
|
select
|
Default value: None
|
Devoluções
| Tipo | Description |
|---|---|
|
Lista combinada de dicionários de metadados de relações um-para-muitos, muitos-para-um e muitos-para-muitos. |
Exceções
| Tipo | Description |
|---|---|
|
Se a tabela não for encontrada. |
|
|
Se o pedido da Web API falhar. |
remove_columns
Remove uma ou mais colunas de uma tabela.
Example:
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
| Name | Description |
|---|---|
|
table
Necessário
|
Nome do esquema da tabela (por exemplo, |
|
columns
Necessário
|
Nome do esquema de colunas ou lista de nomes de esquemas de colunas a remover. Deve incluir o prefixo de personalização (por exemplo, |
Devoluções
| Tipo | Description |
|---|---|
|
Nomes de esquemas das colunas que foram removidas. |
Exceções
| Tipo | Description |
|---|---|
|
Se a tabela ou uma coluna especificada não existir. |