ITableMetadataCache
Der Dienst ITableMetadataCache bietet zwischengespeicherten Zugriff auf Metadaten der Dataverse-Tabellen. Es holt Tabellenmetadaten aus Dataverse beim ersten Zugriff ab und speichert sie für nachfolgende Anfragen, wodurch wiederholte Rundfahrten zum Server vermieden werden.
Verwendung
Injizieren ITableMetadataCache und rufen Sie mit dem logischen Namen der Tabelle auf. GetAsync Der erste Aufruf ruft die Metadaten aus Dataverse ab; nachfolgende Aufrufe geben den zwischengespeicherten Wert zurück.
// useTableMetadata ruft die Spalte + Beziehungsmetadaten ab, zum Beispiel
// Dataverse-Tabelle. Gleichzeitige Rufe werden während des Flugs auf eine einzige Rufe dedupiert
// Versprechen pro Tabelle, und aufgelöste Werte werden für die Lebensdauer wiederverwendet.
// des PowerPortalsProClient. 'Daten' sind beim Laden nicht definiert oder
// wenn der Tisch nicht existiert.
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;
}
}Was enthalten ist
Das zurückgegebene TableMetadata Objekt umfasst:
Columns— Eine Sammlung von Spaltenmetadaten, einschließlich Datentypen, Validierungsregeln, Beschriftungen und Einschränkungen.PrimaryIdColumn/PrimaryNameColumn— Die logischen Namen der Spalten Primärschlüssel und Primärname der Tabelle.OneToMany/ManyToOne/ManyToMany— Beziehungsmetadaten zur Navigation zwischen verwandten Tabellen.PrimaryImageColumn— Der logische Name der primären Bildspalte der Tabelle, falls einer existiert.
Zugriff auf Spaltenmetadaten
Nutzen Sie die Sammlung, Columns um Metadaten für eine bestimmte Spalte nachzuschlagen. Für typspezifische Eigenschaften wie maximale Länge, Zieltabellen oder Optionswerte werden auf den entsprechenden Metadatentyp (z. B. StringMetadata, LookupMetadata, ChoiceMetadata) gecastet.
const { data: tableMetadata } = useTableMetadata('contact');
// Schau dir eine bestimmte Kolumne an. Das Spaltenarray enthält einen Eintrag pro
// Dataverse-Spalte; Verengen Sie das differenzierte 'Typ'-Feld, das erreicht werden soll
// typspezifische Eigenschaften.
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");
// Schau dir eine bestimmte Spalte an
if (tableMetadata.Columns.TryGetColumn("firstname", out var column))
{
var isRequired = column.IsRequired;
var isValidForUpdate = column.IsValidForUpdate;
// Gießen auf einen bestimmten Typ für typspezifische Eigenschaften
if (column is StringMetadata stringMeta)
{
var maxLength = stringMeta.MaxLength;
}
}Zugriff auf Beziehungsmetadaten
Verwenden Sie die , ManyToOne, und SammlungenOneToManyManyToMany, um Beziehungsmetadaten nach Beziehungsnamen nachzuschlagen. Dies wird intern von SubGrid und ManyToManyLookupEdit verwendet, um verwandte Tabellen zu lösen und Abfragen zu erstellen.
const { data: tableMetadata } = useTableMetadata('account');
// Finde eine Eins-zu-viele-Beziehung
const oneToMany = tableMetadata?.oneToMany.find(
(x) => x.relationshipName === 'contact_customer_accounts',
);
// Finde eine viele-zu-viele-Beziehung
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");
// Finde eine Eins-zu-viele-Beziehung
var oneToMany = tableMetadata.OneToMany
.FirstOrDefault(x => x.RelationshipName == "contact_customer_accounts");
// Finde eine viele-zu-viele-Beziehung
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;
}Tipp
Bevorzuge
ITableMetadataCachees fürIPowerPortalsProService.RetrieveTableMetadataAsyncMetadaten der Lesetabelle. Der Cache vermeidet redundante Netzwerkaufrufe und wird intern von allen PowerPortalsPro-Komponenten verwendet.
ITableMetadataCache Interface
Methoden
Name | Parameter | Typ | Beschreibung |
|---|---|---|---|
GetAsync | string key CancellationToken token | Task<TableMetadata> | Ruft ein Element per Schlüssel aus dem Cache ab. Wenn das Element nicht zwischengespeichert ist, wird es aus der zugrunde liegenden Quelle abgerufen, zwischengespeichert und zurückgegeben. |
GetAsyncCancellationToken token
