TableOperations Clase
Espacio de nombres para las operaciones de metadatos de nivel de tabla.
Acceso a través de client.tables. Proporciona operaciones para crear, eliminar, inspeccionar y enumerar tablas de Dataverse, así como agregar y quitar columnas.
Ejemplo:
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")
Constructor
TableOperations(client: DataverseClient)
Parámetros
| Nombre | Description |
|---|---|
|
client
Requerido
|
Instancia primaria DataverseClient . |
Métodos
| add_columns |
Agregue una o varias columnas a una tabla existente. Ejemplo:
|
| create |
Cree una tabla personalizada con las columnas especificadas. |
| create_alternate_key |
Cree una clave alternativa en una tabla. Las claves alternativas permiten que las operaciones upsert identifiquen registros por una o varias columnas en lugar del GUID principal. Después de crear la clave se pone en cola para la creación de índices; su status pasará de |
| create_lookup_field |
Cree una relación de campo de búsqueda simple. Este es un método de conveniencia que se create_one_to_many_relationship ajusta para el caso común de agregar un campo de búsqueda a una tabla existente. |
| create_many_to_many_relationship |
Cree una relación de varios a varios entre tablas. Esta operación crea una relación de varios a varios y una tabla intersect para administrar la relación. |
| create_one_to_many_relationship |
Cree una relación uno a varios entre tablas. Esta operación crea tanto la relación como el atributo de búsqueda en la tabla de referencia. |
| delete |
Elimine una tabla personalizada por nombre de esquema. Advertencia Esta operación es irreversible y eliminará todos los registros del tabla junto con la definición de tabla. Ejemplo:
|
| delete_alternate_key |
Elimine una clave alternativa por su identificador de metadatos. Advertencia Al eliminar una clave alternativa que usen las operaciones upsert hacer que se produzca un error en esas operaciones. Esta operación es irreversible. Ejemplo:
|
| delete_relationship |
Elimine una relación por su identificador de metadatos. Advertencia Al eliminar una relación también se quita el atributo de búsqueda asociado. para relaciones de uno a varios. Esta operación es irreversible. Ejemplo:
|
| get |
Obtenga metadatos básicos para una tabla si existe. Ejemplo:
|
| get_alternate_keys |
Enumere todas las claves alternativas definidas en una tabla. |
| get_relationship |
Recuperar metadatos de relación por nombre de esquema. Ejemplo:
|
| list |
Enumere todas las tablas no privadas en el entorno de Dataverse. De forma predeterminada, devuelve cada tabla donde Ejemplo:
|
| list_columns |
Enumerar todas las definiciones de atributo (columna) de una tabla. Ejemplo:
|
| list_relationships |
Enumere todas las definiciones de relación en el entorno. Ejemplo:
|
| list_table_relationships |
Enumera todas las relaciones de una tabla específica. Combina relaciones de uno a varios, varios a uno y varios a varios para la tabla dada consultando Ejemplo:
|
| remove_columns |
Quite una o varias columnas de una tabla. Ejemplo:
|
add_columns
Agregue una o varias columnas a una tabla existente.
Ejemplo:
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
| Nombre | Description |
|---|---|
|
table
Requerido
|
Nombre de esquema de la tabla (por ejemplo, |
|
columns
Requerido
|
Asignación de nombres de esquema de columna (con prefijo de personalización) a sus tipos. Los tipos admitidos son los mismos que para create. |
Devoluciones
| Tipo | Description |
|---|---|
|
Nombres de esquema de las columnas que se crearon. |
Excepciones
| Tipo | Description |
|---|---|
|
Si la tabla no existe. |
create
Cree una tabla personalizada con las columnas 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
| Nombre | Description |
|---|---|
|
table
Requerido
|
Nombre de esquema de la tabla con prefijo de personalización (por ejemplo, |
|
columns
Requerido
|
Asignación de nombres de esquema de columna (con prefijo de personalización) a sus tipos. Los tipos admitidos incluyen |
|
solution
Requerido
|
Nombre único de la solución opcional que debe poseer la nueva tabla. Cuando se omite la tabla se crea en la solución predeterminada. |
|
primary_column
Requerido
|
Nombre de esquema de columna de nombre principal opcional con prefijo de personalización (por ejemplo, |
|
display_name
Requerido
|
Nombre para mostrar legible para la tabla (por ejemplo, |
Parámetros de palabra clave únicamente
| Nombre | Description |
|---|---|
|
solution
|
Valor predeterminado: None
|
|
primary_column
|
Valor predeterminado: None
|
|
display_name
|
Valor predeterminado: None
|
Devoluciones
| Tipo | Description |
|---|---|
|
Metadatos de tabla con |
Excepciones
| Tipo | Description |
|---|---|
|
Si se produce un error en la creación de tablas o la tabla ya existe. |
Ejemplos
Cree una tabla con columnas 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
Cree una clave alternativa en una tabla.
Las claves alternativas permiten que las operaciones upsert identifiquen registros por una o varias columnas en lugar del GUID principal. Después de crear la clave se pone en cola para la creación de índices; su status pasará de "Pending" a "Active" una vez que el índice esté listo.
create_alternate_key(table: str, key_name: str, columns: List[str], *, display_name: str | None = None, language_code: int = 1033) -> AlternateKeyInfo
Parámetros
| Nombre | Description |
|---|---|
|
table
Requerido
|
Nombre de esquema de la tabla (por ejemplo, |
|
key_name
Requerido
|
Nombre de esquema de la nueva clave alternativa (por ejemplo, |
|
columns
Requerido
|
Lista de nombres lógicos de columna que componen la clave (por ejemplo, |
|
display_name
Requerido
|
Nombre para mostrar de la clave. El valor predeterminado es |
|
language_code
Requerido
|
Código de idioma para etiquetas. El valor predeterminado es 1033 (inglés). |
Parámetros de palabra clave únicamente
| Nombre | Description |
|---|---|
|
display_name
|
Valor predeterminado: None
|
|
language_code
|
Valor predeterminado: 1033
|
Devoluciones
| Tipo | Description |
|---|---|
|
Metadatos de la clave alternativa recién creada. |
Excepciones
| Tipo | Description |
|---|---|
|
Si la tabla no existe. |
|
|
Si se produce un error en la solicitud de API web. |
Ejemplos
Cree una clave alternativa de una sola columna 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
Cree una relación de campo de búsqueda simple.
Este es un método de conveniencia que se create_one_to_many_relationship ajusta para el caso común de agregar un campo de búsqueda a una tabla 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
| Nombre | Description |
|---|---|
|
referencing_table
Requerido
|
Nombre lógico de la tabla que tendrá el campo de búsqueda (tabla secundaria). |
|
lookup_field_name
Requerido
|
Nombre de esquema para el campo de búsqueda (por ejemplo, |
|
referenced_table
Requerido
|
Nombre lógico de la tabla a la que se hace referencia (tabla primaria). |
|
display_name
Requerido
|
Nombre para mostrar del campo de búsqueda. El valor predeterminado es el nombre de tabla al que se hace referencia. |
|
description
Requerido
|
Descripción opcional del campo de búsqueda. |
|
required
Requerido
|
Indica si se requiere la búsqueda. Tiene como valor predeterminado |
|
cascade_delete
Requerido
|
Comportamiento de eliminación ( |
|
solution
Requerido
|
Nombre único de solución opcional al que agregar la relación. |
|
language_code
Requerido
|
Código de idioma para etiquetas. El valor predeterminado es 1033 (inglés). |
Parámetros de palabra clave únicamente
| Nombre | Description |
|---|---|
|
display_name
|
Valor predeterminado: None
|
|
description
|
Valor predeterminado: None
|
|
required
|
Valor predeterminado: False
|
|
cascade_delete
|
Valor predeterminado: RemoveLink
|
|
solution
|
Valor predeterminado: None
|
|
language_code
|
Valor predeterminado: 1033
|
Devoluciones
| Tipo | Description |
|---|---|
|
Metadatos de relación con |
Excepciones
| Tipo | Description |
|---|---|
|
Si se produce un error en la solicitud de API web. |
Ejemplos
Cree un campo de búsqueda simple:
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
Cree una relación de varios a varios entre tablas.
Esta operación crea una relación de varios a varios y una tabla intersect para administrar la relación.
create_many_to_many_relationship(relationship: ManyToManyRelationshipMetadata, *, solution: str | None = None) -> RelationshipInfo
Parámetros
| Nombre | Description |
|---|---|
|
relationship
Requerido
|
Metadatos que definen la relación de varios a varios. |
|
solution
Requerido
|
Nombre único de solución opcional al que agregar relación. |
Parámetros de palabra clave únicamente
| Nombre | Description |
|---|---|
|
solution
|
Valor predeterminado: None
|
Devoluciones
| Tipo | Description |
|---|---|
|
Metadatos de relación con |
Excepciones
| Tipo | Description |
|---|---|
|
Si se produce un error en la solicitud de API web. |
Ejemplos
Cree una relación de varios a varios: Employee <-> Project:
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
Cree una relación uno a varios entre tablas.
Esta operación crea tanto la relación como el atributo de búsqueda en la tabla de referencia.
create_one_to_many_relationship(lookup: LookupAttributeMetadata, relationship: OneToManyRelationshipMetadata, *, solution: str | None = None) -> RelationshipInfo
Parámetros
| Nombre | Description |
|---|---|
|
lookup
Requerido
|
Metadatos que definen el atributo de búsqueda. |
|
relationship
Requerido
|
Metadatos que definen la relación. |
|
solution
Requerido
|
Nombre único de solución opcional al que agregar relación. |
Parámetros de palabra clave únicamente
| Nombre | Description |
|---|---|
|
solution
|
Valor predeterminado: None
|
Devoluciones
| Tipo | Description |
|---|---|
|
Metadatos de relación con |
Excepciones
| Tipo | Description |
|---|---|
|
Si se produce un error en la solicitud de API web. |
Ejemplos
Cree una relación uno a varios: Departamento (1):> Empleado (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
Elimine una tabla personalizada por nombre de esquema.
Advertencia
Esta operación es irreversible y eliminará todos los registros del
tabla junto con la definición de tabla.
Ejemplo:
client.tables.delete("new_MyTestTable")
delete(table: str) -> None
Parámetros
| Nombre | Description |
|---|---|
|
table
Requerido
|
Nombre de esquema de la tabla (por ejemplo, |
Excepciones
| Tipo | Description |
|---|---|
|
Si la tabla no existe o se produce un error en la eliminación. |
delete_alternate_key
Elimine una clave alternativa por su identificador de metadatos.
Advertencia
Al eliminar una clave alternativa que usen las operaciones upsert
hacer que se produzca un error en esas operaciones. Esta operación es irreversible.
Ejemplo:
client.tables.delete_alternate_key(
"new_Product",
"12345678-1234-1234-1234-123456789abc",
)
delete_alternate_key(table: str, key_id: str) -> None
Parámetros
| Nombre | Description |
|---|---|
|
table
Requerido
|
Nombre de esquema de la tabla (por ejemplo, |
|
key_id
Requerido
|
GUID de metadatos de la clave alternativa que se va a eliminar. |
Excepciones
| Tipo | Description |
|---|---|
|
Si la tabla no existe. |
|
|
Si se produce un error en la solicitud de API web. |
delete_relationship
Elimine una relación por su identificador de metadatos.
Advertencia
Al eliminar una relación también se quita el atributo de búsqueda asociado.
para relaciones de uno a varios. Esta operación es irreversible.
Ejemplo:
client.tables.delete_relationship(
"12345678-1234-1234-1234-123456789abc"
)
delete_relationship(relationship_id: str) -> None
Parámetros
| Nombre | Description |
|---|---|
|
relationship_id
Requerido
|
GUID de los metadatos de la relación. |
Excepciones
| Tipo | Description |
|---|---|
|
Si se produce un error en la solicitud de API web. |
get
Obtenga metadatos básicos para una tabla si existe.
Ejemplo:
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
| Nombre | Description |
|---|---|
|
table
Requerido
|
Nombre de esquema de la tabla (por ejemplo |
Devoluciones
| Tipo | Description |
|---|---|
|
Metadatos de tabla o |
get_alternate_keys
Enumere todas las claves alternativas definidas en una tabla.
get_alternate_keys(table: str) -> List[AlternateKeyInfo]
Parámetros
| Nombre | Description |
|---|---|
|
table
Requerido
|
Nombre de esquema de la tabla (por ejemplo, |
Devoluciones
| Tipo | Description |
|---|---|
|
Lista de objetos de metadatos de clave alternativos. Puede estar vacío si no se definen claves alternativas. |
Excepciones
| Tipo | Description |
|---|---|
|
Si la tabla no existe. |
|
|
Si se produce un error en la solicitud de API web. |
Ejemplos
Enumere las claves alternativas e imprima su estado:
keys = client.tables.get_alternate_keys("new_Product")
for key in keys:
print(f"{key.schema_name}: {key.status}")
get_relationship
Recuperar metadatos de relación por nombre de esquema.
Ejemplo:
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
| Nombre | Description |
|---|---|
|
schema_name
Requerido
|
El nombre del esquema de la relación. |
Devoluciones
| Tipo | Description |
|---|---|
|
Metadatos de relación o |
Excepciones
| Tipo | Description |
|---|---|
|
Si se produce un error en la solicitud de API web. |
list
Enumere todas las tablas no privadas en el entorno de Dataverse.
De forma predeterminada, devuelve cada tabla donde IsPrivate eq false. Proporcione una expresión OData $filter opcional para restringir aún más los resultados.
La expresión se combina con la cláusula predeterminada IsPrivate eq false mediante and.
Ejemplo:
# 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
| Nombre | Description |
|---|---|
|
filter
Requerido
|
Expresión OData |
|
select
Requerido
|
Lista opcional de nombres de propiedad que se van a incluir en la respuesta (proyectado a través de la opción de consulta OData |
Parámetros de palabra clave únicamente
| Nombre | Description |
|---|---|
|
filter
|
Valor predeterminado: None
|
|
select
|
Valor predeterminado: None
|
Devoluciones
| Tipo | Description |
|---|---|
|
Lista de diccionarios de metadatos de EntityDefinition. |
list_columns
Enumerar todas las definiciones de atributo (columna) de una tabla.
Ejemplo:
# 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
| Nombre | Description |
|---|---|
|
table
Requerido
|
Nombre de esquema de la tabla (por ejemplo |
|
select
Requerido
|
Lista opcional de nombres de propiedad que se van a proyectar a través |
|
filter
Requerido
|
Expresión OData |
Parámetros de palabra clave únicamente
| Nombre | Description |
|---|---|
|
select
|
Valor predeterminado: None
|
|
filter
|
Valor predeterminado: None
|
Devoluciones
| Tipo | Description |
|---|---|
|
Lista de diccionarios de metadatos de atributo sin procesar. |
Excepciones
| Tipo | Description |
|---|---|
|
Si no se encuentra la tabla. |
|
|
Si se produce un error en la solicitud de API web. |
list_relationships
Enumere todas las definiciones de relación en el entorno.
Ejemplo:
# 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
| Nombre | Description |
|---|---|
|
filter
Requerido
|
Expresión OData |
|
select
Requerido
|
Lista opcional de nombres de propiedad que se van a proyectar a través |
Parámetros de palabra clave únicamente
| Nombre | Description |
|---|---|
|
filter
|
Valor predeterminado: None
|
|
select
|
Valor predeterminado: None
|
Devoluciones
| Tipo | Description |
|---|---|
|
Lista de diccionarios de metadatos de relación sin procesar. |
Excepciones
| Tipo | Description |
|---|---|
|
Si se produce un error en la solicitud de API web. |
list_table_relationships
Enumera todas las relaciones de una tabla específica.
Combina relaciones de uno a varios, varios a uno y varios a varios para la tabla dada consultando EntityDefinitions({id})/OneToManyRelationships, EntityDefinitions({id})/ManyToOneRelationshipsy EntityDefinitions({id})/ManyToManyRelationships.
Ejemplo:
# 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
| Nombre | Description |
|---|---|
|
table
Requerido
|
Nombre de esquema de la tabla (por ejemplo, |
|
filter
Requerido
|
Expresión OData |
|
select
Requerido
|
Lista opcional de nombres de propiedad que se van a proyectar a través |
Parámetros de palabra clave únicamente
| Nombre | Description |
|---|---|
|
filter
|
Valor predeterminado: None
|
|
select
|
Valor predeterminado: None
|
Devoluciones
| Tipo | Description |
|---|---|
|
Lista combinada de diccionarios de metadatos de relación uno a varios, varios a uno y varios a varios. |
Excepciones
| Tipo | Description |
|---|---|
|
Si no se encuentra la tabla. |
|
|
Si se produce un error en la solicitud de API web. |
remove_columns
Quite una o varias columnas de una tabla.
Ejemplo:
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
| Nombre | Description |
|---|---|
|
table
Requerido
|
Nombre de esquema de la tabla (por ejemplo, |
|
columns
Requerido
|
Nombre de esquema de columna o lista de nombres de esquema de columna que se van a quitar. Debe incluir el prefijo de personalización (por ejemplo, |
Devoluciones
| Tipo | Description |
|---|---|
|
Nombres de esquema de las columnas que se quitaron. |
Excepciones
| Tipo | Description |
|---|---|
|
Si la tabla o una columna especificada no existen. |