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 コミュニティ フォーラム にお寄せください。

構文

Relate( Table1RelatedTable, Table2Record )

  • Table1RelatedTable - 必須。 テーブル 1 のレコードに対しては、テーブル 2 テーブルのレコードは、1 対多または多対多の関係を通じて関連していました。
  • Table2Record - 必須。 関係に追加する テーブル 2 レコード。

Unrelate( 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 コントロールを使用しこれらのテーブル上でこれらの操作を正確に操作する方法を順を追って説明します。

これらの例は、環境にインストールされているサンプル データによって異なります。 サンプル データを含む試用環境を作成する または 既存の環境にサンプル データを追加する のいずれかです。

一対多

Relate 関数

最初に、製品に関連付けられている予約の表示および再割り当てを行う簡単なアプリを作成します。

  1. 空白からタブレット アプリ を作成します。

  2. ビュー タブで、データ ソースを選択します。

  3. データ ペインで、データの追加>製品 の順に選択します。
    製品テーブルは、上記でロードされたサンプルデータの一部です。

  4. 挿入タブで、ブランクで縦方向の Gallery コントロールを追加します。

  5. 追加したコントロールに Gallery1 という名前が付けられていることを確認し、画面の左側いっぱいになるように移動させ、サイズを変更します。

  6. プロパティ タブで、Gallery1Items プロパティに製品を、そのレイアウト画像とタイトルを設定します。

    ProductsGallery を構成します。

  7. Gallery1 で、Label コントロールに Title1 という名前が付けられていることを確認し、そのText プロパティに ThisItem.Name と設定します。

    Gallery1 のラベルを構成します。

  8. 画面を選択して、次のアイテムが Gallery1 に挿入されるのを回避します。 ブランクで縦方向の 2 番目のGallery コントロールを追加し、Gallery2 という名前が付けられていることを確認します。

    Gallery2Gallery1 でユーザーが選択した製品の予約が表示されます。

  9. 画面の右上の領域いっぱいになるように、Gallery2 を移動し、サイズを変更します。

  10. (オプション) 次の図が示すように、青色のLabel コントロールを Gallery2 の上に追加します。

  11. 数式バーで、Gallery2Items プロパティに Gallery1.Selected.Reservations と設定します。

    Gallery2 のアイテムを構成します。

  12. プロパティ ウィンドウで、Gallery2LayoutTitle と設定します。

    Gallery2 のレイアウトを構成します。

  13. Gallery2 で、Combo box コントロールを追加し、ComboBox1 と名前が付けられていることを確認した後、Gallery2 のその他のコントロールをブロックすることを避けるように移動させ、サイズを変更します。

  14. プロパティ タブで、ComboBox1Items プロパティに Products と設定します。

    Items プロパティを Products に設定します。

  15. プロパティ タブを下方向へスクロールし、ComboBox1Allow multiple selection プロパティを Off に設定します。

    Allow multiple selection を Off に設定します。

  16. 数式バーで、ComboBox1DefaultSelectedItems プロパティを ThisItem.'Product Reservation' に設定します。

    ReserveCombo の DefaultSelectedItems を設定します。

  17. Gallery2 で、NextArrow2OnSelect プロパティをこの式に設定します。

    Relate( ComboBox1.Selected.Reservations, ThisItem )
    

    ユーザーがこのアイコンを選択すると、現在の予約はユーザーが ComboBox1 で選択した製品に変更されます。

    NextArrow2 を構成します。

  18. F5 キーを押して、プレビュー モードでアプリをテストします。

このアプリを使用して、ユーザーは予約を 1 つの製品から別の製品に移動できます。 製品の予約について、ユーザーは ComboBox1 の異なる製品を選択することができ、NextArrow2 を選択してその予約を変更します。

一対多のアプリで Relate 関数をデモンストレーションします。

Unrelate 関数

この時点で、関連付けを 1 つのレコードから別のレコードに移動できますが、関連付けを完全に削除することはできません。 Unrelate 関数を使用して、すべての商品から予約レコードとの接続を解除することができます。

  1. ビュー タブで、データ ソースを選択します。

  2. データ ウィンドウで、データ ソースの追加>Microsoft Dataverse>予約>接続を選択します。

  3. Gallery2 で、NextArrow2OnSelect 式をこの式に設定します。

    If( IsBlank( ComboBox1.Selected ),
        Unrelate( Gallery1.Selected.Reservations, ThisItem ),
        Relate( ComboBox1.Selected.Reservations, ThisItem )
    );
    Refresh( Reservations )
    

    右側のアイコンを構成します。

  4. Gallery2 を Ctrl-C キーを押してクリップボードにコピーします。

  5. Ctrl-V キーを押して Gallery2 の複製を同じ画面に貼り付け、画面の右下の領域に移動させます。

  6. (オプション) Gallery2 の上にラベルを追加した場合、そのラベルに対して前の 2 つの手順を繰り返します。

  7. Gallery2 の複製に Gallery2_1 という名前が付けられていることを確認し、その Items プロパティをこの式に設定します。

    Filter( Reservations, IsBlank( 'Product Reservation' ) )
    

    委任の警告が表示されますが、この例ではデータが少量なので問題になりません。

    Gallery2_1 の Items プロパティを設定します。

これらの変更により、ユーザーは、製品を予約していない取引先担当者に対する ComboBox1 の選択をクリアできます。 製品を予約していない取引先担当者は、ユーザーが各取引先担当者を製品に割り当てることのできる Gallery2_1 に表示されます。

一対多のアプリで Relate および Unrelate 関数をデモンストレーションします。

多対多

多対多の関連性を作成する

サンプル データには多対多の関係は含まれていませんが、製品テーブルと取引先担当者テーブルの間に関係を作成します。 ユーザーは各製品を複数の取引先担当者に関連付け、また各取引先担当者を複数の製品に関連付けることができます。

  1. このページ から、左のナビゲーション バーから データ を選択してから、テーブル を選択します。

    テーブルのリストを開きます。

  2. テーブル フィルターを変更して、すべてのテーブルを含めます。

    規定では、サンプル テーブルは表示されません。

    テーブル フィルターを削除します。

  3. 下にスクロールして、製品 テーブルを開き、関連付け を選択します。

  4. 関連付けの追加>多対多を選択します。

  5. リレーションシップに 取引先担当者 を選択します。

  6. 終了>テーブルの保存 を選択します。

取引先担当者を 1 つ以上の製品と関連付ける、またはその関連付けを解除する

このトピックで以前に作成したアプリに似た別のアプリを作成しますが、新しいアプリは多対多の関連付けを提供します。 各取引先担当者は、1 つの製品だけの代わりに、複数の製品を予約できます。

  1. タブレット用の空白のアプリで、このトピックの 最初の手順 で説明したように、Gallery1 を作成します。

  2. 空白で縦方向の別のGallery コントロールを追加し、Gallery2 と名前が付けられていることを確認した後、画面の右上隅に移動します。

    このトピックの後半で、Gallery2 の下にCombo box コントロールを追加します。

  3. 数式バーで、Gallery2Items プロパティを Gallery1.Selected.Contacts に設定します。

    Items プロパティで ContactsGallery を構成します。

  4. プロパティ タブで、レイアウト画像とタイトルに設定します。

    レイアウトで ContactsGallery を構成します。

  5. Gallery2 で、Label コントロールに Title2 という名前が付けられていることを確認し、そのText プロパティに ThisItem.'Full Name' と設定します。

    この手順を完了して取引先担当者を製品に割り当てるまで、そのコントロールにはテキストは表示されません。

    取引先担当者名を表示します。

  6. NextArrow2 を削除し、キャンセル アイコンを挿入した後、icon1 と名前が付けられていることを確認します。

  7. キャンセル アイコンの OnSelect プロパティを次の式に設定します:

    Unrelate( Gallery1.Selected.Contacts, ThisItem )
    

    キャンセル アイコンを構成します。

  8. ビュー タブで、データ ソースを選択します。

  9. データ ウィンドウで、データ ソースの追加>Microsoft Dataverse>取引先担当者>接続を選択します。

  10. Gallery2 の下で、Combo box コントロールを追加し、ComboBox1 と名前が付けられていることを確認した後、その Items プロパティを取引先担当者に設定します。

    コンボ ボックスの Items プロパティを構成します。

  11. プロパティ タブで、Allow multiple selectionオフに設定します。

    コンボ ボックスの Layout プロパティを構成します。

  12. 追加アイコンを挿入し、OnSelect プロパティに次の数式を設定します:

    Relate( Gallery1.Selected.Contacts, ComboBox1.Selected )
    

    追加アイコンを構成します。

このアプリを使用すると、ユーザーは一連の取引先担当者を自由に各製品に関連付けたり、関連付けを解除したりできます。

  • 製品に取引先担当者を追加するには、画面下部のコンボ ボックスで取引先担当者を選択し、次に追加アイコンを選択します。

  • 製品から取引先担当者を削除するには、その取引先担当者のキャンセル アイコンを選択します。

    一対多とは異なり、多対多の関連付けにより、ユーザーは同じ取引先担当者を複数の製品に関連付けることができます。

多対多のアプリで Relate および Unrelate 関数をデモンストレーションします。

逆に、製品を複数の取引先担当者に関連付けたり、関連付けを解除したりする

多対多の関連付けは対称です。 サンプルを拡張して製品を取引先担当者に追加し、2 つの画面間で切り替えて、関連付けをいずれかの方向から表示することができます。

  1. Screen1OnVisible プロパティを、Refresh (製品) に設定します。

    1 対多または多対多の関係を更新すると、Relate または Unrelate 呼び出しの最初の引数テーブルのデータのみが更新されます。 このアプリの画面間で切り替えるには、2 番目を手動で更新する必要があります。

    OnVisible プロパティを Refresh 関数に設定します。

  2. Screen1 を複製します。

    複製には Screen1_1 という名前が付けられ、取引先担当者側から関連付けを見るベースが作られます。

    画面を複製します。

  3. リバース ビューを作成するには、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 )

    結果は前の画面類似していますが、取引先担当者側からの関連付けから作成されています。

    取引先担当者から始まる多対多の関係を表示します。

  4. 上下の矢印のアイコンを挿入し、その設定 OnSelect プロパティを Navigate( Screen1, None ) に設定します。 数式 Navigate( Screen1_1, None ) を使用して、同じことを Screen1 に行います。

    画面間のナビゲーションを追加します。

この新しい画面により、ユーザーは製品に取引先担当者を追加し、取引先担当者のビューに切り替えて、関連する製品を表示することができます。 関連付けは 2 つの画面間で対称的であり、また共有されます。

どちらの側からも多対多の関連付けを実証します。