昨年2018年12月22日に開催された「Power BI 勉強会#11」で利用していた、PowerAppsで作成したConnpass簡易受付アプリの作り方をStep by Stepで紹介していきます。第4回目は、完結編です!受付の処理と、細々したトコを作成してアプリ全体を完成させます。
前回まで
受付処理の作成
前回までに作成したギャラリーコントロールに対して、受付の処理を実装します。具体的には、データソースのExcelにある[出欠ステータス]に対して受付時間(システム時間)を更新します。
-
不要なアイコンを削除
”>”アイコンは不要なので削除しましょう。ギャラリーコントロールの一番上にある行の対象を選択してDelキー押下です。
-
受付ボタンの配置
続けて、ギャラリーコントロールの一番上にある行へボタンを追加します。
[Text]プロパティに対して、下記を設定します。いま選択している行のアイテムが受付されてない場合は”受付”、済みの場合”済”を表示するようにしています。Button.TextIf(IsBlank(ThisItem.出欠ステータス),"受付","済")
-
受付ボタン押下時の実装(受付実施)
続けて、データソースを更新する処理を実装します。
ボタンの[OnSelect]イベントへ、下記を設定します。押下した対象の"出欠ステータス"をシステム時間で更新します。これで、出欠ステータスに値が設定されるため”受付した=列がブランクではない=出席”という判定が可能になります。Button.OnselectPatch(UserList,LookUp(UserList,受付番号=ThisItem.受付番号),{出欠ステータス:Now()})
■参考URL
PowerApps の Patch 関数
- 受付済みの場合、受付ボタンの色を変える
受付の未・済を識別しやすくするため”済”の場合、ボタンの背景色を変更しておきます。色を変えると視覚的に認識しやすくなります。こういう細かな配慮で使い勝手が向上するので、個人的によくコレ系の手当を実施してます。
ボタンの[Fill]プロパティへ下記を設定します。
If(IsBlank(ThisItem.出欠ステータス), RGBA(56, 96, 178, 1),RGBA(0,0,0,1))
受付処理の動作イメージ
上記までの段階で、動作させるとこんな感じです。受付を実施した対象のデータが、ちゃんと更新されていることが把握できるかと思います。
受付ミスの回避策を実装
操作ミスなどで、本人とは異なる人を受け付けてしまう場合も考えられます。なので、その際の受付キャンセル処理を実装しておきます。Excelを直接更新しても良いのですが、そんなのメンドクサイですよね。
-
受付キャンセル用のアイコンを設定
ボタンの横に[ゴミ箱]アイコンを使いします。赤などの目立つ色へ変更した後で、キャンセル処理を実装します。
アイコンの[OnSelect]イベントへ下記を設定します。受付ボタンとロジック的には同様で、更新する値がブランク(””)になっているダケです。icon.OnSelectPatch(UserList,LookUp(UserList,受付番号=ThisItem.受付番号),{出欠ステータス:""})
-
アイコンの表示・非表示を制御
ボタンが”済”=受付済み以外は、ゴミ箱アイコンを表示する必要がありません。ですので、受付済み以外のアイコンは非表示にしちゃいましょう。
アイコンの[Visible]プロパティへ下記を設定します。icon.VisibleNot(IsBlank(ThisItem.出欠ステータス))
受付キャンセルの動作イメージ
上記までの段階で、動作させるとこんな感じ。前回はシステム時間で更新していましたが、今回はそれを初期化(ブランク)にしていることが把握できるかと。
これで、簡易受付アプリとしては運用可能なレベルに達したと思います。実際、この連載の元ネタになったアプリを作成した際は、ここまで実装するのに約1時間程度だったと記憶しております。(しかも、呑み会が終わった後のホテルで実装したw)
チョッと便利にする1:検索条件の初期化
一応は完成しているモノの、もう少し便利にしてあげた方が利用者は嬉しいんじゃないかな?と思った箇所があるので、そこを手当していきます。つまり、オマケ。でも、あると嬉しい(ハズ)の機能って感じの”検索条件を初期化する処理”です。
-
検索条件初期化ボタンの配置
検索用テキスト入力コントロールたちの右側にボタンを追加。[Text]プロパティを”検索条件初期化”などに変更します。そして、本題の初期化用ロジックを実装します。
ボタンの[OnSelect]イベントへ下記を設定します。Button.OnSelectUpdateContext({isReset:true})
-
検索条件のリセット処理を実装
”受付番号”テキスト入力コントロールを選択し、初期化処理を設定していきます。
該当コントロールの[Reset]プロパティへ下記を設定します。TextInput.ResetisReset
-
検索条件のリセット解除を実装
ずーっとリセット用のフラグがON(True)だと気持ち悪いですよね。なので、検索条件が再入力されたらフラグをOFF(False)にする処理を実装しておきます。
該当コントロールの[OnChange]イベントへ下記を設定します。TextInput.OnchangeUpdateContext({isReset:false})
C#などのプログラム言語経験者だと、初期化ボタンを押下した際のイベント内に、初期化する対象のコントロールへのアプローチを記載することが多いかと思います。PowerAppsは、そのような書き方ができません。そのため、初期化をする際にはResetプロパティに対してTrueの値を与えてやる、という動作を実装する必要があります。ここら辺は、他開発言語経験者だとハマるポイントかと思います。
チョッと便利にする2:受付済み数/総数の表示
「今、何名きてる?」って受付してると言われますよね。たぶん。その際、いちいち数を数えるなんてナンセンス!と思ったので、人数を表示しちゃいます。
検索条件初期化ボタンの右側にラベルを追加。
追加したラベルの[Text]プロパティに対して下記を設定します。
"受付/総数:" & CountIf(
UserList,
Not(IsBlank(出欠ステータス))
) & "/" & CountRows(UserList.出欠ステータス)
出欠ステータスがブランク(””)ではない=受付済み、と単純にデータソースの総数をカウントしているだけですね。これがあれば、1発で「今、何人?」が把握できます。
完成形の動作イメージ
これで、受付番号、またはユーザー名で検索することで、申し込み者の確認と受付処理が実施可能になりました。ここまでの手順をトレースしてくだされば、おそらくアプリが作成できていると思います。念のため、ダウンロードも用意しておきますので、ご自由にお使いください。
■ダウンロード先
サンプルデータ
エクスポート済みアプリ
諸注意
PowerApps経験者の方はお気づきかもしれないですが、いくつか注意点があります。
- 提供サンプルデータ、アプリのご利用は自己責任でお願いいたします
- 一応言っておくスタイルです
- データソースがExcelのため、複数ユーザーからの平行利用ができません
- 複数ユーザーによる同時利用がしたい場合は、CDM等を検討ください
- データソース元であるODfBのExcelを直接開くとアプリから更新できなくなります
- 排他になります。しょうがないね
まとめ
アプリを作るより、この連載を書く時間のが長かったよ!( ゚Д゚)
不明点等ありましたら、DM等でお問い合わせください。なお、対応はベストエフォートになります。ご理解お願いします。