見出し画像

Power Apps 教えてAkiraせんせー!⑨

@akira_365🐟さんの講習9回目が終了しました!
ドロップボックスに絞り込み機能を適用していきます✨

8回目はこちら

Filter 関数で様々な項⽬での絞り込み機能を作る


第5回の講習で ViewScreen の Gallery である galView の
Items = Filter(TblReport,  txtSearch. Text in Title)
で、「タイトルの中に txtSeach.Text があるよ」という条件式を書くところまで行いました。

ドロップダウンで絞り込む

条件を足すことによって、『会社名』、『カテゴリ』、『記入者』でも検索できるようにしていきます。(複数検索を可能にする)

複数条件で Filter したい場合、基本的にカンマ区切りで、第2条件・・・第3条件と増やすことができる。
Filter(テーブル , 条件1 , 条件 2 , 条件 3…)

🐟ドロップダウンは、選択したものを抽出してくれないといけないですよね

Company と同じとき・・・ではNG
selected.Result  会社のドロップダウンで選択した結果
Company が同じもの

もしも会社名が空白なら? 空白を検索するということ?

このような場合、全レコードが表示されてほしい

🐟分岐を作りたくなければ、in を使う

空白が Company の文字列に含まれている場合( = も含まれる)

in の識別子は部分一致。
部分一致を検索するにはテキスト値でないといけないため、Text 関数を使⽤すると、未選択の場合はすべての結果が返ってきます。

空白を選択肢にするということは要素として間違い

今回、データにblank(空白)があるということには触れずに進めています。

**********************************************************************************

空白であれば、選択をしていないという扱いにしたい。ただ、データの中にblank(空白)があるとそれができない元々のデータをblank(空白)にすべきではない。「会社名は入力必須」というようにしてあげる。それができないのであれば、blank(空白)を作る必要がある。blank(空白)ならば〇〇という条件にIF関数がはいってくる。

**********************************************************************************

『会社名』と同様に『カテゴリ』、『記入者』についても設定します。
Items = Filter( TblReport, txtSearch.Text in Title, Text(drpCom.Selected.Result) in Company, Text(drpCate.Selected.Result) in Category, Text(drpAuth.Selected.Result) in 登録者.DisplayName
ドロップダウンを使った絞り込みが完了しました。


カレンダーから絞り込む

作成した Calendar で選択した日付に〇がつくようにしましたので、Filter に利用していきます。
どうやって絞り込みの材料にするか・・・まずは「⽇付」を表すものがどれか考えてみます。

SharePoint から『登録日時』を確認
列の追加をクリック→列の表示/非表示をクリック→『登録日時』を適用

『登録日時』を Calendar で選択しておきます。
今は 7/30 のデータのみ登録されているので、7/30 を選択しておきます。

Gallery で選択した日時を取得する方法は、先ほどのドロップダウンと同じように Selected ~ を使います。

試しに"捨てLabel"を用意して7/30 が表示されるか確認しました。

Filter でも使えます✨
Gallery の選択されたマスの「lblCalendarDay」の Text 

ViewScreen の Gallery である galView に Filter 条件を追加します。
Items = Filter( TblReport, txtSearch.Text in Title, Text(drpCom.Selected.Result) in Company, Text(drpCate.Selected.Result) in Category, Text(drpAuth.Selected.Result) in 登録者.DisplayName, 登録日時=galCalendar.Selected.lblCalendarDay.Text )

⾮表⽰にした「lblCalendarDay」が⽇付を表すラベルだったので、そちらを Filter の材料にします。

ただ、これでは検索結果に何も表示されません・・・
想像していた結果が出てこない場合はエラーを疑うのですが、エラーマークも「!」や「×」などがあります。
いずれもヒントは確認できるので原因を探ります。

イコールのあたりをマウスオーバーすると「型に互換性がありません」とのことです😵

SharePoint の『登録⽇時』は「⽇付型」ですが、galCarendar.Selected.lblCalendarDay.Text は「テキスト型」なので比較ができません。どちらかの型に合わせましょう。


Text で書かれた⽇付を「⽇付型」に直す

今回は、「テキスト型」のほうを「⽇付型」に変更します。
使用する関は、DateValue 関数です。

Text をくくって日付型に(2022/7/30 0:00:00 に変えてくれる)

・・・まだ何も表示されません・・・

登録日時は 2022/7/30 0:00:00 ぴったりではないはず💦

左側もこの DateValue を使⽤します。

Items = Filter( TblReport, txtSearch.Text in Title, Text(drpCom.Selected.Result) in Company, Text(drpCate.Selected.Result) in Category, Text(drpAuth.Selected.Result) in 登録者.DisplayName, DateValue(登録日時)=DateValue(galCalendar.Selected.lblCalendarDay.Text) ) 

これで結果をみてみると絞り込みが出来ているのが確認できました。

複数条件で絞り込む場合は、条件を If関数 で繋げていくと考えるのは簡単ですが、それを実装していくとなるとこんがらがってしまいます。(私は)
blank(空白)でもデータでも検索ができる in はおすすめということです。

ViewScreen については完了しました✨


新規作成画面の作成


ツリービューを見ると、初期にヘッダー部分のみコピーした EditScreen があります。日報を作成していく画面とします。

コントロールを追加していきます

オーサリングメニュー入力編集フォーム

ドラッグアンドドロップでもクリックでもOK

透明なコントロールが表示されました。
中にデータが入っていないとこの状態のままという特殊なコントロールということで、フォームと言えば「問い合わせフォーム」などをイメージしますが、今のところは何だコレ状態です。

プロパティデータソース からデータの接続をします。
ドロップダウンから選択できるようになっているので、そちらから「tblReport」を選択します。

日報のデータをクリック!

フォームができました!!早い!!
名前:frmInput

登録する準備が整いました

🐟データソースを選ぶだけでできちゃうところがすごい✨

カードの中にコントロールがいろいろ入っている仕様です

プレビューで入力ができそうですが、「表示するアイテムがありません」となりました。
実は、Form というコントロールには、編集モード新規作成モードの2つがあります。
デフォルトでは、「編集」の状態になっています。
frmInput を選択した状態で、プロパティ既定モード新規と変更します。

レコードを編集するので編集モード、アイテムに紐づいていないということ

ここで再度プレビューをしてみると・・・新規入力可能となりました。

新規モードでないと、新規作成はできない! つまづきポイントなので覚えておく🕵️
ちゃんと入力してみました


日報を登録する

EditScreen の中にボタンコントロールを使⽤し、登録ボタンを作成します。
オーサリングメニュー
入力ボタン
名前:btnSubmit
テキスト:登録

登録するには SubmitForm 関数 を使⽤します。
SubmitForm(登録する Form 名)
OnSelect
= SubmitForm(frmInput)

登録ボタンをクリックすると、frmInput というフォームが送信されます。

Submit は提出という意味

プレビューで試してみます。
確認するには ViewScreen で、登録した日付(この日は10/1)を選ぶと、入力した内容が表示されました。

2回登録ボタンを押してしまった💦

今回の内容はここまでですが、TopScreen から『作成』をクリックすると、またまた「表示するアイテムがありません」と出てきました。
こちらは制約がいろいろとあるようで、設定で補っていきます。

次回はForm に関する新たな関数を学びます。
だんだんと出来上がっていってます✨

この記事が気に入ったらサポートをしてみませんか?