0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

キャンバスアプリでお気に入り機能を作る方法2/2

Posted at

こんにちは!
ソントレーゾの藤野@sumiko_webです。

キャンバスアプリでお気に入り機能を作る方法
前回の記事から引き続き、今回は後編です!

前編↓

後編では、画面のチェックボックスのオンオフでお気に入り登録を追加または削除したり、アプリからSharePointリストへお気に入り情報を登録する処理について書いてみたいと思います!

チェックボックスでお気に入り登録を追加または削除

チェックボックスをオン/オフしたタイミングで何かを実行したい場合は

OnCheck:オンにした時
OnUncheck:オフにした時

プロパティに記述を書いていきます。

ギャラリーに表示させているデータソースは今回はコレクションです。

コレクションの中の列Favorite_IDがtrueの場合はチェックボックスがオン、
falseの場合はチェックボックスがオフ
になります。

OnCheckのタイミングでfalseをtrueに、OnUncheckのタイミングでtrueをfalseにしてあげましょう。

OnCheckの時の処理

image.png

Patch(Col_Item_List,LookUp(Col_Item_List,ID=ThisItem.ID),{Favorite_ID:true});
UpdateContext({FavoriteNo:Concat(Filter(Col_Item_List,Favorite_ID=true),商品名,",")})

Patch関数を使っています。
チェックボックスをオンにするリストアイテムをLookUp関数を使って絞り込み、Favorite_ID列をtrueに更新しています。

次に、UpdateContext関数を使い、ギャラリーのアイテムの内チェックボックスがオンになっているアイテムの商品IDをコンマつなぎの文字列型の変数にセットしています。

OnUncheckの時の処理

image.png

Patch(Col_Item_List,LookUp(Col_Item_List,ID=ThisItem.ID),{Favorite_ID:false});
UpdateContext({FavoriteNo:Concat(Filter(Col_Item_List,Favorite_ID=true),商品名,",")})

OnUncheckの時は逆にtrueをfalseにするようにします。

ここで気にしておきたいのは、ユーザーがチェックボックスをオン/オフにする頻度です。

今回は、ギャラリーのデータソースに指定しているコレクションに対して、Patch関数を使いFavorite_IDに対して更新をかけています。
ですので、オンオフの操作をする度に、直接SharePointリストに対して更新をかけません。

ギャラリーの外に配置したボタンで、後でまとめてSharePointリストに対して登録・更新を行うようにしています。

キャンバスアプリ側の処理の負荷が高くなりすぎないように配慮しましょう。

ボタンからSharePointリストへ登録・更新を行う

キャンバスに配置したお気に入り登録リスト更新ボタンのOnSelectプロパティに設定をしていきます。
image.png

If(CountRows(Filter(お気に入り登録管理,Title=User().Email))=0,
Patch(お気に入り登録管理,Defaults(お気に入り登録管理),{Title:User().Email,FavoriteNo:FavoriteNo}),
Patch(お気に入り登録管理,LookUp(お気に入り登録管理,Title=User().Email),{FavoriteNo:FavoriteNo})
)

順番に解説していきます。

1

If(CountRows(Filter(お気に入り登録管理,Title =User().Email))=0,

(Title列=ユーザー列)

お気に入り登録リスト.png

お気に入り登録管理リストのリストアイテムに、アプリを操作しているユーザーのリストアイテムがあるかないかを判定します。

2

Patch(お気に入り登録管理,Defaults(お気に入り登録管理),{Title:User().Email,FavoriteNo:FavoriteNo}),

もし、まだユーザーのリストアイテムがない場合は、Patch関数を使って新しくリストアイテムを登録します。

Defaults(お気に入り登録管理)
と書くと、更新ではなく、新規登録が行われます。

3

Patch(お気に入り登録管理,LookUp(お気に入り登録管理,Title=User().Email),{FavoriteNo:FavoriteNo})
)

すでに、ユーザーのリストアイテムがある場合は、該当するリストアイテムのFavoriteNo列を更新します。

FavoriteNo変数(ユーザーが登録している商品IDをコンマつなぎで保存)の値をセットしています。

ボタンからSharePointリストへ登録・更新を行うことで、アプリ内のコレクションとSharePointリストの同期を取りました。

これで完成です!

まとめ

アプリを閉じてもユーザー別にお気に入り登録した情報が登録/更新/保存される機能について紹介させていただきました。

今回のポイントは、

  • SharePointリストを使う場合、ユーザー別に複数のお気に入り登録情報をどのような形で保存しておくか
  • AddColumns関数を使って、SharePointリスト(商品リスト)にはない列をコレクションに追加して、お気に入りのチェックボックスを表示させる

かと思います。

ご紹介した機能を拡充して、

  • お気に入り登録されたアイテムだけをギャラリーで絞り込み表示させる
  • チェックボックスではなく、アイコンにして、オンオフを色の切り替えでわかるようにする

など、さらにカスタマイズができそうです!

ありがとうございました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?