今回作成するもの
今回はPower Apps で、入力候補を表示してくれるオブジェクトの作成を行ってみたいと思います。
#PowerApps でコンボボックスの値を入力したテキストでフィルターする方法
— コルネ (@koruneko32767) August 9, 2020
よくあるユーザー名などを入力すると項目がフィルターされて表示されるやつですね
またブログにやり方纏めておきまーす pic.twitter.com/Ov52rlwPNR
上記ツイート埋め込み動画の、
左:Power Apps 標準のコンボボックス
右:今回作成した入力補助を行ってくれるテキストボックス
動画のように、Power Apps 標準オブジェクトを使用しただけでは、入力候補の表示は行えません。
今回は右のような機能の実装方法を紹介します。
利用するオブジェクト
以下オブジェクトを利用します。
- Gallery(Label):入力候補を表示するためのオブジェクト
- TextInput:テキスト入力を行うためのオブジェクト
- Icon:テキスト入力の右端に配置するためのオブジェクト
- Checkbox:アイコンを押している状態かを判定するためのオブジェクト
透明に設定する
入力リストを作成する
今回、入力リストには「Power Automate のマイフロー一覧」を用いたいと思います。
※ このリストの作成方法に関しては今回詳しく触れません。
- コネクタより、「Power Automate 管理」を追加します。
- App.OnStart に以下式を入力します。
App.OnStart
Clear(ListMyFlowGallery); ForAll( PowerAutomate管理.ListMyFlows(First(PowerAutomate管理.ListUserEnvironments().value).name).value, Collect( ListMyFlowGallery, {id:name, dispName:PowerAutomate管理.GetFlow(First(PowerAutomate管理.ListUserEnvironments().value).name, name).properties.displayName} ) );
これで、「ListMyFlowGallery」というコレクションにマイフロー一覧が設定されます。
入力候補を設定する
ギャラリーを設定する
「挿入」>「ギャラリー」>「縦方向(空)」を選択します。
こちらが、入力候補を表示させるためのオブジェクトになります。
Items にはListMyFlowGallery を設定します。
Gallery1.Items
ListMyFlowGallery
ギャラリー内に表示させるラベルを作成します。
Gallery1 を選択した状態で、「ラベル」を選択します。
ラベルにはマイフローの表示名を表示させたいと思います。
これはListMyFlowGallery の「dispName」にあたります。
ラベルのプロパティを以下のように設定します。
Label1.Text
ThisItem.dispName
Label1.Width
Parent.Width
Label1.HoverFill
Color.DarkGray
これで、
- ラベルに表示される名前がマイフローの表示名
- ラベルの幅がギャラリーの幅と同様の設定
- マウスホバーした項目がグレーに変化
となるように設定できました。
テキスト入力項目を設定する
「テキスト」>「テキスト入力」を選択します。
こちらで入力された内容をもとに入力候補に表示されるアイテムをフィルターしたいと思います。
設定が完了したら、テキスト入力ではなく先ほど作成したギャラリーのプロパティを編集します。
ギャラリーに表示されるアイテムを絞りたいので、ギャラリーのItems を編集します。
Gallery1.Items
Search(ListMyFlowGallery, TextInput1.Text, "dispName")
これでテキスト入力に入力された内容でアイテムを絞ることができましたね。
細かい設定
入力保管項目の表示条件
入力保管項目が、表示される条件は以下の時としたいと思います。
- 右端のプルダウンが選択されたとき
- テキスト入力にテキストが入力されたとき
まずはプルダウンを作成したいと思います。
「アイコン」>「下」を選択します。
X、Y、Width、Height はテキスト入力項目に合わせておきましょう。
Icon1.X
TextInput1.X + TextInput1.Width - Self.Width
Icon1.Y
TextInput1.Y
Icon1.Width
Self.Height
Icon1.Height
TextInput1.Height
標準のコンボボックスと同じような見た目にしたければ以下の設定も変更します。
Icon1.Fill
ColorFade(RGBA(56, 96, 178, 1), -20%)
Icon1.Color
RGBA(255, 255, 255, 1)
Icon1.PaddingXXX(Top、Left、Right、Bottom)
7
こちらのアイコンはただの見た目にしか使用しないため設定はここまでです。
プルダウン箇所が押されたかどうかは「入力」>「チェック ボックス」を使用します。
X、Y、Width、Height はアイコンの設定と同様としてください。
表示されるテキストは空文字を設定してください。
こちらのチェックボックスは選択されたかどうかを判断するためだけのもので、実際には画面上に表示されなくてよいです。
だからといって、「表示(Visible)」をfalse に設定してはいけません。
非表示にしてしまうと選択も出来なくなってしまうからです。
なので、こちらのチェックボックスは透明に設定しましょう!
「XXXColor」や「XXXFill」となっている色に関するプロパティを「RGBA(0, 0, 0, 0)」に設定します。
これでどう動作させようが、透明に設定できたかと思います。
プルダウンが作成できたので、入力保管項目(Gallery1)の表示条件を変更したいと思います。
Gallery1.Visible
Or(Checkbox1.Value, !IsBlank(TextInput1.Text))
「Checkbox1.Value」は先ほど作成したプルダウンのチェックボックスが選択されている状態か、否かを判定しています。
前者の場合はtrue に、後者の場合はfalse になりますね。
「!IsBlank(TextInput1.Text)」はテキスト入力項目に文字が入力されているか否かを判定しています。
IsBlank の否定形(!)なので、前者の場合はtrue に、後者の場合はfalse になりますね。
これで、入力保管項目の表示条件が作成できました!
入力保管項目で選択されたアイテムをテキスト入力に設定する
入力保管項目で入力されたアイテムでテキスト入力項目を更新したいと思います。
これを実現するために、変数を利用します。
App.OnStart に以下の式を追加します。
App.OnStart
Set(flowName, "")
こちらの変数をテキスト入力のデフォルト値に設定しましょう。
TextInput1.Default
flowName
これでテキスト入力項目のデフォルト値にflowName が設定されましたので、入力保管項目のアイテムが選択されたときに変数が更新されるようにしましょう。
Lanel1.OnSelect
Set(flowName, ThisItem.dispName)
これで入力保管項目で選択されたアイテムをテキスト入力に設定することができました!!
おわり
以上でPower Apps での入力保管項目の作成は完了です。
標準のオブジェクトで満足できない場合、工夫によってはこのように自作しちゃうこともできちゃいますので、諦めずに実現方法を考えてみるといいかもですね。