今回から、先日ご案内したWebinarアプリの内部動作の解説をしていきます。
今回は「お問い合わせアプリ拡張版」というお問い合わせをする側(ユーザー)が利用するアプリです。
このアプリは4つの画面(スクリーンといいます)で構成されています
1.スタート画面(新しいお問い合わせをするのか、既存のお問い合わせを確認するのかを選択する画面)
2.新規お問い合わせをするフォームの画面
3.フォームの投稿が成功したときに表示される画面
4.既存のお問い合わせを確認する画面
4については少し複雑なことをしているので、次回説明します。
最初の画面を表示・・・する前に
Power Appsのアプリは起動すると一番上のスクリーンを表示します。が、表示前に何らかの処理をしたいことがあると思います(事前にデータを読み込んでおく、変数を設定するなど)
赤い部分が「最初のスクリーン」ですが、これを表示する前に青い部分(App の OnStart) を実行する
ここでは2つの処理を実施しています。
Set(gblButtonColor,RGBA(150,0,150,0.5));
こちらは gblButtonColor「変数」を設定しています。これ以降 gblButtonColor を指定するとこの色が設定されることになります。名前の通りボタンの色ですね。薄い紫色のボタンになっていることがわかると思います。
- グローバル変数(アプリのどこからでも呼び出せる変数)は gbl**** のような命名をする
- RGBA関数は色の指定。RGBとα値(透明度)を設定しています。透明度を設定すると背景が若干透けて見えるようになります。
以下、ボタンの色(Fill/FillColor)はgblButtonColorを指定すれば統一感のある色になります。
ClearCollect(colMyRequest,"");
こちらはコレクション変数の初期化をしています。(この処理がそもそも必要か?といわれると微妙ですが、ここで宣言をすれば、入力時の候補に表示されるのでアプリ作成が楽になります)
最初の画面
ここではボタンを2つ配置し、クリックするとそれぞれのスクリーンに移動します。これは OnClick に以下のように書きます
Navigate(Screen2,fade)
fadeの部分はなくてもいいのですが、指定するとスクリーンの表示のされ方が変わります。( PowerPoint 風)
フォームの部分
今回のメインの部分はこちらになります。新規のお問い合わせを記入してもらうページですね。
フォームをスクリーンに張り付け、 Datasource を Dataverse For Teams のテーブル(や SharePoint のリスト)に設定します。今回の場合、データソースである Dataverse for Teams には以下の列が定義されています。
「タイトル」「お問い合わせID」「お問い合わせ内容」「カテゴリ」「ステータス」「担当者」
しかしながらこのフォームには「タイトル」「お問い合わせ内容」「カテゴリ」しかありません。
これについて解説します。
まず、お問い合わせIDですが、これはお問い合わせを一意に識別する番号を保存します。
実は非表示にしてあるだけでフォームにこの値は存在しています。
Value プロパティに以下のように値を設定しています。
GUID()
これで「おそらく重複しないであろう値が自動的に設定されて、しかもユーザーが変更できないし見えない」という状態になります。
同様に「ステータス」も「新規」に設定して変更できないように非表示にしています(いきなり「解決済み」の状態でお問い合わせを投稿することはないはずなので…)
「担当者」はお問い合わせ投稿時は未定です。なのでこちらは非表示ではなくフォームからそもそも消しています。
これでフォームの設定はOKです。ただし、これを使うためにはいくつか注意点があります・
初期化して使う
プレビュー実行するとわかるのですが、一回投稿するとフォームが使えなくなります。これはフォームの情報を送信したら、自分はもう用済みだと認識してしまうからです。そこで、画面を表示するたびに初期化(リセット)してあげましょう。
これを実現するためには、 Screen の OnVisibleプロパティを以下のように設定します
ResetForm(frmNewReq)
これで「このスクリーンが表示されるたびに」フォームが初期化されます。
フォームの投稿と成功
ボタンが押されたらフォームを送信するようにします。なので、ボタンの OnSelect に以下を設定します。
SubmitForm(frmNewReq)
これだけだと、何も画面に変化が起こらないためユーザーからするとちゃんと送信できたのかどうかわかりません。
そこで Form の OnSuccess に以下を設定します。
Navigate(scrSuccess)
流れとしては「ボタンを押す→ボタンの OnSelect プロパティにより SubmitForm が実行される→成功するとフォームの OnSuccess プロパティにより Navigate が実行される」となります。ちなみにフォームの送信が失敗した場合の処理が必要であれば OnFailure を設定します。
これで新規お問い合わせを投稿する部分については実装できました。
次は既存のお問い合わせを確認する部分を作ります。これはギャラリーと表示ビューを使います。さらに中級編として(?)フォームを使わずにデータソースに値を入れる方法を試してみます。