TableOperations Classe
Espace de noms pour les opérations de métadonnées au niveau de la table.
Accessible via client.tables. Fournit des opérations pour créer, supprimer, inspecter et répertorier des tables Dataverse, ainsi que pour ajouter et supprimer des colonnes.
Exemple :
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")
Constructeur
TableOperations(client: DataverseClient)
Paramètres
| Nom | Description |
|---|---|
|
client
Obligatoire
|
Instance parente DataverseClient . |
Méthodes
| add_columns |
Ajoutez une ou plusieurs colonnes à une table existante. Exemple :
|
| create |
Créez une table personnalisée avec les colonnes spécifiées. |
| create_alternate_key |
Créez une autre clé sur une table. Les autres clés permettent aux opérations upsert d’identifier les enregistrements par une ou plusieurs colonnes au lieu du GUID principal. Une fois la clé créée, mise en file d’attente pour la génération d’index ; son status passage à une |
| create_lookup_field |
Créez une relation de champ de recherche simple. Il s’agit d’une méthode pratique qui encapsule create_one_to_many_relationship le cas courant d’ajout d’un champ de recherche à une table existante. |
| create_many_to_many_relationship |
Créez une relation plusieurs-à-plusieurs entre les tables. Cette opération crée une relation plusieurs-à-plusieurs et une table croisée pour gérer la relation. |
| create_one_to_many_relationship |
Créez une relation un-à-plusieurs entre les tables. Cette opération crée à la fois la relation et l’attribut de recherche sur la table de référencement. |
| delete |
Supprimez une table personnalisée par nom de schéma. Warning Cette opération est irréversible et supprime tous les enregistrements dans le table avec la définition de table. Exemple :
|
| delete_alternate_key |
Supprimez une autre clé par son ID de métadonnées. Warning La suppression d’une autre clé utilisée par les opérations upsert provoquent l’échec de ces opérations. Cette opération est irréversible. Exemple :
|
| delete_relationship |
Supprimez une relation par son ID de métadonnées. Warning La suppression d’une relation supprime également l’attribut de recherche associé pour les relations un-à-plusieurs. Cette opération est irréversible. Exemple :
|
| get |
Obtenez les métadonnées de base d’une table s’il existe. Exemple :
|
| get_alternate_keys |
Répertorier toutes les clés alternatives définies sur une table. |
| get_relationship |
Récupérer les métadonnées de relation par nom de schéma. Exemple :
|
| list |
Répertorier toutes les tables non privées dans l’environnement Dataverse. Par défaut, chaque table renvoie chaque table où Exemple :
|
| list_columns |
Répertorier toutes les définitions d’attribut (colonne) d’une table. Exemple :
|
| list_relationships |
Répertorier toutes les définitions de relation dans l’environnement. Exemple :
|
| list_table_relationships |
Répertorier toutes les relations pour une table spécifique. Combine des relations un-à-plusieurs, plusieurs-à-un et plusieurs-à-plusieurs pour la table donnée en interrogeant Exemple :
|
| remove_columns |
Supprimez une ou plusieurs colonnes d’une table. Exemple :
|
add_columns
Ajoutez une ou plusieurs colonnes à une table existante.
Exemple :
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]
Paramètres
| Nom | Description |
|---|---|
|
table
Obligatoire
|
Nom du schéma de la table (par exemple |
|
columns
Obligatoire
|
Mappage des noms de schéma de colonne (avec préfixe de personnalisation) à leurs types. Les types pris en charge sont les mêmes que pour create. |
Retours
| Type | Description |
|---|---|
|
Noms de schéma des colonnes qui ont été créées. |
Exceptions
| Type | Description |
|---|---|
|
Si la table n’existe pas. |
create
Créez une table personnalisée avec les colonnes spécifiées.
create(table: str, columns: Dict[str, Any], *, solution: str | None = None, primary_column: str | None = None, display_name: str | None = None) -> TableInfo
Paramètres
| Nom | Description |
|---|---|
|
table
Obligatoire
|
Nom du schéma de la table avec préfixe de personnalisation (par exemple |
|
columns
Obligatoire
|
Mappage des noms de schéma de colonne (avec préfixe de personnalisation) à leurs types. Les types pris en charge incluent |
|
solution
Obligatoire
|
Nom unique de solution facultatif qui doit posséder la nouvelle table. En cas d’omission de la table est créée dans la solution par défaut. |
|
primary_column
Obligatoire
|
Nom de schéma de colonne de nom principal facultatif avec préfixe de personnalisation (par exemple |
|
display_name
Obligatoire
|
Nom complet lisible par l’homme pour la table (par exemple |
Paramètres de mot clé uniquement
| Nom | Description |
|---|---|
|
solution
|
Valeur par défaut: None
|
|
primary_column
|
Valeur par défaut: None
|
|
display_name
|
Valeur par défaut: None
|
Retours
| Type | Description |
|---|---|
|
Métadonnées de table avec |
Exceptions
| Type | Description |
|---|---|
|
Si la création de table échoue ou si la table existe déjà. |
Exemples
Créez une table avec des colonnes 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
Créez une autre clé sur une table.
Les autres clés permettent aux opérations upsert d’identifier les enregistrements par une ou plusieurs colonnes au lieu du GUID principal. Une fois la clé créée, mise en file d’attente pour la génération d’index ; son status passage à une "Pending""Active" fois l’index prêt.
create_alternate_key(table: str, key_name: str, columns: List[str], *, display_name: str | None = None, language_code: int = 1033) -> AlternateKeyInfo
Paramètres
| Nom | Description |
|---|---|
|
table
Obligatoire
|
Nom du schéma de la table (par exemple |
|
key_name
Obligatoire
|
Nom du schéma pour la nouvelle clé alternative (par exemple |
|
columns
Obligatoire
|
Liste des noms logiques de colonne qui composent la clé (par exemple |
|
display_name
Obligatoire
|
Nom complet de la clé. La valeur par défaut est si |
|
language_code
Obligatoire
|
Code de langue pour les étiquettes. La valeur par défaut est 1033 (anglais). |
Paramètres de mot clé uniquement
| Nom | Description |
|---|---|
|
display_name
|
Valeur par défaut: None
|
|
language_code
|
Valeur par défaut: 1033
|
Retours
| Type | Description |
|---|---|
|
Métadonnées pour la clé de remplacement nouvellement créée. |
Exceptions
| Type | Description |
|---|---|
|
Si la table n’existe pas. |
|
|
Si la demande d’API web échoue. |
Exemples
Créez une autre clé à colonne unique pour 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
Créez une relation de champ de recherche simple.
Il s’agit d’une méthode pratique qui encapsule create_one_to_many_relationship le cas courant d’ajout d’un champ de recherche à une table existante.
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
Paramètres
| Nom | Description |
|---|---|
|
referencing_table
Obligatoire
|
Nom logique de la table qui aura le champ de recherche (table enfant). |
|
lookup_field_name
Obligatoire
|
Nom du schéma pour le champ de recherche (par exemple, |
|
referenced_table
Obligatoire
|
Nom logique de la table référencée (table parente). |
|
display_name
Obligatoire
|
Nom complet du champ de recherche. La valeur par défaut est le nom de la table référencée. |
|
description
Obligatoire
|
Description facultative du champ de recherche. |
|
required
Obligatoire
|
Indique si la recherche est requise. La valeur par défaut est |
|
cascade_delete
Obligatoire
|
Supprimer le comportement ( |
|
solution
Obligatoire
|
Nom unique de solution facultatif à laquelle ajouter la relation. |
|
language_code
Obligatoire
|
Code de langue pour les étiquettes. La valeur par défaut est 1033 (anglais). |
Paramètres de mot clé uniquement
| Nom | Description |
|---|---|
|
display_name
|
Valeur par défaut: None
|
|
description
|
Valeur par défaut: None
|
|
required
|
Valeur par défaut: False
|
|
cascade_delete
|
Valeur par défaut: RemoveLink
|
|
solution
|
Valeur par défaut: None
|
|
language_code
|
Valeur par défaut: 1033
|
Retours
| Type | Description |
|---|---|
|
Métadonnées de relation avec |
Exceptions
| Type | Description |
|---|---|
|
Si la demande d’API web échoue. |
Exemples
Créez un champ de recherche 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
Créez une relation plusieurs-à-plusieurs entre les tables.
Cette opération crée une relation plusieurs-à-plusieurs et une table croisée pour gérer la relation.
create_many_to_many_relationship(relationship: ManyToManyRelationshipMetadata, *, solution: str | None = None) -> RelationshipInfo
Paramètres
| Nom | Description |
|---|---|
|
relationship
Obligatoire
|
Métadonnées définissant la relation plusieurs-à-plusieurs. |
|
solution
Obligatoire
|
Nom unique de solution facultatif à laquelle ajouter une relation. |
Paramètres de mot clé uniquement
| Nom | Description |
|---|---|
|
solution
|
Valeur par défaut: None
|
Retours
| Type | Description |
|---|---|
|
Métadonnées de relation avec |
Exceptions
| Type | Description |
|---|---|
|
Si la demande d’API web échoue. |
Exemples
Créer une relation plusieurs-à-plusieurs : Employé <-> Projet :
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
Créez une relation un-à-plusieurs entre les tables.
Cette opération crée à la fois la relation et l’attribut de recherche sur la table de référencement.
create_one_to_many_relationship(lookup: LookupAttributeMetadata, relationship: OneToManyRelationshipMetadata, *, solution: str | None = None) -> RelationshipInfo
Paramètres
| Nom | Description |
|---|---|
|
lookup
Obligatoire
|
Métadonnées définissant l’attribut de recherche. |
|
relationship
Obligatoire
|
Métadonnées définissant la relation. |
|
solution
Obligatoire
|
Nom unique de solution facultatif à laquelle ajouter une relation. |
Paramètres de mot clé uniquement
| Nom | Description |
|---|---|
|
solution
|
Valeur par défaut: None
|
Retours
| Type | Description |
|---|---|
|
Métadonnées de relation avec |
Exceptions
| Type | Description |
|---|---|
|
Si la demande d’API web échoue. |
Exemples
Créer une relation un-à-plusieurs : Département (1) -> Employé (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
Supprimez une table personnalisée par nom de schéma.
Warning
Cette opération est irréversible et supprime tous les enregistrements dans le
table avec la définition de table.
Exemple :
client.tables.delete("new_MyTestTable")
delete(table: str) -> None
Paramètres
| Nom | Description |
|---|---|
|
table
Obligatoire
|
Nom du schéma de la table (par exemple |
Exceptions
| Type | Description |
|---|---|
|
Si la table n’existe pas ou si la suppression échoue. |
delete_alternate_key
Supprimez une autre clé par son ID de métadonnées.
Warning
La suppression d’une autre clé utilisée par les opérations upsert
provoquent l’échec de ces opérations. Cette opération est irréversible.
Exemple :
client.tables.delete_alternate_key(
"new_Product",
"12345678-1234-1234-1234-123456789abc",
)
delete_alternate_key(table: str, key_id: str) -> None
Paramètres
| Nom | Description |
|---|---|
|
table
Obligatoire
|
Nom du schéma de la table (par exemple |
|
key_id
Obligatoire
|
GUID des métadonnées de la clé de remplacement à supprimer. |
Exceptions
| Type | Description |
|---|---|
|
Si la table n’existe pas. |
|
|
Si la demande d’API web échoue. |
delete_relationship
Supprimez une relation par son ID de métadonnées.
Warning
La suppression d’une relation supprime également l’attribut de recherche associé
pour les relations un-à-plusieurs. Cette opération est irréversible.
Exemple :
client.tables.delete_relationship(
"12345678-1234-1234-1234-123456789abc"
)
delete_relationship(relationship_id: str) -> None
Paramètres
| Nom | Description |
|---|---|
|
relationship_id
Obligatoire
|
GUID des métadonnées de relation. |
Exceptions
| Type | Description |
|---|---|
|
Si la demande d’API web échoue. |
get
Obtenez les métadonnées de base d’une table s’il existe.
Exemple :
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
Paramètres
| Nom | Description |
|---|---|
|
table
Obligatoire
|
Nom du schéma de la table (par exemple |
Retours
| Type | Description |
|---|---|
|
Métadonnées de table ou |
get_alternate_keys
Répertorier toutes les clés alternatives définies sur une table.
get_alternate_keys(table: str) -> List[AlternateKeyInfo]
Paramètres
| Nom | Description |
|---|---|
|
table
Obligatoire
|
Nom du schéma de la table (par exemple |
Retours
| Type | Description |
|---|---|
|
Liste des objets de métadonnées de clé de remplacement. Peut être vide si aucune autre clé n’est définie. |
Exceptions
| Type | Description |
|---|---|
|
Si la table n’existe pas. |
|
|
Si la demande d’API web échoue. |
Exemples
Répertoriez les autres clés et imprimez leur état :
keys = client.tables.get_alternate_keys("new_Product")
for key in keys:
print(f"{key.schema_name}: {key.status}")
get_relationship
Récupérer les métadonnées de relation par nom de schéma.
Exemple :
rel = client.tables.get_relationship("new_Department_Employee")
if rel:
print(f"Found: {rel.relationship_schema_name}")
get_relationship(schema_name: str) -> RelationshipInfo | None
Paramètres
| Nom | Description |
|---|---|
|
schema_name
Obligatoire
|
Le nom du schéma de la relation. |
Retours
| Type | Description |
|---|---|
|
Métadonnées de relation, ou |
Exceptions
| Type | Description |
|---|---|
|
Si la demande d’API web échoue. |
list
Répertorier toutes les tables non privées dans l’environnement Dataverse.
Par défaut, chaque table renvoie chaque table où IsPrivate eq false. Fournissez une expression OData $filter facultative pour affiner davantage les résultats.
L’expression est combinée à la clause par défaut IsPrivate eq false à l’aide andde .
Exemple :
# 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]]
Paramètres
| Nom | Description |
|---|---|
|
filter
Obligatoire
|
Expression OData |
|
select
Obligatoire
|
Liste facultative des noms de propriétés à inclure dans la réponse (projetée via l’option de requête OData |
Paramètres de mot clé uniquement
| Nom | Description |
|---|---|
|
filter
|
Valeur par défaut: None
|
|
select
|
Valeur par défaut: None
|
Retours
| Type | Description |
|---|---|
|
Liste des dictionnaires de métadonnées EntityDefinition. |
list_columns
Répertorier toutes les définitions d’attribut (colonne) d’une table.
Exemple :
# 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]]
Paramètres
| Nom | Description |
|---|---|
|
table
Obligatoire
|
Nom du schéma de la table (par exemple |
|
select
Obligatoire
|
Liste facultative des noms de propriétés à projeter via |
|
filter
Obligatoire
|
Expression OData |
Paramètres de mot clé uniquement
| Nom | Description |
|---|---|
|
select
|
Valeur par défaut: None
|
|
filter
|
Valeur par défaut: None
|
Retours
| Type | Description |
|---|---|
|
Liste des dictionnaires de métadonnées d’attribut brut. |
Exceptions
| Type | Description |
|---|---|
|
Si la table est introuvable. |
|
|
Si la demande d’API web échoue. |
list_relationships
Répertorier toutes les définitions de relation dans l’environnement.
Exemple :
# 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]]
Paramètres
| Nom | Description |
|---|---|
|
filter
Obligatoire
|
Expression OData |
|
select
Obligatoire
|
Liste facultative des noms de propriétés à projeter via |
Paramètres de mot clé uniquement
| Nom | Description |
|---|---|
|
filter
|
Valeur par défaut: None
|
|
select
|
Valeur par défaut: None
|
Retours
| Type | Description |
|---|---|
|
Liste des dictionnaires de métadonnées de relation brute. |
Exceptions
| Type | Description |
|---|---|
|
Si la demande d’API web échoue. |
list_table_relationships
Répertorier toutes les relations pour une table spécifique.
Combine des relations un-à-plusieurs, plusieurs-à-un et plusieurs-à-plusieurs pour la table donnée en interrogeant EntityDefinitions({id})/OneToManyRelationships, EntityDefinitions({id})/ManyToOneRelationshipset EntityDefinitions({id})/ManyToManyRelationships.
Exemple :
# 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]]
Paramètres
| Nom | Description |
|---|---|
|
table
Obligatoire
|
Nom du schéma de la table (par exemple |
|
filter
Obligatoire
|
Expression OData |
|
select
Obligatoire
|
Liste facultative des noms de propriétés à projeter via |
Paramètres de mot clé uniquement
| Nom | Description |
|---|---|
|
filter
|
Valeur par défaut: None
|
|
select
|
Valeur par défaut: None
|
Retours
| Type | Description |
|---|---|
|
Liste combinée de dictionnaires de métadonnées de relation un-à-plusieurs, plusieurs-à-un et plusieurs-à-plusieurs. |
Exceptions
| Type | Description |
|---|---|
|
Si la table est introuvable. |
|
|
Si la demande d’API web échoue. |
remove_columns
Supprimez une ou plusieurs colonnes d’une table.
Exemple :
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]
Paramètres
| Nom | Description |
|---|---|
|
table
Obligatoire
|
Nom du schéma de la table (par exemple |
|
columns
Obligatoire
|
Nom du schéma de colonne ou liste des noms de schémas de colonne à supprimer. Doit inclure le préfixe de personnalisation (par exemple |
Retours
| Type | Description |
|---|---|
|
Noms de schéma des colonnes qui ont été supprimées. |
Exceptions
| Type | Description |
|---|---|
|
Si la table ou une colonne spécifiée n’existe pas. |