別のテーブルのメイン フォームから直接関連テーブル レコードを編集する
Power Apps 内のテーブル フォームで関連するテーブル レコードを操作する方法は複数あります。 たとえば、 簡易表示フォーム を使用して関連テーブルを読み取り専用モードで含め、 ダイアログのメイン フォームを使用してレコードを作成または編集できます。
関連するテーブル レコードを操作するもう 1 つの方法は、フォーム コンポーネント コントロールを別のテーブルのメインフォームに追加することです。 フォーム コンポーネント コントロールを使用すると、ユーザーは関連するテーブル レコードの情報を別のテーブルのフォームから直接編集できます。
たとえば、メイン アカウント フォームの別のタブにあるフォーム コンポーネントを次に示します。これにより、ユーザーはアカウント フォームを離れることなく連絡先レコードを編集できます。
たとえば、メイン アカウント フォームの 既存のタブ にあるフォーム コンポーネントを次に示します。これにより、ユーザーはアカウント フォームの 概要 タブを離れることなく、連絡先レコードを編集することもできます。
フォーム コンポーネントをテーブルのメイン フォームに追加します
- 左側のナビゲーション ウィンドウで、コンポーネントを選択します。 アイテムがサイド パネル ペインにない場合は、選択 …More を実行してから、必要なアイテムを 選択 します。
- 入力 または 表示を展開し、次に選択 フォームを展開します。
フォーム コンポーネント コントロールの構成ページで、コントロールのプロパティを 選択 します。
- 選択 はフォームの ルックアップ列 です。
- 選択 関連フォーム。 列の関連テーブル構成に応じて次のようになります。
- 列が単一のテーブルに接続されている場合 (作成者列など)、使用する 関連フォーム を 選択 します。
- 列が複数のテーブルに接続されている場合 (所有者列などのように多態的)、選択 + 関連フォーム 、次に 選択 追加 を実行して関連フォームを追加します。 関連するテーブルごとに関連フォームを追加するには、選択 + 関連フォーム>追加 に進んでください。
- デフォルトでは、すべてのクライアント アプリ タイプ Web、 電話、および タブレット でフォームの表示が有効になっています。 フォームを表示ないクライアント タイプをクリアします。
- 完了を選択します。
- フォームを保存して から 公開 します。
クラシック エクスペリエンスを使用してフォーム コンポーネントを追加する
この例では、 連絡先 標準メイン フォームは、アカウント メイン フォームに追加されたフォーム コンポーネント コントロール用に構成されています。
重要
フォーム コンポーネント コントロールを追加する方法が変更されました。 最新の体験版をご利用いただくことをお勧めします。 詳細情報: テーブルメインフォームにフォームコンポーネントを追加する
Power Apps にサインインします。
選択 テーブル を左側のペインに表示します。 または、 ソリューションを開いて、 アカウントなどのテーブルを選択します。 アイテムがサイド パネル ペインにない場合は、選択 …More を実行してから、必要なアイテムを 選択 します。
選択 フォーム をコンポーネント メニューから選択します。
選択 利用可能なフォームから、フォーム タイプが Main のフォームを選択します。
クラシックに切り替え を選択します。 従来のフォーム エディターインターフェイスは、ブラウザのタブとして開きます。
選択 挿入 タブをクリックします。次に、新しいタブを作成して新しいセクションを追加するか、既存のタブに新しいセクションを追加します。
新しいセクションで、 主要連絡先 参照列などの参照列を追加します。
選択 ルックアップ列を選択し、 [ホーム] タブで、選択 [プロパティの変更] を選択します。
[コントロール] タブで、選択 [コントロールの追加] をクリックし、コントロール タイプの一覧で 選択 [フォーム コンポーネント コントロール] を選択し、次に 選択 [追加] をクリックします。
選択 Web、 タブレット、および 電話 コンポーネント用。
選択 編集 (鉛筆アイコン) をクリックし、 プロパティの構成 ダイアログ ボックスで 選択 静的な値にバインド して、次のようなXMLエントリを追加します。ここで、 TableName はテーブルの一意の名前、 FormID はメイン フォームのフォームIDです。
<QuickForms><QuickFormIds><QuickFormId entityname="TableName">FormID</QuickFormId></QuickFormIds></QuickForms>
- たとえば、アカウント フォームに 連絡先 メイン フォームをレンダリングするには、次を使用します。
<QuickForms><QuickFormIds><QuickFormId entityname="contact">1fed44d1-ae68-4a41-bd2b-f13acac4acfa</QuickFormId></QuickFormIds></QuickForms>
- たとえば、アカウント フォームに 連絡先 メイン フォームをレンダリングするには、次を使用します。
選択 OK、次に 選択 OK を繰り返します。
フォームを保存して から 公開 します。
チップ
テーブルの一意の名前を見つけるには、 Power Apps でテーブルを選択し、次に [設定]を選択します。 名前 は 編集 テーブル ペインに表示されます。 フォーム ID は、フォームを編集するときにブラウザの URL に表示されます。 IDはURLの /edit/ 部分の後に続きます。
従来の フォーム デザイナー では、フォームIDはURLの formId%3d 部分の後に続きます。
フォーム コンポーネントの動作
このセクションでは、モデル駆動型アプリで使用した場合のフォーム コンポーネントの動作について説明します。
レコードの選択
フォーム コンポーネント コントロールがフォームを表示するには、バインドされているルックアップ列に値が必要です。 それ以外の場合、コントロールには「 ソース レコードが選択されていません」というメッセージが表示されます。 値を設定する 1 つの方法は、フォーム コンポーネント コントロールと同じルックアップ列にバインドされているルックアップ コントロールをフォームに追加することです。 ルックアップ コントロールを使用してルックアップ列の値を変更すると、フォーム コンポーネント コントロールは、新しいルックアップ列の値のデータを含むフォームを表示します。
列の検証
データを送信するには、メイン フォームとフォーム コンポーネント コントロールの両方で、Microsoft Dataverse に送信するデータに対して有効である必要があります。 これは、列検証エラー、必要な列の欠落などの両方に当てはまります。
OnSave
メイン フォームとそのフォーム コンポーネント コントロールに対してハンドラーが実行されます。 どのハンドラーでも、 preventDefault を使用して、メイン フォームとフォーム コンポーネント コントロールの保存を キャンセル できます。 つまり、保存操作では、 preventDefault
データの送信 Dataverseを呼び出すことはできません。 OnSave
ハンドラが呼び出される順序は定義されていません。 詳細情報: モデル駆動型アプリのフォームOnSaveイベント (クライアントAPIリファレンス)
レコードを保存する
検証ステージをパスすると、各レコードに対して、データは Dataverse に送られます。 現在、各レコードは異なるリクエストで個別に更新されています。 保存はトランザクションではなく、保存の順序は定義されていません。 1 つのフォーム コンポーネントを保存するときにエラーが発生しても、メイン フォームや他のフォーム コンポーネントへの変更はロールバックされません。 各保存が完了すると、フォーム上のすべてのレコードのデータが更新されます。
通知
フォーム コンポーネントの通知は、メイン フォームの通知に集約されます。 たとえば、フォーム コンポーネントに無効な列があり、保存しようとすると、無効な列の通知がフォーム コンポーネントではなく、メイン フォームの上部に表示されます。
エラー処理
保存中に複数のエラーが発生した場合、ユーザーには 1 つのエラーのみが表示されます。 ユーザーが変更を加えて最初のエラーを修正し、保存すると、次のエラーが表示されます。 ユーザーは、すべてのエラーが解決されるまで保存を続ける必要があります。
保存されていない変更でレコードを変更する
フォーム コンポーネントのフォームに未保存の変更があり、ユーザーがフォーム コンポーネントがバインドされているルックアップ列を変更しようとすると、ユーザーはこの変更について警告されます。
クライアント API
フォーム コンポーネント コントロールでは、 フォーム コンテキスト を使用できます。 getControl などのAPIを介してコントロールにアクセスすることにより、メイン フォームのフォーム コンテキストを介してアクセスできます。 フォーム コンポーネント コントロール内の関連テーブルのデータにアクセスする前に、イベント ハンドラーは、コントロールがtrueを返すまで isLoaded API を待機する必要があります。
制限
フォーム コンポーネント コントロールをテーブル フォームに追加するときは、次の制限に注意してください。
フォーム コンポーネント コントロールは、メイン フォームのレンダリングのみをサポートします。 同様に、フォーム コンポーネント コントロールの追加のサポートは、メインフォームでのみサポートされます。 クイック作成、クイックビュー、カードなどの他のフォームタイプはサポートされていません。
ビジネス プロセス フローを持つフォームは、現在、メイン テーブル フォームや関連テーブル フォームのいずれにも対応していません。 ビジネス プロセス フローのあるフォームがある場合、予期しない動作が発生する可能性があります。 ビジネス プロセス フローを使用するフォームでフォーム コンポーネントを使用しないことをお勧めします。
フォーム コンポーネント コントロールは、フォーム コンポーネント コントロールによって使用されるフォームにフォーム コンポーネント コントロールを追加するなどの、埋め込みフォーム コンポーネント コントロールはサポートしていません。
フォーム コンポーネント コントロールは、 埋め込みキャンバス アプリをサポートしていません。 これらのキャンバス アプリでは予期しない動作が発生する可能性があります。
フォーム コンポーネント コントロールは、フォームに複数のタブが含まれている場合にのみ、使用するフォームの最初のタブを表示します。
単一のフォームで異なるフォーム コンポーネント コントロールに同じフォームを使用することは、サポートされていません。
フォーム コンポーネントで使用するフォームは、 アプリに含まれている必要があります。 そうでない場合、または現在のユーザーがフォームにアクセスできない場合は、アプリに含まれ、ユーザーが利用できる最上位のメインフォームにフォール バックします (フォームの順序に基づいて)。
フォーム コンポーネント内のフォームで使用されるすべてのコンポーネントは、 アプリに含める必要があります。 これらのコンポーネントには、関連するテーブル、ビュー、ビジネス プロセス フローが含まれます。 そうでない場合、フォームで使用できないか、予期しない動作が発生する可能性があります。
マルチセッション アプリでレンダリングする場合、フォーム コンポーネント コントロールには特定の制限があります。 具体的には、
addOnSave
やaddOnChange
などのフォーム コンポーネント フォームに動的に追加されたハンドラーは、マルチセッション タブを切り替えた後には実行されない可能性があります。フォーム コンポーネントでタイムライン ウォールの設定に使用される列が変更された場合、タイムライン ウォールが更新されない場合があります。 ページが更新されると、タイムライン ウォールが期待どおりに更新されます。
モバイルでは、現在タイムライン コントロールはフォーム コンポーネント コントロールには表示されません。
サブグリッドの場合、 すべてのレコードを表示 および 関連レコードを表示 コマンド ボタンは、フォーム コンポーネント内にレンダリングされている場合は使用できません。
フォーム コンポーネント コントロールは、一括編集ダイアログではサポートされていません。 既定ではこれらは一括編集ダイアログのフォームに表示されず、関連するテーブル レコードに加えられた変更は保存されません。
フォーム コンポーネント コントロールを保存するときに重複レコードが検出されると、ユーザーは重複を表示して競合を解決できない可能性があります。