コードを使用してエラスティック テーブルを作成する

Power Apps を使用することにより、コードを記述せずにエラスティック テーブルを作成して編集できます。

ただし、コードを使用してテーブル定義を作成、更新できると便利な場合があります。 次の例は、Dataverse SDK for .NET および Web API を使用して contoso_SensorData というスキーマ名を持つ新しいエラスティック テーブルを作成するためのものです。 コードを使ってエラスティック テーブルを作成するには、値が ElasticEntityMetadata.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 です。

SDK for .NET を使用したカスタム テーブルの作成の詳細については、こちらをご覧ください

列を追加する

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 列をクエリする
一括操作メッセージを使う
エラスティック テーブルのサンプル コード