TableOperations Classe
Spazio dei nomi per le operazioni sui metadati a livello di tabella.
Accesso tramite client.tables. Fornisce operazioni per creare, eliminare, esaminare ed elencare tabelle dataverse, nonché aggiungere e rimuovere colonne.
Esempio:
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")
Costruttore
TableOperations(client: DataverseClient)
Parametri
| Nome | Descrizione |
|---|---|
|
client
Necessario
|
Istanza padre DataverseClient . |
Metodi
| add_columns |
Aggiungere una o più colonne a una tabella esistente. Esempio:
|
| create |
Creare una tabella personalizzata con le colonne specificate. |
| create_alternate_key |
Creare una chiave alternativa in una tabella. Le chiavi alternative consentono alle operazioni upsert di identificare i record in base a una o più colonne anziché al GUID primario. Dopo la creazione, la chiave viene accodata per la compilazione dell'indice; status passa da |
| create_lookup_field |
Creare una relazione di campo di ricerca semplice. Si tratta di un metodo pratico che esegue create_one_to_many_relationship il wrapping per il caso comune di aggiunta di un campo di ricerca a una tabella esistente. |
| create_many_to_many_relationship |
Creare una relazione molti-a-molti tra tabelle. Questa operazione crea una relazione molti-a-molti e una tabella interseca per gestire la relazione. |
| create_one_to_many_relationship |
Creare una relazione uno-a-molti tra tabelle. Questa operazione crea sia la relazione che l'attributo di ricerca nella tabella di riferimento. |
| delete |
Eliminare una tabella personalizzata in base al nome dello schema. Avviso Questa operazione è irreversibile e eliminerà tutti i record nel tabella insieme alla definizione della tabella. Esempio:
|
| delete_alternate_key |
Eliminare una chiave alternativa in base all'ID dei metadati. Avviso L'eliminazione di una chiave alternativa usata dalle operazioni upsert causa l'esito negativo di tali operazioni. questa operazione è irreversibile. Esempio:
|
| delete_relationship |
Eliminare una relazione in base al relativo ID metadati. Avviso L'eliminazione di una relazione rimuove anche l'attributo di ricerca associato per le relazioni uno-a-molti. questa operazione è irreversibile. Esempio:
|
| get |
Ottenere i metadati di base per una tabella, se esistente. Esempio:
|
| get_alternate_keys |
Elencare tutte le chiavi alternative definite in una tabella. |
| get_relationship |
Recuperare i metadati della relazione in base al nome dello schema. Esempio:
|
| list |
Elencare tutte le tabelle non private nell'ambiente Dataverse. Per impostazione predefinita, restituisce ogni tabella in cui Esempio:
|
| list_columns |
Elencare tutte le definizioni di attributo (colonna) per una tabella. Esempio:
|
| list_relationships |
Elencare tutte le definizioni di relazione nell'ambiente. Esempio:
|
| list_table_relationships |
Elencare tutte le relazioni per una tabella specifica. Combina relazioni uno-a-molti, molti-a-uno e molti-a-molti per la tabella specificata eseguendo Esempio:
|
| remove_columns |
Rimuovere una o più colonne da una tabella. Esempio:
|
add_columns
Aggiungere una o più colonne a una tabella esistente.
Esempio:
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]
Parametri
| Nome | Descrizione |
|---|---|
|
table
Necessario
|
Nome dello schema della tabella ,ad esempio |
|
columns
Necessario
|
Mapping dei nomi degli schemi di colonna (con prefisso di personalizzazione) ai relativi tipi. I tipi supportati sono uguali a per create. |
Valori restituiti
| Tipo | Descrizione |
|---|---|
|
Nomi di schema delle colonne create. |
Eccezioni
| Tipo | Descrizione |
|---|---|
|
Se la tabella non esiste. |
create
Creare una tabella personalizzata con le colonne specificate.
create(table: str, columns: Dict[str, Any], *, solution: str | None = None, primary_column: str | None = None, display_name: str | None = None) -> TableInfo
Parametri
| Nome | Descrizione |
|---|---|
|
table
Necessario
|
Nome dello schema della tabella con prefisso di personalizzazione ,ad esempio |
|
columns
Necessario
|
Mapping dei nomi degli schemi di colonna (con prefisso di personalizzazione) ai relativi tipi. I tipi supportati includono |
|
solution
Necessario
|
Nome univoco della soluzione facoltativo proprietario della nuova tabella. Quando viene omessa la tabella viene creata nella soluzione predefinita. |
|
primary_column
Necessario
|
Nome primario facoltativo dello schema della colonna con prefisso di personalizzazione (ad esempio |
|
display_name
Necessario
|
Nome visualizzato leggibile per la tabella ,ad esempio |
Parametri di sole parole chiave
| Nome | Descrizione |
|---|---|
|
solution
|
Valore predefinito: None
|
|
primary_column
|
Valore predefinito: None
|
|
display_name
|
Valore predefinito: None
|
Valori restituiti
| Tipo | Descrizione |
|---|---|
|
Metadati della tabella con |
Eccezioni
| Tipo | Descrizione |
|---|---|
|
Se la creazione della tabella non riesce o la tabella esiste già. |
Esempio
Creare una tabella con colonne semplici:
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
Creare una chiave alternativa in una tabella.
Le chiavi alternative consentono alle operazioni upsert di identificare i record in base a una o più colonne anziché al GUID primario. Dopo la creazione, la chiave viene accodata per la compilazione dell'indice; status passa da "Pending" a "Active" una volta che l'indice è pronto.
create_alternate_key(table: str, key_name: str, columns: List[str], *, display_name: str | None = None, language_code: int = 1033) -> AlternateKeyInfo
Parametri
| Nome | Descrizione |
|---|---|
|
table
Necessario
|
Nome dello schema della tabella ,ad esempio |
|
key_name
Necessario
|
Nome dello schema per la nuova chiave alternativa , ad esempio |
|
columns
Necessario
|
Elenco di nomi logici di colonna che compongono la chiave ,ad esempio |
|
display_name
Necessario
|
Nome visualizzato per la chiave. Il valore predefinito è se |
|
language_code
Necessario
|
Codice lingua per le etichette. Il valore predefinito è 1033 (inglese). |
Parametri di sole parole chiave
| Nome | Descrizione |
|---|---|
|
display_name
|
Valore predefinito: None
|
|
language_code
|
Valore predefinito: 1033
|
Valori restituiti
| Tipo | Descrizione |
|---|---|
|
Metadati per la chiave alternativa appena creata. |
Eccezioni
| Tipo | Descrizione |
|---|---|
|
Se la tabella non esiste. |
|
|
Se la richiesta dell'API Web ha esito negativo. |
Esempio
Creare una chiave alternativa a colonna singola per 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
Creare una relazione di campo di ricerca semplice.
Si tratta di un metodo pratico che esegue create_one_to_many_relationship il wrapping per il caso comune di aggiunta di un campo di ricerca a una tabella esistente.
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
Parametri
| Nome | Descrizione |
|---|---|
|
referencing_table
Necessario
|
Nome logico della tabella che avrà il campo di ricerca (tabella figlio). |
|
lookup_field_name
Necessario
|
Nome dello schema per il campo di ricerca (ad esempio, |
|
referenced_table
Necessario
|
Nome logico della tabella a cui si fa riferimento (tabella padre). |
|
display_name
Necessario
|
Nome visualizzato per il campo di ricerca. Il valore predefinito è il nome della tabella a cui si fa riferimento. |
|
description
Necessario
|
Descrizione facoltativa per il campo di ricerca. |
|
required
Necessario
|
Indica se la ricerca è obbligatoria. Il valore predefinito è |
|
cascade_delete
Necessario
|
Comportamento di eliminazione ( |
|
solution
Necessario
|
Nome univoco della soluzione facoltativo a cui aggiungere la relazione. |
|
language_code
Necessario
|
Codice lingua per le etichette. Il valore predefinito è 1033 (inglese). |
Parametri di sole parole chiave
| Nome | Descrizione |
|---|---|
|
display_name
|
Valore predefinito: None
|
|
description
|
Valore predefinito: None
|
|
required
|
Valore predefinito: False
|
|
cascade_delete
|
Valore predefinito: RemoveLink
|
|
solution
|
Valore predefinito: None
|
|
language_code
|
Valore predefinito: 1033
|
Valori restituiti
| Tipo | Descrizione |
|---|---|
|
Metadati delle relazioni con |
Eccezioni
| Tipo | Descrizione |
|---|---|
|
Se la richiesta dell'API Web ha esito negativo. |
Esempio
Creare un campo di ricerca semplice:
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
Creare una relazione molti-a-molti tra tabelle.
Questa operazione crea una relazione molti-a-molti e una tabella interseca per gestire la relazione.
create_many_to_many_relationship(relationship: ManyToManyRelationshipMetadata, *, solution: str | None = None) -> RelationshipInfo
Parametri
| Nome | Descrizione |
|---|---|
|
relationship
Necessario
|
Metadati che definiscono la relazione molti-a-molti. |
|
solution
Necessario
|
Nome univoco della soluzione facoltativo a cui aggiungere la relazione. |
Parametri di sole parole chiave
| Nome | Descrizione |
|---|---|
|
solution
|
Valore predefinito: None
|
Valori restituiti
| Tipo | Descrizione |
|---|---|
|
Metadati delle relazioni con |
Eccezioni
| Tipo | Descrizione |
|---|---|
|
Se la richiesta dell'API Web ha esito negativo. |
Esempio
Creare una relazione molti-a-molti: 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
Creare una relazione uno-a-molti tra tabelle.
Questa operazione crea sia la relazione che l'attributo di ricerca nella tabella di riferimento.
create_one_to_many_relationship(lookup: LookupAttributeMetadata, relationship: OneToManyRelationshipMetadata, *, solution: str | None = None) -> RelationshipInfo
Parametri
| Nome | Descrizione |
|---|---|
|
lookup
Necessario
|
Metadati che definiscono l'attributo di ricerca. |
|
relationship
Necessario
|
Metadati che definiscono la relazione. |
|
solution
Necessario
|
Nome univoco della soluzione facoltativo a cui aggiungere la relazione. |
Parametri di sole parole chiave
| Nome | Descrizione |
|---|---|
|
solution
|
Valore predefinito: None
|
Valori restituiti
| Tipo | Descrizione |
|---|---|
|
Metadati delle relazioni con |
Eccezioni
| Tipo | Descrizione |
|---|---|
|
Se la richiesta dell'API Web ha esito negativo. |
Esempio
Creare una relazione uno-a-molti: Reparto (1) -> Dipendente (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
Eliminare una tabella personalizzata in base al nome dello schema.
Avviso
Questa operazione è irreversibile e eliminerà tutti i record nel
tabella insieme alla definizione della tabella.
Esempio:
client.tables.delete("new_MyTestTable")
delete(table: str) -> None
Parametri
| Nome | Descrizione |
|---|---|
|
table
Necessario
|
Nome dello schema della tabella ,ad esempio |
Eccezioni
| Tipo | Descrizione |
|---|---|
|
Se la tabella non esiste o l'eliminazione non riesce. |
delete_alternate_key
Eliminare una chiave alternativa in base all'ID dei metadati.
Avviso
L'eliminazione di una chiave alternativa usata dalle operazioni upsert
causa l'esito negativo di tali operazioni. questa operazione è irreversibile.
Esempio:
client.tables.delete_alternate_key(
"new_Product",
"12345678-1234-1234-1234-123456789abc",
)
delete_alternate_key(table: str, key_id: str) -> None
Parametri
| Nome | Descrizione |
|---|---|
|
table
Necessario
|
Nome dello schema della tabella ,ad esempio |
|
key_id
Necessario
|
GUID dei metadati della chiave alternativa da eliminare. |
Eccezioni
| Tipo | Descrizione |
|---|---|
|
Se la tabella non esiste. |
|
|
Se la richiesta dell'API Web ha esito negativo. |
delete_relationship
Eliminare una relazione in base al relativo ID metadati.
Avviso
L'eliminazione di una relazione rimuove anche l'attributo di ricerca associato
per le relazioni uno-a-molti. questa operazione è irreversibile.
Esempio:
client.tables.delete_relationship(
"12345678-1234-1234-1234-123456789abc"
)
delete_relationship(relationship_id: str) -> None
Parametri
| Nome | Descrizione |
|---|---|
|
relationship_id
Necessario
|
GUID dei metadati della relazione. |
Eccezioni
| Tipo | Descrizione |
|---|---|
|
Se la richiesta dell'API Web ha esito negativo. |
get
Ottenere i metadati di base per una tabella, se esistente.
Esempio:
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
Parametri
| Nome | Descrizione |
|---|---|
|
table
Necessario
|
Nome dello schema della tabella ,ad esempio |
Valori restituiti
| Tipo | Descrizione |
|---|---|
|
Metadati della tabella o |
get_alternate_keys
Elencare tutte le chiavi alternative definite in una tabella.
get_alternate_keys(table: str) -> List[AlternateKeyInfo]
Parametri
| Nome | Descrizione |
|---|---|
|
table
Necessario
|
Nome dello schema della tabella ,ad esempio |
Valori restituiti
| Tipo | Descrizione |
|---|---|
|
Elenco di oggetti metadati chiave alternativi. Può essere vuoto se non sono definite chiavi alternative. |
Eccezioni
| Tipo | Descrizione |
|---|---|
|
Se la tabella non esiste. |
|
|
Se la richiesta dell'API Web ha esito negativo. |
Esempio
Elencare le chiavi alternative e stamparne lo stato:
keys = client.tables.get_alternate_keys("new_Product")
for key in keys:
print(f"{key.schema_name}: {key.status}")
get_relationship
Recuperare i metadati della relazione in base al nome dello schema.
Esempio:
rel = client.tables.get_relationship("new_Department_Employee")
if rel:
print(f"Found: {rel.relationship_schema_name}")
get_relationship(schema_name: str) -> RelationshipInfo | None
Parametri
| Nome | Descrizione |
|---|---|
|
schema_name
Necessario
|
Nome dello schema della relazione. |
Valori restituiti
| Tipo | Descrizione |
|---|---|
|
Metadati della relazione o |
Eccezioni
| Tipo | Descrizione |
|---|---|
|
Se la richiesta dell'API Web ha esito negativo. |
list
Elencare tutte le tabelle non private nell'ambiente Dataverse.
Per impostazione predefinita, restituisce ogni tabella in cui IsPrivate eq false. Fornire un'espressione OData $filter facoltativa per restringere ulteriormente i risultati.
L'espressione viene combinata con la clausola predefinita IsPrivate eq false usando and.
Esempio:
# 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]]
Parametri
| Nome | Descrizione |
|---|---|
|
filter
Necessario
|
Espressione OData |
|
select
Necessario
|
Elenco facoltativo di nomi di proprietà da includere nella risposta (proiettato tramite l'opzione di query OData |
Parametri di sole parole chiave
| Nome | Descrizione |
|---|---|
|
filter
|
Valore predefinito: None
|
|
select
|
Valore predefinito: None
|
Valori restituiti
| Tipo | Descrizione |
|---|---|
|
Elenco dei dizionari di metadati EntityDefinition. |
list_columns
Elencare tutte le definizioni di attributo (colonna) per una tabella.
Esempio:
# 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]]
Parametri
| Nome | Descrizione |
|---|---|
|
table
Necessario
|
Nome dello schema della tabella ,ad esempio |
|
select
Necessario
|
Elenco facoltativo di nomi di proprietà da proiettare tramite |
|
filter
Necessario
|
Espressione OData |
Parametri di sole parole chiave
| Nome | Descrizione |
|---|---|
|
select
|
Valore predefinito: None
|
|
filter
|
Valore predefinito: None
|
Valori restituiti
| Tipo | Descrizione |
|---|---|
|
Elenco di dizionari di metadati di attributi non elaborati. |
Eccezioni
| Tipo | Descrizione |
|---|---|
|
Se la tabella non viene trovata. |
|
|
Se la richiesta dell'API Web ha esito negativo. |
list_relationships
Elencare tutte le definizioni di relazione nell'ambiente.
Esempio:
# 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]]
Parametri
| Nome | Descrizione |
|---|---|
|
filter
Necessario
|
Espressione OData |
|
select
Necessario
|
Elenco facoltativo di nomi di proprietà da proiettare tramite |
Parametri di sole parole chiave
| Nome | Descrizione |
|---|---|
|
filter
|
Valore predefinito: None
|
|
select
|
Valore predefinito: None
|
Valori restituiti
| Tipo | Descrizione |
|---|---|
|
Elenco di dizionari di metadati delle relazioni non elaborate. |
Eccezioni
| Tipo | Descrizione |
|---|---|
|
Se la richiesta dell'API Web ha esito negativo. |
list_table_relationships
Elencare tutte le relazioni per una tabella specifica.
Combina relazioni uno-a-molti, molti-a-uno e molti-a-molti per la tabella specificata eseguendo EntityDefinitions({id})/OneToManyRelationshipsquery su , EntityDefinitions({id})/ManyToOneRelationshipse EntityDefinitions({id})/ManyToManyRelationships.
Esempio:
# 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]]
Parametri
| Nome | Descrizione |
|---|---|
|
table
Necessario
|
Nome dello schema della tabella ,ad esempio |
|
filter
Necessario
|
Espressione OData |
|
select
Necessario
|
Elenco facoltativo di nomi di proprietà da proiettare tramite |
Parametri di sole parole chiave
| Nome | Descrizione |
|---|---|
|
filter
|
Valore predefinito: None
|
|
select
|
Valore predefinito: None
|
Valori restituiti
| Tipo | Descrizione |
|---|---|
|
Elenco combinato di dizionari di metadati delle relazioni uno-a-molti, molti-a-uno e molti-a-molti. |
Eccezioni
| Tipo | Descrizione |
|---|---|
|
Se la tabella non viene trovata. |
|
|
Se la richiesta dell'API Web ha esito negativo. |
remove_columns
Rimuovere una o più colonne da una tabella.
Esempio:
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]
Parametri
| Nome | Descrizione |
|---|---|
|
table
Necessario
|
Nome dello schema della tabella ,ad esempio |
|
columns
Necessario
|
Nome dello schema di colonna o elenco di nomi di schema di colonna da rimuovere. Deve includere il prefisso di personalizzazione ,ad esempio |
Valori restituiti
| Tipo | Descrizione |
|---|---|
|
Nomi di schema delle colonne rimosse. |
Eccezioni
| Tipo | Descrizione |
|---|---|
|
Se la tabella o una colonna specificata non esiste. |