ITableMetadataCache
Le ITableMetadataCache service fournit un accès en cache aux métadonnées des tables Dataverse. Il récupère les métadonnées de table de Dataverse lors du premier accès et les met en cache pour les requêtes ultérieures, évitant ainsi les allers-retours répétés vers le serveur.
Utilisation
Injectez ITableMetadataCache et appelez GetAsync avec le nom logique de la table. Le premier appel récupère les métadonnées de Dataverse ; les appels suivants renvoient la valeur mise en cache.
// useTableMetadata récupère les métadonnées colonne + relation pour un
// Tableau Dataverse. Les appels simultanés se déduppent sur un seul en vol
// promesse par table, et les valeurs résolues sont réutilisées pour toute la durée de vie
// du PowerPortalsProClient. « data » est indéfini lors du chargement ou
// Quand la table n’existe pas.
import { useTableMetadata } from '@powerportalspro/react';
function MyComponent() {
const { data: tableMetadata, status } = useTableMetadata('account');
if (status !== 'success' || !tableMetadata) return null;
const { tableName, primaryIdColumn, primaryNameColumn } = tableMetadata;
// ...
}[Inject]
private ITableMetadataCache _tableMetadataCache { get; set; } = null!;
protected override async Task OnInitializedAsync()
{
var tableMetadata = await _tableMetadataCache.GetAsync("account");
if (tableMetadata != null)
{
var tableName = tableMetadata.TableName;
var primaryKey = tableMetadata.PrimaryIdColumn;
var primaryName = tableMetadata.PrimaryNameColumn;
}
}Ce qui est inclus
L’objet retourné TableMetadata comprend :
Columns— Une collection de métadonnées de colonnes incluant les types de données, les règles de validation, les étiquettes et les contraintes.PrimaryIdColumn/PrimaryNameColumn— Les noms logiques des colonnes clés primaires et noms principaux du tableau.OneToMany/ManyToOne/ManyToMany— Métadonnées de relations pour naviguer entre les tables associées.PrimaryImageColumn— Le nom logique de la colonne principale image du tableau, si elle existe.
Accès aux métadonnées de colonnes
Utilisez la Columns collection pour rechercher les métadonnées d’une colonne spécifique. Castez vers le type de métadonnées approprié (par StringMetadataexemple , LookupMetadata, ChoiceMetadata) pour des propriétés spécifiques au type telles que la longueur maximale, les tables cibles ou les valeurs d’option.
const { data: tableMetadata } = useTableMetadata('contact');
// Cherchez une colonne précise. Le tableau de colonnes porte une entrée par
// colonne Dataverse ; Restreint sur le champ discriminé « type » à atteindre
// Propriétés spécifiques à chaque type.
const column = tableMetadata?.columns.find((c) => c.columnName === 'firstname');
if (column) {
const isRequired = column.isRequired;
const isValidForUpdate = column.isValidForUpdate;
if (column.type === ColumnType.String) {
const maxLength = column.maxLength;
}
}var tableMetadata = await _tableMetadataCache.GetAsync("contact");
// Cherchez une colonne spécifique
if (tableMetadata.Columns.TryGetColumn("firstname", out var column))
{
var isRequired = column.IsRequired;
var isValidForUpdate = column.IsValidForUpdate;
// Caster vers un type spécifique pour des propriétés spécifiques au type
if (column is StringMetadata stringMeta)
{
var maxLength = stringMeta.MaxLength;
}
}Accès aux métadonnées de la relation
Utilisez les OneToManycollections , ManyToOne, et ManyToMany pour rechercher les métadonnées de la relation par nom de la relation. Celle-ci est utilisée en interne par SubGrid et ManyToManyLookupEdit pour résoudre les tables et requêtes de compilation associées.
const { data: tableMetadata } = useTableMetadata('account');
// Trouvez une relation de type un-à-plusieurs
const oneToMany = tableMetadata?.oneToMany.find(
(x) => x.relationshipName === 'contact_customer_accounts',
);
// Trouvez une relation de plusieurs-à-plusieurs
const manyToMany = tableMetadata?.manyToMany.find(
(x) => x.relationshipName === 'ppp_Account_ppp_Region_ppp_Region',
);
if (manyToMany) {
const relatedTable = tableMetadata?.tableName === manyToMany.table1
? manyToMany.table2
: manyToMany.table1;
}var tableMetadata = await _tableMetadataCache.GetAsync("account");
// Trouvez une relation de type un-à-plusieurs
var oneToMany = tableMetadata.OneToMany
.FirstOrDefault(x => x.RelationshipName == "contact_customer_accounts");
// Trouvez une relation de plusieurs-à-plusieurs
var manyToMany = tableMetadata.ManyToMany
.FirstOrDefault(x => x.RelationshipName == "ppp_Account_ppp_Region_ppp_Region");
if (manyToMany != null)
{
var relatedTable = tableMetadata.TableName == manyToMany.Table1
? manyToMany.Table2
: manyToMany.Table1;
}Conseil
Préféré
ITableMetadataCacheplutôtIPowerPortalsProService.RetrieveTableMetadataAsyncque pour lire les métadonnées des tableaux. Le cache évite les appels réseau redondants et est utilisé en interne par tous les composants PowerPortalsPro.
ITableMetadataCache Interface
Méthodes
Nom | Paramètres | Type | Description |
|---|---|---|---|
GetAsync | string key CancellationToken token | Task<TableMetadata> | Récupère un élément du cache par clé. Si l’élément n’est pas mis en cache, il est récupéré depuis la source sous-jacente, mis en cache, puis retourné. |
GetAsyncCancellationToken token
