[PowerApps]CDSのプライマリ名フィールドとキーについて

スポンサードリンク



こんにちは。sinyです。

この記事ではPowerAppsのCommon Data Service(2020/8時点ではDataFlexと呼ぶ)におけるエンティティの標準フィールド、プライマリー名フィールド、キーの仕組みについてまとめてみました。

CDSのエンティティで自動生成されるフィールドについて

CDSでエンティティを作成すると自動的に生成されるフィールドがあります。

エンティティを作成した後に「種類」タブでソートすると確認しやすいです。

例えば、以下のようなエンティティを登録するとします。

種類タブで並び替えると以下の様に「カスタムと標準」があることがわかります。
カスタム」は自分で定義したフィールドで、「標準」がCDSが自動的に生成してくれるフィールドです。

標準&必須で生成されるフィールド

CDSが自動的に生成するフィールドはたくさんありますが、その中で表示名を除いて設定変更も削除もできないフィールドが3つあります。

表示名を除いて設定変更、削除ができない標準&必須フィールド
  • 所有者(データ型:所有者、必須)
  • 状態(データ型:オプションセット[アクティブ/非アクティブ]、必須)
  • エンティティの表示名に指定した一意識別子フィールド

これらはCDSで標準で実装される&設定変更できないフィールドのようです。

3つ目の一意識別子フィールドはエンティティ登録時の一番上の「表示名」に指定した名称で自動的にエンティティのレコードを一意に特定するためのキーフィールドが生成されます。

もう1つ標準で生成されるフィールドが1つあります。
それがプライマリー名フィールドです。

プライマリー名フィールドは必須として自動生成されますが、データ型と必須の設定は後から変更できます。

 

プライマリフィールドはキーではない

既に説明した通りエンティティを作成するとプライマリーフィールドというフィールドが生成されます。

名前だけ見るとこれがエンティティのレコードを一意に識別するためのキーフィールド(いわゆる主キーにあたるもの)のように思ってしまいますがそうではないようです。

以下の記事が大変参考になりましたが、プライマリーフィールドはキーではなく他のエンティティとの関係を確立する際の検索処理に使用されるもののようです。

プライマリ名フィールドとは?
既定では、すべてのエンティティにプライマリ名フィールドが含まれている。
他のエンティティとの関係を確立する際の検索処理に使用される。
通常、プライマリ名フィールドには、エンティティのレコードに格納されているデータの名前の説明が格納される。
エンティティの表示名、プライマリー名フィールド、エンティティの表示名から自動生成される一意識別子フィールドの関係をまとめると以下のような感じになります。

エンティティの個別のキーを設定する

自動で生成される一意識別子のフィールドが扱いづらい場合は、明示的にキーを設定することが出来ます。
先ほど作成した「依頼内容」エンティティにキーを設定してみます。
今回は、依頼内容エンティティに登録されたプライマリ名フィールド「依頼No」をキーに設定することとします。
まず、依頼Noフィールドのデータ型を以下の様に変更しておきます。
「キー」タブを選択後「キーの追加」を押して、以下の通りキーを設定します。
フィールドでキーにしたいフィールドにチェックをつけます。
以下の通りキーが設定されます。
サンプルのデータを登録して各フィールドの状態を確認してみます。
「データ」タブ→「レコードの追加」からデータを登録することが出来ます。
依頼No、所有者を設定したら保存ボタンを押します。
「データ」タブで右上から「すべてのフィールド」を選択すると全フィールドが表示されます。
以下の様にすべてのフィールドが表示されます。
次に、キーが正しく動作しているか確認するために、もう1つデータを登録してみます。
この際、既に登録してある依頼=1001を指定して保存ボタンを押してみると、以下の様に重複レコードでエラーになり依頼Noが一意識別子として正しく動作していることが確認できます。
なお、いわゆる複合キー(複数のフィールドの組み合わせでレコードを一意に識別させる)を設定したい場合は、キーの設定の際に複数のフィールドにチェックをつけると複合キーと同じ機能を実装できるようです。
おすすめの記事