ITableMetadataCache
O ITableMetadataCache serviço fornece acesso em cache aos metadados das tabelas do Dataverse. Ele recupera metadados das tabelas do Dataverse no primeiro acesso e os armazena em cache para requisições subsequentes, evitando viagens repetidas de ida e volta ao servidor.
Uso
Injete ITableMetadataCache e chame GetAsync com o nome lógico da mesa. A primeira chamada recupera os metadados do Dataverse; chamadas subsequentes retornam o valor em cache.
// useTableMetadata recupera os metadados coluna + relacionamento para um
// Tabela Dataverse. Chamadas simultâneas são desduplicadas em um único em voo
// promessa por tabela, e valores resolvidos são reutilizados ao longo da vida
// do PowerPortalsProClient. 'data' é indefinido durante o carregamento ou
// Quando a mesa não 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;
}
}O que está incluído
O objeto devolvido TableMetadata inclui:
Columns— Uma coleção de metadados de colunas incluindo tipos de dados, regras de validação, rótulos e restrições.PrimaryIdColumn/PrimaryNameColumn— Os nomes lógicos das colunas da chave primária e do nome primário da tabela.OneToMany/ManyToOne/ManyToMany— Metadados de relacionamento para navegar entre tabelas relacionadas.PrimaryImageColumn— O nome lógico da coluna principal da imagem da tabela, caso exista.
Acessando Metadados de Coluna
Use a Columns coleção para buscar metadados de uma coluna específica. Caste para o tipo de metadado apropriado (ex StringMetadata.: , LookupMetadata, ) ChoiceMetadatapara propriedades específicas do tipo, como comprimento máximo, tabelas alvo ou valores de opção.
const { data: tableMetadata } = useTableMetadata('contact');
// Procure uma coluna específica. O array de colunas carrega uma entrada por
// coluna do Dataverse; estreitar no campo discriminado 'tipo' a alcançar
// Propriedades específicas de 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");
// Procure uma coluna específica
if (tableMetadata.Columns.TryGetColumn("firstname", out var column))
{
var isRequired = column.IsRequired;
var isValidForUpdate = column.IsValidForUpdate;
// Cast para um tipo específico para propriedades específicas do tipo
if (column is StringMetadata stringMeta)
{
var maxLength = stringMeta.MaxLength;
}
}Acessando Metadados de Relacionamento
Use as OneToManycoleções , ManyToOne, e ManyToMany para consultar metadados de relacionamento por nome de relacionamento. Isso é usado internamente por SubGrid e ManyToManyLookupEdit para resolver tabelas relacionadas e consultas de build.
const { data: tableMetadata } = useTableMetadata('account');
// Encontre um relacionamento um-para-muitos
const oneToMany = tableMetadata?.oneToMany.find(
(x) => x.relationshipName === 'contact_customer_accounts',
);
// Encontre um relacionamento muitos-para-muitos
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");
// Encontre um relacionamento um-para-muitos
var oneToMany = tableMetadata.OneToMany
.FirstOrDefault(x => x.RelationshipName == "contact_customer_accounts");
// Encontre um relacionamento muitos-para-muitos
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;
}Dica
Prefiro
ITableMetadataCacheem vezIPowerPortalsProService.RetrieveTableMetadataAsyncde ler metadados de tabelas. O cache evita chamadas de rede redundantes e é usado internamente por todos os componentes do PowerPortalsPro.
ITableMetadataCache Interface
Métodos
Nome | Parâmetros | Tipo | Descrição |
|---|---|---|---|
GetAsync | string key CancellationToken token | Task<TableMetadata> | Recupera um item do cache por chave. Se o item não for armazenado em cache, ele é retirado da fonte subjacente, armazenado em cache e devolvido. |
GetAsyncCancellationToken token
