Power AppsでForm内の特定の行のみDisplayModeを切り替える

Power Appsにてフォームを使用する場合に、特定のDataCard(行)のみ編集を可能にしたい、と感じたことはありませんか?

本記事では、ボタンやトグルを使用して、特定のDataCardの表示モードを設定する方法をご紹介します。

特定項目のDisplayModeのみを切り替える利点は?

結論から述べると、予期せぬ項目の編集を防ぐことができる点が利点です。

Power Apps でアプリを作成する際、1 つの Form に複数の役割を持たせるケースがあります。例えば、入力 Form においてアイテムの登録や編集を行ったりDataSource や表示する列を切り替えたりする場合です。

このような場合、Form 単位で「編集」「表示」などの FormMode を切り替えて制御することが一般的です。

しかし、FormMode を切り替えるだけではForm に表示されているすべての列が編集可能となってしまい、アプリ利用者によって想定外の項目が編集される可能性があります。

そこで項目単位で DisplayMode を制御し編集の有効/無効を切り替えることで、予期せぬ項目の編集を防ぐことができます。

設定方法

大きく、下記の4点に対する設定が必要です。

  1. Formの「DefaultMode」
  2. 対象行のDataCardおよびTextImputの「DisplayMode」
  3. 対象行以外のDataCardおよびTextImputの「DisplayMode」
  4. 切り替えボタンの「OnSelect」

Formの「DefaultMode」

Formの「DefaultMode」に対し下記の式を設定します。

FormMode.Edit

対象行のDataCardの「DisplayMode」

対象行のDataCardの「DisplayMode」に対し下記の式を設定します。

※TextInputの「DisplayMode」は規定値である「Parent.DisplayMode」によりDataCardの「DisplayMode」が反映されるため、設定は不要です。

If( isEnableCard, DisplayMode.Edit, DisplayMode.View )

対象行以外のDataCardの「DisplayMode」

対象行以外のすべてのDataCardの「DisplayMode」に対し下記の式を設定します。

※TextInputの「DisplayMode」は規定値である「Parent.DisplayMode」によりDataCardの「DisplayMode」が反映されるため、設定は不要です。

DisplayMode.View

切り替えボタンの「OnSelect」

切り替えボタンの「OnSelect」に対し下記の式を設定します。

If( !isEnableCard, UpdateContext({isEnableCard: !isEnableCard}), UpdateContext({isEnableCard: !isEnableCard}) )

FormModeを「Edit」とする理由

私自身、検証を行う前は「対象のDataCardのDisplayModeを切り替えればよいのでは」と考えていましたが、試してみるとこれがなかなかうまくいきませんでした。

理由として、Form、DataCard、テキスト入力のそれぞれにてDisplayModeやFormModeの設定が行えることが挙げられます。特定のDataCardのみDisplayModeを変更してもFormModeの影響で表示上は「Edit」になっても値の変更等は行えませんでした。

そのため、FormModeを「Edit」とし、編集を許可しない行に対しては個別にDisplayModeを「View」とすることで、編集を許可したい対象の行のDataCardおよびテキスト入力のDisplayModeを確実に「Edit」とすることができます。

表示上は「Edit」だがテキスト入力はできない

表示も「Edit」かつ入力も可能

まとめ

今回はForm内の特定の項目のみDisplayModeを切り替えるボタンを追加することでForm内の特定の項目のみDisplayModeを切り替える方法を紹介しました。

4つのステップで必要な項目のみを編集可能とし、予期せぬ項目の編集を防ぐことができます。利用シーンに合わせて柔軟な編集の有効化/無効化を制御する場合に、ぜひご活用ください。

執筆担当者プロフィール
日髙 菜々子

日髙 菜々子(日本ビジネスシステムズ株式会社)

普段はPower Platform関連の案件に携わっています。Power Platformを用いた業務改善にも取り組んでいます。

担当記事一覧