お客様から実際に受けた質問シリーズ。
Webサービスやアプリによくある機能「お気に入り登録」。
Twitterにもありますよね!ブックマーク機能。
「ユーザー別によく使うアイテムが決まっている。
そんな時にアプリを閉じても保存できるお気に入り登録機能を付ける事ってできないの?」
Power Apps のキャンバスアプリにこの「お気に入り登録」機能を付ける方法をご紹介します。
今回の条件
・ Power Apps キャンバスアプリ
・接続先は SharePointリスト
質問いただく背景
キャンバスアプリの画面に商品リストや業務フローの一覧を表示させることはよくあります。
・ずらーっと表示されたリストから、よく使うアイテムだけを絞り込みしたい。
・ユーザー別にお気に入り登録をさせて、アプリを閉じても登録情報が残るようにしたい。
・登録されたアイテムだけを簡単に絞り込み表示したい。
こんなケースを想定してみました。
キャンバスアプリ
左側にギャラリーを配置してサンプルの商品リストを表示しています。
その他のパーツについては追って説明します。
SharePointリスト
今回は、2つのSharePointリストをキャンバスアプリと接続しています。
リスト1:お気に入り登録 リスト
ユーザー:1行テキスト型。ユーザーのメールアドレスを格納。
FavoriteNo:ユーザーがお気に入り登録した商品IDを格納。
リスト2:サンプル商品リスト
ProdutID:1行テキスト型。商品IDを格納。
ProductName:1行テキスト型。商品名を格納。
ギャラリーにお気に入りのチェックボックスを付けてみる
アプリを起動して画面を表示したタイミングで、すでにお気に入り登録されている商品のチェックボックスをオンにしてみたいと思います。
関数をいくつか書いていきます。
この画面キャプチャーでは、キャンバスに配置したボタンに関数を書いていますが、
画面を表示させるタイミングで処理をかけたい場合は、
画面のOnVisibleプロパティに記述を書いてください。
1
//SPLをコレクション化。AddColumnsでお気に入り列を追加
ClearCollect(Col_Item_List,AddColumns(サンプル商品リスト,"Favorite_ID",false));
サンプル商品リストをアプリ内のコレクションとして取得しています。
その際にAddColumns関数を使って、コレクションに「Favorite_ID」という列を追加し、その追加した列に「false」の値を入れています。
2
//お気に入り登録=ユーザーのお気に入り登録を管理するリスト
//If判定 既にお気に入り登録があるユーザー
If(CountRows(Filter(お気に入り登録管理,Title=User().Email))<>0,
//FavoriteNo列に格納しているFavoriteNoのテキストを取得
UpdateContext({FavoriteNo:LookUp(お気に入り登録管理,Title=User().Email).FavoriteNo});
//ForAllでチェックボックスのFavorite_ID列をtrueに更新
ForAll(Split(FavoriteNo,","),
Patch(Col_Item_List,LookUp(Col_Item_List,商品名=Result),{Favorite_ID:true})
),
//If判定 まだお気に入り登録がないユーザー
UpdateContext({FavoriteNo:""})
)
この関数で何をやっているかを順番に書いていきます。
CountRows関数を使って、もしすでにユーザーのお気に入り登録のリストアイテムがあったら(<>0 ゼロではなかったら)
3
//FavoriteNo列に格納しているFavoriteNoのテキストを取得
UpdateContext({FavoriteNo:LookUp(お気に入り登録管理,Title=User().Email).FavoriteNo});
UpdateContext関数を使って「FavoriteNo」という名前のローカル変数(現在の画面内しかセットした値を使えない変数)をひとつ作成します。
作成した変数に、ユーザーのお気に入り登録のリストアイテムの「FavoriteNo」に格納されている、すでに登録済の商品IDのテキストをセットします。
複数の商品IDを「,」つなぎで格納させています。
4
//ForAllでチェックボックスのFavorite_ID列をtrueに更新
ForAll(Split(FavoriteNo,","),
Patch(Col_Item_List,LookUp(Col_Item_List,商品名=Result),{Favorite_ID:true})
),
ForAll関数を使って、お気に入りに登録済の商品のチェックボックスをオン(=true)に更新しています。
Split(FavoriteNo,",")
このSplit関数は何をしているかというと
作成した変数にセットされている
0001,0003,0005,0007 コンマつなぎの商品IDを
テーブルに変換してあげています。
↑はキャンバスにデータテーブルのパーツを追加して、itemsプロパティに
Split(FavoriteNo,",") を指定したものです。
テーブルが作成されて、商品IDが一つずつレコードに分かれているのがわかるかと思います。
この作成したテーブルを使って、ForAll関数を使って繰り返しの処理をかけ、商品リストのコレクションの中に該当する商品を見つけたら、お気に入りのチェックボックスの列「Favorite_ID」の値をfalseからtrueに更新をしています。
5
//If判定 まだお気に入り登録がないユーザー
UpdateContext({FavoriteNo:""})
)
最後。この部分は
If(CountRows(Filter(お気に入り登録管理,Title=User().Email))<>0,
このIf判定がfalseだった場合の処理です。
もし、ユーザーがまだひとつもお気に入り登録をしておらずお気に入り登録管理リストにユーザーのリストアイテムがない場合、「FavoriteNo」変数には"" 空をセットしています。
画面を表示させるタイミングで、すでにお気に入り登録されている商品のチェックボックスをオンにすることができるようになりました!
長くなったので続きは次回
次回は、画面のチェックボックスのオンオフでお気に入り登録を追加または削除したり、アプリからSharePointリストへお気に入り情報を登録する処理について書いてみようと思います。