コードを使用してエラスティック テーブルを作成する
Power Apps を使用することにより、コードを記述せずにエラスティック テーブルを作成して編集できます。
ただし、コードを使用してテーブル定義を作成、更新できると便利な場合があります。 次の例は、Dataverse SDK for .NET および Web API を使用して contoso_SensorData
というスキーマ名を持つ新しいエラスティック テーブルを作成するためのものです。 コードを使ってエラスティック テーブルを作成するには、値が Elastic
の EntityMetadata.TableType
プロパティを使用します。 TableType
が設定されていない場合、デフォルト値 Standard
が使用され、標準テーブルが作成されます。
public static CreateEntityResponse CreateElasticTable(IOrganizationService service)
{
var request = new CreateEntityRequest
{
// Define table properties
Entity = new EntityMetadata
{
SchemaName = "contoso_SensorData",
DisplayName = new Label("SensorData", 1033),
DisplayCollectionName = new Label("SensorData", 1033),
Description = new Label("Stores IoT data emitted from devices", 1033),
OwnershipType = OwnershipTypes.UserOwned,
TableType = "Elastic",
IsActivity = false,
CanCreateCharts = new Microsoft.Xrm.Sdk.BooleanManagedProperty(false)
},
// Define the primary attribute for the entity
PrimaryAttribute = new StringAttributeMetadata
{
SchemaName = "contoso_SensorType",
RequiredLevel = new AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None),
MaxLength = 100,
FormatName = StringFormatName.Text,
DisplayName = new Label("Sensor Type", 1033),
Description = new Label("Type of sensor emitting data", 1033)
}
};
return (CreateEntityResponse)service.Execute(request);
}
CreateEntityResponse には次のプロパティがあります:
- AttributeId:
contoso_SensorType
プライマリ名の文字列列の ID です。 - EntityId:
contoso_SensorData
テーブルの ID です。
列を追加する
Power Apps を使用することにより、コードを記述せずに、エラスティック テーブルで列を作成できます。
SDK または Web API を使用して列を作成することもできます。 ただし、追加できる列の種類には制限があります。 現在、次のタイプの列を追加することはできません:
- Money (
MoneyAttributeMetadata
) - MultiSelectPicklist (
MultiSelectPicklistAttributeMetadata
) - State (
StateAttributeMetadata
) - Status (
StatusAttributeMetadata
) - Image (
ImageAttributeMetadata
) - 計算、ロールアップ、または数式列
エラスティック テーブルは、JavaScript Object Notation (JSON) データを格納する文字列列をサポートします。
JSON 形式で列を作成する
この例では、contoso_SensorData
エラスティック テーブルに JSON 形式を持つ contoso_SensorValue
文字列を作成します。 大量の JSON データを保存する必要がある場合は、StringAttributeMetadata
を使用する代わりに JSON 形式の MemoAttributeMetadata
列タイプを使用できます。
この関数は、CreateAttributeRequest クラスを使用することにより、StringAttributeMetadata 列を作成します。
public static Guid CreateJsonAttribute(IOrganizationService service)
{
var request = new CreateAttributeRequest
{
EntityName = "contoso_sensordata",
Attribute = new StringAttributeMetadata
{
SchemaName = "contoso_EnergyConsumption",
RequiredLevel = new AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None),
MaxLength = 1000,
FormatName = StringFormatName.Json,
DisplayName = new Label("Energy Consumption", 1033),
Description = new Label("Contains information about energy consumed by the IoT devices", 1033)
},
SolutionUniqueName = "examplesolution"
};
var response = (CreateAttributeResponse)service.Execute(request);
return response.AttributeId;
}
詳細については、カスタム テーブルに文字列列を追加するを参照してください。
代替キー
エラスティック テーブルのカスタム代替キーを作成することはできません。
各エラスティック テーブルは、次の値を使用する 1 つの 代替キーで作成されます。
- 表示名: PrimaryKey および PartitionId 属性を含む、NoSql エンティティのエンティティ キー
- 名前:
KeyForNoSqlEntityWithPKPartitionId
- LogicalName:
keyfornosqlentitywithpkpartitionid
この 代替キー にはキー値 <table primary key name>
と partitionid
があります。
partitionid
値が設定されているレコードを参照する必要がある場合は、この代替キーを使用して参照できます。
代替キーを使用してレコードを参照する方法については、こちらをご覧ください。
リレーションシップの追加
Dataverse は現在、エラスティック テーブルを使用した多対多のリレーションシップの作成をサポートしていません。
1 対多の リレーションシップ はエラスティック テーブルでサポートされていますが、次の制限があります:
カスケイディングはサポートされません。 リレーションシップ作成時にカスケード動作が
Cascade.None
に設定されている必要があります。次の条件が当てはまる場合、ルックアップ列のフォーマットされた値は返されません:
- 取得されるテーブルは標準テーブルであり、検索はエラスティック テーブルを参照します。
- カスタムのエラスティック テーブル
partitionid
値を使用しています。 つまり、partitionid
値はデフォルト値 (null) 以外に設定されています。 partitionid 値の選択方法については、こちらをご覧ください。
エラスティック テーブルは 1 対多の リレーションシップをサポートしており、レコードを取得するときに関連する行を取得できます。 関連レコードをクエリに含めることはできません。 クエリで関連する行を返す方法については、こちらをご覧ください。
参照テーブルの Partitionid 値列
エラスティック テーブルを参照するテーブルに多対一の関連付けを作成すると、想定どおりに参照テーブルにルックアップ列が作成されます。
同時に、この名前付け規則 <lookup name>pid
に従った文字列の列が作成されます。 この列には、関連するエラスティック テーブル レコードの partitionid
値が格納されます。
エラスティック テーブルの代替キーを使用してルックアップ列を設定すると、<lookup name>pid
列の値が自動的に設定されます。 エラスティック テーブル レコードの関連付けを学習する
エラスティックテーブルのパーティション分割方法を使用して いない 場合、この <lookup name>pid
列の値は null であり、レコードの作成後に変更しないでください。
エラスティックテーブルのパーティション分割方法を使用して いる 場合に、関連するエラスティック テーブル レコードを取得するには、ルックアップ列の値のみに依存することはできません。 関連テーブルを一意に識別するには、<lookup name>pid
列からの partitionid
値も含める必要があります。 パーティション分割と水平スケーリングに関する詳細
次の手順
参照
開発者向けエラスティック テーブル
エラスティック テーブルの JSON 列をクエリする
一括操作メッセージを使う
エラスティック テーブルのサンプル コード