ITableMetadataCache
ITableMetadataCacheサービスはDataverseのテーブルメタデータへのキャッシュアクセスを提供します。Dataverseから初回アクセス時にテーブルメタデータを取得し、その後のリクエストのためにキャッシュし、サーバーへの繰り返しの往復を避けます。
使用例
ITableMetadataCacheを注入し、テーブルの論理名でGetAsyncを呼び出します。最初の呼び出しはDataverseからメタデータを取得します。その後の呼び出しはキャッシュされた値を返します。
// useTableMetadata は 1 の Mark + Relationship メタデータを取得します
// Dataverseテーブル。同時通話は単一の飛行中で重複除去を行います
// テーブルごとの約束と解決された値はライフタイムに再利用されます
// PowerPortalsProClientの一員です。読み込み中に「データ」が定義されていません。
// テーブルが存在しないとき。
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;
}
}含まれるもの
返却された TableMetadata オブジェクトには以下が含まれます:
Columns— データ型、検証ルール、ラベル、制約を含む列メタデータの集合。PrimaryIdColumn/PrimaryNameColumn— テーブルのプライマリキーおよびプライマリネームカラムの論理名。OneToMany/ManyToOne/ManyToMany— 関連テーブル間のナビゲーションのための関係メタデータ。PrimaryImageColumn— テーブルのプライマリ画像列(存在する場合)の論理名。
列メタデータへのアクセス
Columnsコレクションを使って特定の列のメタデータを調べてください。最大長さ、ターゲットテーブル、オプション値など型固有のプロパティに対して、適切なメタデータタイプ(例:StringMetadata、LookupMetadata、ChoiceMetadata)にキャストします。
const { data: tableMetadata } = useTableMetadata('contact');
// 特定のコラムを調べてみてください。列配列は1つに1つのエントリを持ちます
// Dataverseの列;識別された「タイプ」フィールドで狭く到達する
// 型固有の性質。
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");
// 特定のコラムを調べてみてください
if (tableMetadata.Columns.TryGetColumn("firstname", out var column))
{
var isRequired = column.IsRequired;
var isValidForUpdate = column.IsValidForUpdate;
// 特定のタイプにキャストして、タイプ固有の性質を使います
if (column is StringMetadata stringMeta)
{
var maxLength = stringMeta.MaxLength;
}
}関係メタデータへのアクセス
OneToMany、ManyToOne、ManyToManyコレクションを使って、関係名で関係メタデータを調べてください。これは、社内でSubGridやManyToManyLookupEditが関連するテーブルを解決しクエリを構築するために使われています。
const { data: tableMetadata } = useTableMetadata('account');
// 一対多の関係を見つけましょう
const oneToMany = tableMetadata?.oneToMany.find(
(x) => x.relationshipName === 'contact_customer_accounts',
);
// 多対多の関係を見つけましょう
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");
// 一対多の関係を見つけましょう
var oneToMany = tableMetadata.OneToMany
.FirstOrDefault(x => x.RelationshipName == "contact_customer_accounts");
// 多対多の関係を見つけましょう
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;
}ヒント
テーブルのメタデータを読むには
ITableMetadataCacheをIPowerPortalsProService.RetrieveTableMetadataAsyncより好みます。キャッシュは冗長なネットワーク呼び出しを避け、すべてのPowerPortalsProコンポーネントで内部的に利用されます。
ITableMetadataCache Interface
方法
名称 | パラメータ | 種類 | 概要 |
|---|---|---|---|
GetAsync | string key CancellationToken token | Task<TableMetadata> | キーでキャッシュからアイテムを取得します。もしアイテムがキャッシュされていない場合は、基底のソースからフェッチされ、キャッシュされて返されます。 |
名称:
GetAsyncパラメータ:
string key
CancellationToken token
CancellationToken token
種類:
Task<TableMetadata>
概要:
キーでキャッシュからアイテムを取得します。もしアイテムがキャッシュされていない場合は、基底のソースからフェッチされ、キャッシュされて返されます。
