こんにちは、あんこ先生です。
フォームコントロールのカスタマイズがうまくいかず悩んでいませんか?
例えば、入力するコントロールを変更したら警告が出たり、フォームモードの切り替え方やその仕組みがわからなかったりといった経験ありますよね。
PowerApps初心者には鬼門のひとつであるフォームコントロールですが、データソースの更新には欠かせない重要なものです。
アプリの自動生成で使う分にはちゃんと動くのですが、カスタマイズしようとすると難易度が跳ね上がります。
とはいえ、カスタマイズしないことには使い勝手の良いアプリは到底作成できません。
そこで、今回は「フォームコントロールの仕組みを知りたい」、「フォームコントロールをカスタマイズして使いたい」といった方を対象に、フォームコントロールとそれに従ずるカードコントロールの解説をしていきます。
この記事を読めば、フォームコントロールのカスタマイズができるようになります。
PowerApps│フォームコントロールについて
フォームコントロールとは│Form
指定したデータソースに対して、単一レコードの表示および編集、新規追加を行えます。
それらはフォームモードの切り替えることで、同じコントロール上で動作します。
フォームコントロールは、次の3つのモードを変更して使用します。
表示フォーム│ViewForm
既存レコードを確認するViewモードです。
その名の通り、レコードの値をフォームに展開し表示します。
表示のみのため、値の入力はできません。
ただし、参照は可能です。
ボタンコントロールなどでViewForm関数を実行することで切り替わります。
編集フォーム│EditForm
既存レコードを修正するEditモードです。
その名の通り、レコードの値をフォームに展開し、入力を許可します。
各コントロールのDisplayModeはEditになります。
値の修正が可能です。
ボタンコントロールなどでEditForm関数を実行することで切り替わります。
新規フォーム│NewForm
新規レコードを追加するNewモードです。
その名の通り、新規レコードを追加します。
設定により、ある程度の初期値を指定できます。
ボタンコントロールなどでNewForm関数を実行することで切り替わります。
基本的な使い方は、これらのモードを切り替えることで実現します。
データソース・レコードとの関係
フォームコントロールは、データソースのうち、ひとつのレコードを使用します。
そのレコード値をカードと呼ばれるコントロールに展開します。
フォームは通常1レコード目を展開していますが、指定により別レコードを展開させることも可能です。
レコードの指定には、通常レコードの一覧が表示できるギャラリーコントロールを使用します。
主要プロパティの使い方
フォームコントロールの主要プロパティは、次の4点です。
DataSourceプロパティ
表示、編集、または作成するレコードが含まれるデータソース。
DefaultModeプロパティ
フォームコントロールの初期モードです。
DisplayModeプロパティ
フォームモードと連動しているため、指定できません。
Itemsプロパティ
表示させるレコードを指定します。
データ更新の実行│SubmitForm
データの更新にはSubmitForm関数を使用します。
SubmitForm関数を実行すると、必須項目に値が含まれているか、データ型は一致しているかなど、入力データが検証されます。
そこで不整合が発生した場合、OnFailureプロパティが実行されます。
データ検証に合格した場合、データソースの更新を開始します。
更新が成功した場合、OnSuccessプロパティが実行されます。
また、フォームは編集モードに切り替わります。
更新が失敗した場合も、OnFailureプロパティが実行されます。
なお、SubmitForm関数を実行するには、ボタンコントロール等が必要です。
データ更新時のプロパティ│OnSuccess、OnFailure
OnSuccessプロパティ
SubmitForm関数およびデータソースの更新が成功すると実行します。
データソース更新後にさせたい処理を記載します。
OnFailureプロパティ
SubmitForm関数が失敗、またはデータソースの更新に失敗すると実行します。
データソースが更新されていないことをユーザーに通知することに使えます。
カードコントロールとは│Card
カードコントロールとは│Card
フォームコントロールは、複数のカードコントロールで構成されています。
フォームはレコード全体を表し、各カードはそのレコードの1つのフィールドを表します。
図のように、通常4つのコントロールで構成されていますが、それらは任意で追加修正することが可能です。
主要プロパティの説明
カードコントロールの主要プロパティは、次の4点です。
Defaultプロパティ
カードに割り当てる初期値です。通常はThisItem.項目名になっていますが変更も可能です。
例えば、DateAdd(ThisItem.項目名,1,TimeUnit.Days)とすれば、カードに含まれる日付入力コントロールは1日後の日付が表示されます。
DataFieldプロパティ
フォームコントロールのデータソースに含まれる項目を指定します。
カード作成時に自動で割り当てられているため、データソースを変更しない限り修正する必要はありません。
Updateプロパティ
SubmitForm関数が実行されると、DataFieldプロパティの項目がUpdateプロパティの値でデータソースに書き込まれます。
大抵テキスト入力コントロールが指定されていますが、任意のコントロールや数式に変更することも可能です。
Requiredプロパティ
入力を必須にするためのプロパティです。
これがtrueになっていた場合、空データを許可しません。
この状態でSubmitForm関数が実行されると、エラーメッセージが表示されます。
データ参照
カード内の各コントロールは、Parent.Default=親カードのDefaultプロパティを参照して値を取得します。
カード内の各コントロールは、親であるカードのDefaultプロパティを参照します。
データ更新時の注意
新規フォームに含めていない(または削除)項目はSharePointリストで設定した初期値で登録されます。
初期値を設定していない場合は、空になります。
また、必須項目を含めなかった場合、SubmitForm関数でエラーが発生し保存できません。
Visibleプロパティで非表示としたカードも、データは更新されます。
更新させたくない場合は、非表示ではなく削除してください。
また、日付カードを必ず本日の日付として登録したい場合は、DefaultプロパティにToday関数を埋め込みます。
また、ユーザーに更新されたくない場合はVisibleプロパティをfalseにすることで実現できます。
フォームコントロールとカードのカスタマイズ
カードの追加
フォームのカード追加は3ステップです。
追加したい項目をプロパティ➡フィールドの編集➡フィールドの追加から選択します。
項目が多いデータソースだと、すべてのカードが自動で作成されないことがあります。
同様の手順で追加しましょう。
誤って削除したカードも同様の手順で追加できます。
カードのロック解除
グレーアウトされたプロパティはロックされているため、修正できません。
これは、詳細設定タブの上部にあるカギマークバナーを押すことで解除できます。
カードの並び替え
カードの並びはドラッグでかんたんに変更できます。
コントロールの種類変更│例:テキスト入力→ドロップダウン
かんたんな操作で様々なコントロールに変更できます。
数式を変えることで、参照データも操作できます。
下図のケースでは、参照データをDistinct関数で重複排除しています。
そのため、フィールド名がValueからResultに変わってしまいました。
変更したコントロールに×印が表示されるため、Update関数の修正も行います。
フォームコントロールのまとめ
今回は初心者が扱いにくいフォームコントロールを紹介しました。
特にフォームモードの変更は十分理解しないと、意図した処理が行えません。
少しずついじってみて、どのように動作するか試してみましょう。
カード内のコントロールを差し替える方法はこちらで紹介しています。
併せて読むと理解が深まりますよ!
必須項目のDefaultプロパティの値が空だと、エラーが発生し保存できません。