Relate および Unrelate 関数
適用対象: キャンバス アプリ モデル駆動型アプリ
一対多または多対多のリレーションシップを通じて 2 つのテーブルのレコードを関連付けおよび関連付け解除します。
内容
Relate 関数は、2 つのレコードを Microsoft Dataverse の一対多または多対多のリレーションシップを通じてリンクします。 Unrelate 関数は、このプロセスを無効にし、リンクを削除します。
1 対多の関連付けの場合、Many テーブルには、One テーブルのレコードを指す外部キー フィールドがあります。 Relate はこのフィールドをOneテーブルの特定のレコードに ポイントする 設定し、Unrelate はこのフィールドを空白に 設定します 。 Relate が呼び出されたときフィールドがすでに設定されている場合、既存のリンクは失われ、新しいリンクが選択されます。 このフィールドは、Patch 関数または Edit form コントロールを使用して設定することもでき、Relate 関数を使用する必要はありません。
多対多の関連付けの場合、レコードをリンクするシステムは、非表示の結合の表を保持します。 この結合の表に直接アクセスすることはできず、1 対多のプロジェクションを通してのみ読み取ることができ、Relate および Unrelate 関数を通して設定します。 どちらの関連テーブルにも外部キーはありません。
最初の引数で指定したテーブルのデータは変更を反映するように更新されますが、2 番目の引数で指定したテーブルのデータは更新されません。 そのデータは、Refresh 関数を使用して手動で更新することにより、操作の結果が表示されます。
これらの関数はレコードの作成または削除を行いません。 既に存在する 2 つのレコードを関連付けるか、または関連付けを解除するだけです。
これらの関数は、動作の数式 内でのみ使用できます。
Note
これらの関数はプレビュー機能の一部であり、それらの動作はリレーショナル データ、オプション セット、および CDS のその他の新機能の機能が有効になっている場合のみ利用可能です。 これは、新しいアプリに対して既定で有効になっているアプリ レベルの設定です。 この機能スイッチを見つけるには、設定を選択し、次に今後の機能を選択します。 お客様のフィードバックは弊社にとって非常に重要です。ご意見を Power Apps コミュニティ フォーラム にお寄せください。
構文
関連( テーブル1関連テーブル、 テーブル2レコード )
- Table1RelatedTable - 必須。 テーブル 1 のレコードに対しては、テーブル 2 テーブルのレコードは、1 対多または多対多の関係を通じて関連していました。
- Table2Record - 必須。 関係に追加する テーブル 2 レコード。
関連付け解除( Table1RelatedTable, Table2Record )
- Table1RelatedTable - 必須。 テーブル 1 のレコードに対しては、テーブル 2 テーブルのレコードは、1 対多または多対多の関係を通じて関連していました。
- Table2Record - 必須。 関係から削除する テーブル 2 レコード。
例
Power Apps ポータルのテーブル ビューア に表示されている次の関連付けを持つ 製品 テーブル:
リレーションシップの表示名 | 関連テーブル | リレーションシップの種類 |
---|---|---|
製品の予約 | 引当 | 一対多 |
製品 ↔ お問い合わせ | 取引先担当者 | 多対多 |
製品 と 予約 は、1対多の関係で関連付けられています。 製品 テーブルの最初のレコードを持つ 予約 テーブルの最初のレコードを関連付けるには:
Relate( First( Products ).Reservations, First( Reservations ) )
これらのレコード間の関連付けを削除します。
Unrelate( First( Products ).Reservations, First( Reservations ) )
レコード間の関連付けが変更されただけで、レコードの作成または削除は行われませんでした。
製品 と 連絡先 は、多対多の関係を通じて関連付けられます。 製品 テーブルの最初のレコードを持つ 取引先担当者 テーブルの最初のレコードを関連付けるには:
Relate( First( Products ).Contacts, First( Contacts ) )
多対多の関連付けは対称なので、これを反対方向で行うこともできます。
Relate( First( Contacts ).Products, First( Products ) )
これらのレコード間の関連付けを削除します。
Unrelate( First( Products ).Contacts, First( Contacts ) )
または、
Unrelate( First( Contacts ).Products, First( Products ) )
アプリを Gallery コントロールと Combo box コントロールを使用しこれらのテーブル上でこれらの操作を正確に操作する方法を順を追って説明します。
これらの例は、環境にインストールされているサンプル データによって異なります。 サンプル データを含む試用環境を作成する または 既存の環境にサンプル データを追加する のいずれかです。
一対多
関連付け機能
最初に、製品に関連付けられている予約の表示および再割り当てを行う簡単なアプリを作成します。
空白からタブレット アプリ を作成します。
ビュー タブで、データ ソースを選択します。
データ ペインで、データの追加>製品 の順に選択します。
製品テーブルは、上記でロードされたサンプルデータの一部です。挿入タブで、ブランクで縦方向の Gallery コントロールを追加します。
追加したコントロールに Gallery1 という名前が付けられていることを確認し、画面の左側いっぱいになるように移動させ、サイズを変更します。
プロパティ タブで、Gallery1 のItems プロパティに製品を、そのレイアウトに画像とタイトルを設定します。
Gallery1 で、Label コントロールに Title1 という名前が付けられていることを確認し、そのText プロパティに ThisItem.Name と設定します。
画面を選択して、次のアイテムが Gallery1 に挿入されるのを回避します。 ブランクで縦方向の 2 番目のGallery コントロールを追加し、Gallery2 という名前が付けられていることを確認します。
Gallery2 には、ユーザーが Gallery1で選択した製品の予約が表示されます。
画面の右上の領域いっぱいになるように、Gallery2 を移動し、サイズを変更します。
(オプション) 次の図が示すように、青色のLabel コントロールを Gallery2 の上に追加します。
数式バーで、Gallery2 の Items プロパティに Gallery1.Selected.Reservations と設定します。
プロパティ ウィンドウで、Gallery2 の Layout に Title と設定します。
Gallery2 で、Combo box コントロールを追加し、ComboBox1 と名前が付けられていることを確認した後、Gallery2 のその他のコントロールをブロックすることを避けるように移動させ、サイズを変更します。
プロパティ タブで、ComboBox1 の Items プロパティに Products と設定します。
プロパティ タブを下方向へスクロールし、ComboBox1 の Allow multiple selection プロパティを Off に設定します。
数式バーで、ComboBox1 の DefaultSelectedItems プロパティを ThisItem.'Product Reservation' に設定します。
Gallery2 で、NextArrow2 の OnSelect プロパティをこの式に設定します。
Relate( ComboBox1.Selected.Reservations, ThisItem )
ユーザーがこのアイコンを選択すると、現在の予約はユーザーが ComboBox1 で選択した製品に変更されます。
F5 キーを押して、プレビュー モードでアプリをテストします。
このアプリを使用して、ユーザーは予約を 1 つの製品から別の製品に移動できます。 製品の予約について、ユーザーは ComboBox1 の異なる製品を選択することができ、NextArrow2 を選択してその予約を変更します。
非関連 機能
この時点で、関連付けを 1 つのレコードから別のレコードに移動できますが、関連付けを完全に削除することはできません。 Unrelate 関数を使用して、すべての商品から予約レコードとの接続を解除することができます。
ビュー タブで、データ ソースを選択します。
データ ウィンドウで、データ ソースの追加>Microsoft Dataverse>予約>接続を選択します。
Gallery2 で、NextArrow2 の OnSelect 式をこの式に設定します。
If( IsBlank( ComboBox1.Selected ), Unrelate( Gallery1.Selected.Reservations, ThisItem ), Relate( ComboBox1.Selected.Reservations, ThisItem ) ); Refresh( Reservations )
Gallery2 を Ctrl-C キーを押してクリップボードにコピーします。
Ctrl-V キーを押して Gallery2 の複製を同じ画面に貼り付け、画面の右下の領域に移動させます。
(オプション) Gallery2 の上にラベルを追加した場合、そのラベルに対して前の 2 つの手順を繰り返します。
Gallery2 の複製に Gallery2_1 という名前が付けられていることを確認し、その Items プロパティをこの式に設定します。
Filter( Reservations, IsBlank( 'Product Reservation' ) )
委任の警告が表示されますが、この例ではデータが少量なので問題になりません。
これらの変更により、ユーザーは、製品を予約していない取引先担当者に対する ComboBox1 の選択をクリアできます。 製品を予約していない取引先担当者は、ユーザーが各取引先担当者を製品に割り当てることのできる Gallery2_1 に表示されます。
多対多
多対多の関連性を作成する
サンプル データには多対多の関係は含まれていませんが、製品テーブルと取引先担当者テーブルの間に関係を作成します。 ユーザーは各製品を複数の取引先担当者に関連付け、また各取引先担当者を複数の製品に関連付けることができます。
このページ から、左のナビゲーション バーから データ を選択してから、テーブル を選択します。
テーブル フィルターを変更して、すべてのテーブルを含めます。
規定では、サンプル テーブルは表示されません。
下にスクロールして、製品 テーブルを開き、関連付け を選択します。
関連付けの追加>多対多を選択します。
リレーションシップに 取引先担当者 を選択します。
終了>テーブルの保存 を選択します。
取引先担当者を 1 つ以上の製品と関連付ける、またはその関連付けを解除する
このトピックで以前に作成したアプリに似た別のアプリを作成しますが、新しいアプリは多対多の関連付けを提供します。 各取引先担当者は、1 つの製品だけの代わりに、複数の製品を予約できます。
タブレット用の空白のアプリで、このトピックの 最初の手順 で説明したように、Gallery1 を作成します。
空白で縦方向の別のGallery コントロールを追加し、Gallery2 と名前が付けられていることを確認した後、画面の右上隅に移動します。
このトピックの後半で、Gallery2 の下にCombo box コントロールを追加します。
数式バーで、Gallery2 の Items プロパティを Gallery1.Selected.Contacts に設定します。
プロパティ タブで、レイアウトを画像とタイトルに設定します。
Gallery2 で、Label コントロールに Title2 という名前が付けられていることを確認し、そのText プロパティに ThisItem.'Full Name' と設定します。
この手順を完了して取引先担当者を製品に割り当てるまで、そのコントロールにはテキストは表示されません。
NextArrow2 を削除し、キャンセル アイコンを挿入した後、icon1 と名前が付けられていることを確認します。
キャンセル アイコンの OnSelect プロパティを次の式に設定します:
Unrelate( Gallery1.Selected.Contacts, ThisItem )
ビュー タブで、データ ソースを選択します。
データ ウィンドウで、データ ソースの追加>Microsoft Dataverse>取引先担当者>接続を選択します。
Gallery2 の下で、Combo box コントロールを追加し、ComboBox1 と名前が付けられていることを確認した後、その Items プロパティを取引先担当者に設定します。
プロパティ タブで、Allow multiple selection をオフに設定します。
追加アイコンを挿入し、OnSelect プロパティに次の数式を設定します:
Relate( Gallery1.Selected.Contacts, ComboBox1.Selected )
このアプリを使用すると、ユーザーは一連の取引先担当者を自由に各製品に関連付けたり、関連付けを解除したりできます。
製品に取引先担当者を追加するには、画面下部のコンボ ボックスで取引先担当者を選択し、次に追加アイコンを選択します。
製品から取引先担当者を削除するには、その取引先担当者のキャンセル アイコンを選択します。
一対多とは異なり、多対多の関連付けにより、ユーザーは同じ取引先担当者を複数の製品に関連付けることができます。
逆に、製品を複数の取引先担当者に関連付けたり、関連付けを解除したりする
多対多の関連付けは対称です。 サンプルを拡張して製品を取引先担当者に追加し、2 つの画面間で切り替えて、関連付けをいずれかの方向から表示することができます。
Screen1 の OnVisible プロパティを、Refresh (製品) に設定します。
1 対多または多対多の関係を更新すると、Relate または Unrelate 呼び出しの最初の引数テーブルのデータのみが更新されます。 このアプリの画面間で切り替えるには、2 番目を手動で更新する必要があります。
Screen1 を複製します。
複製には Screen1_1 という名前が付けられ、取引先担当者側から関連付けを見るベースが作られます。
リバース ビューを作成するには、Screen1_1 のコントロール上の数式を変更します。
- Screen1_1.OnVisible =
Refresh( Contacts )
- Gallery1_1.Items =
Contacts
- Title1_1.Text =
ThisItem.'Full Name'
- Label1_1.Text =
"Selected Contact Products"
- Gallery2_1.Items =
Gallery1_1.Selected.Products
- Title2_1.Text =
ThisItem.Name
- Icon1_1.OnSelect =
Unrelate( Gallery1_1.Selected.Products, ThisItem )
- ComboBox1_1.Items =
Products
- Icon2_1.OnSelect =
Relate( Gallery1_1.Selected.Products, ComboBox1_1.Selected )
結果は前の画面類似していますが、取引先担当者側からの関連付けから作成されています。
- Screen1_1.OnVisible =
上下の矢印のアイコンを挿入し、その設定 OnSelect プロパティを Navigate( Screen1, None ) に設定します。 数式 Navigate( Screen1_1, None ) を使用して、同じことを Screen1 に行います。
この新しい画面により、ユーザーは製品に取引先担当者を追加し、取引先担当者のビューに切り替えて、関連する製品を表示することができます。 関連付けは 2 つの画面間で対称的であり、また共有されます。