お題
SharePoint リストに、コース (1行テキスト) ごとに受講者 (ユーザーまたはグループ) を登録して、これらの情報を基に新たな情報を登録する際、コース、受講者を手作業で入力するのは面倒くさい。コースをドロップダウンリストから選んだら、そのコースの受講者のみに絞り込むように入力フォームを作ります。
「ユーザーまたはグループ」列の絞り込みはカンタンにできるかと思いきや、この「ユーザーまたはグループ」型のクセが強く扱いづらいところもあり、数日間ずっとこれに悩みましたので、ここに残しておこう。
PowerApps で入力フォームを作成
SharePoint リストを開き、PowerApps > フォームのカスタマイズ をクリックします。
すると、PowerApps アプリの作成画面が開きます。
データソースを追加
データを絞り込むために必要な SharePoint リストを追加します。今回は「受講者」リストを追加します。
メニュー [ビュー] > [データソース] をクリックすると、現在接続されている SharePoint リストが載っています。
ここで、[データソースの追加] をクリックします。
接続のリストから「SharePoint」を選択します。
SharePoint サイトの URL を入力するか、「最近利用したサイト」から選ぶかで接続します。
SharePoint リストの一覧から必要なリストにチェックをつけて [接続] をクリックします。
選択した SharePoint リストが追加されました。
また、Office 365 ユーザーの操作を行うので、「Office 365 ユーザー」も追加します。
「タイトル」カードのカスタマイズ
まず「タイトル (コース)」列の絞り込みを実装します。
フォームのプロパティで「フィールドの編集」を開き、「タイトル」列のコントロールの種類を「許容値 (ドロップダウンリスト)」に変更します。
「タイトル」カードのプロパティでロック解除し、ドロップダウンリストの Items プロパティに「Distinct(受講者,タイトル)」と指定することで、「受講者」リストの「コース (タイトル列)」がドロップダウンリストの選択肢として載ります。
「生徒」カードのカスタマイズ
次にお題の「ユーザーの「絞り込み」を実装します。
「生徒」カードのプロパティでロック解除し、メニュー [挿入] > [コントロール] > [ドロップダウンリスト] をクリックして追加します。
先ほどの「タイトル」カードで選択した値で「生徒」を絞り込むようにするため、追加したドロップダウンリストの Items プロパティにその旨を表す式を入力します。
Items = Distinct(Filter(受講者,タイトル=DataCardValue4.Selected.Value),生徒.DisplayName)
なお、ドロップダウンリストはテキスト値しか取り扱えないので、「表示名 (DisplayName)」を出力します。
あと、ドロップダウンリストのデフォルトに「このアイテム (成績表)」の「生徒 (ユーザーまたはグループ)」を載せたいので Default プロパティにセットします。お決まりの「Parent.Default」と書きたいところですが、型が合わないのでこのカードの Default プロパティの「表示名」をセットします。
Default = ThisItem.生徒.DisplayName
そして、このドロップダウンリストで選択した値をもともとこのカードに搭載されていたコントロールに反映させるため、DefaultSelectedItems プロパティを以下のようにクレーム、表示名、メールアドレスをセットします。
DefaultSelectedItems = {
Claims:"i:0#.f|membership|" & Lower(First(Office365ユーザー.SearchUser({searchTerm: Dropdown1.Selected.Value})).UserPrincipalName),
DisplayName:First(Office365ユーザー.SearchUser({searchTerm: Dropdown1.Selected.Value})).DisplayName,
Email:First(Office365ユーザー.SearchUser({searchTerm: Dropdown1.Selected.Value})).Mail
}
動作確認
まず、コースを選択すると生徒が絞り込まれていることがわかります。
ドロップダウンリストでユーザーを選択すると、生徒カード (もともとあったコントロール) の値も変わっていることがわかります。
ひととおり確認できたので、生徒カードのもともとあったコントロールの上に追加したドロップダウンリストを重ねて公開しましょう。