ITableMetadataCache
El ITableMetadataCache servicio proporciona acceso en caché a los metadatos de las tablas de Dataverse. Recupera los metadatos de las tablas de Dataverse en el primer acceso y los almacena en caché para las solicitudes posteriores, evitando repetidos viajes de ida y vuelta al servidor.
Uso
Inyecta ITableMetadataCache y llama GetAsync con el nombre lógico de la mesa. La primera llamada recupera los metadatos de Dataverse; las llamadas posteriores devuelven el valor en caché.
// useTableMetadata obtiene los metadatos columna + relación para uno
// Tabla Dataverse. Las llamadas concurrentes se desduplican sobre una sola en vuelo
// Promesa por tabla, y los valores resueltos se reutilizan durante toda la vida
// del PowerPortalsProClient. 'datos' no está definido durante la carga o
// cuando la mesa no existe.
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;
}
}Lo que incluye
El objeto devuelto TableMetadata incluye:
Columns— Una colección de metadatos de columna que incluye tipos de datos, reglas de validación, etiquetas y restricciones.PrimaryIdColumn/PrimaryNameColumn— Los nombres lógicos de las columnas clave primaria y nombre principal de la tabla.OneToMany/ManyToOne/ManyToMany— Metadatos de relaciones para navegar entre tablas relacionadas.PrimaryImageColumn— El nombre lógico de la columna principal de imagen de la tabla, si existe.
Acceso a metadatos de columnas
Utiliza la Columns colección para buscar metadatos de una columna específica. Haz cast al tipo de metadatos apropiado (por ejemplo StringMetadata, , LookupMetadata, ChoiceMetadata) para propiedades específicas de tipo como longitud máxima, tablas objetivo o valores de opciones.
const { data: tableMetadata } = useTableMetadata('contact');
// Busca una columna específica. El array de columnas lleva una entrada por cada
// columna Dataverse; estrechar en el campo discriminado 'tipo' para alcanzar
// Propiedades específicas de cada tipo.
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");
// Busca una columna específica
if (tableMetadata.Columns.TryGetColumn("firstname", out var column))
{
var isRequired = column.IsRequired;
var isValidForUpdate = column.IsValidForUpdate;
// Cast a tipo específico para propiedades específicas de tipo
if (column is StringMetadata stringMeta)
{
var maxLength = stringMeta.MaxLength;
}
}Acceso a metadatos de relaciones
Utiliza las OneToManycolecciones , ManyToOne, y ManyToMany para buscar metadatos de relaciones por nombre de relación. Esto se utiliza internamente por SubGrid y ManyToManyLookupEdit para resolver tablas relacionadas y consultas de construcción.
const { data: tableMetadata } = useTableMetadata('account');
// Encuentra una relación uno a muchos
const oneToMany = tableMetadata?.oneToMany.find(
(x) => x.relationshipName === 'contact_customer_accounts',
);
// Encuentra una relación de muchos a muchos
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");
// Encuentra una relación uno a muchos
var oneToMany = tableMetadata.OneToMany
.FirstOrDefault(x => x.RelationshipName == "contact_customer_accounts");
// Encuentra una relación de muchos a muchos
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;
}Propina
Prefiero
ITableMetadataCacheparaIPowerPortalsProService.RetrieveTableMetadataAsyncleer metadatos de la tabla. La caché evita llamadas de red redundantes y es utilizada internamente por todos los componentes de PowerPortalsPro.
ITableMetadataCache Interface
Métodos
Nombre | Parámetros | Tipo | Descripción |
|---|---|---|---|
GetAsync | string key CancellationToken token | Task<TableMetadata> | Recupera un elemento de la caché mediante clave. Si el elemento no está almacenado en caché, se obtiene desde la fuente subyacente, se almacena en caché y se devuelve. |
GetAsyncCancellationToken token
