新規記事を募集中!ここから募集ページへ

【Power Apps】チェックボックスを使用したお気に入り機能を実装する方法を紹介!SharePointリストに保存してユーザー自身で管理することが可能に

掲示板アプリの紹介

私の勤める鉄道会社では、毎日のように掲示物を紙で管理していました。
紙で管理しているため、「作成」・「印刷」・「掲示」・「撤去」・「管理」という作業がすべて人力で行っていました!

そこでPower Appsで掲示板アプリを作成して現在も運用しています。

詳しいアプリの紹介は別の記事をご覧ください。

それでは本題に

今回は実際にユーザーより要望のあった機能を実装していきたいと思います。

ユーザーより要望のあった機能

自分でお気に入り登録して資料を分類したい!

お気に入りに登録したものだけ一覧にしてほしい!

SharePointリストの準備

お気に入り

メンテナンス重視するために新たにSharePointリストを作成してマスタとは別に保存させます。

内部名種類役割注意事項
Title(初期作成済み)使用しないため非表示
mail1行テキストメールアドレスを格納するために使用
hozon_ID複数行テキストお気に入りした資料のIDを格納するために使用編集対象行数を最大値の「1000」に変更しておく

Power Appsの準備

データの追加

初めにSharePointリストをPower Appsと紐づけます。

チェックボックスを追加

ギャラリー内にチェックボックスを追加します。

Power Apps ギャラリーにチェックボックスの追加

メインの機能となるお気に入りに「設定」「解除」をするチェックボックスを追加していきます。

OnCheck

If(CountRows(Filter(【SharePointのリスト名】,mail=User().Email))=0

リストのmail列とログインユーザーと一致していないと0を出力し、trueとなります。
リストのmail列とログインユーザーと一致している行があると0以外を出力し、falseとなります。

trueの場合
Patch(【SharePointのリスト名】,Defaults(【SharePointのリスト名】),{hozon_ID:ThisItem.ID,mail:User().Email})

リストにまだ登録されていないユーザーのため、mail列にUser().Emailでメールアドレスを取得し格納しています。

falseの場合
Patch(【SharePointのリスト名】,LookUp(【SharePointのリスト名】,mail=User().Email),{hozon_ID:LookUp(【SharePointのリスト名】,mail=User().Email).hozon_ID&”,”&ThisItem.ID})

すでにリストに登録されているためLookUp関数でユーザーの行を取得して、さらにLookUp関数ですでに格納されているhozon_IDを取得して、新たにIDを追加しています。

OnCheck
If(CountRows(Filter(お気に入り,mail=User().Email))=0,
 Patch(お気に入り,Defaults(お気に入り),{
  hozon_ID:ThisItem.ID,mail:User().Email
 }),
 Patch(お気に入り,LookUp(お気に入り,mail=User().Email),{
  hozon_ID:LookUp(お気に入り,mail=User().Email).hozon_ID&","&ThisItem.ID
 })
)

OnUncheck

UpdateIf(【SharePointのリスト名】,mail=User().Email,
{hozon_ID:Substitute(LookUp(【SharePointのリスト名】,mail=User().Email).hozon_ID,”,”&ThisItem.ID,””)})

UpdateIf関数で条件で絞り込んで、絞り込んだ行を更新していきます。
あくまでも、チェックを外す際の実行されるものですのでUpdateIf関数で問題なしです。

OnUncheck
UpdateIf(お気に入り,mail=User().Email,
 {
   hozon_ID:Substitute(LookUp(お気に入り,mail=User().Email).hozon_ID,","&ThisItem.ID,"")
 }
)

Default

If(IsBlank(Find(Text(ThisItem.ID),LookUp(【SharePointのリスト名】,mail=User().Email).hozon_ID))=true,false,true)

Find関数でログインユーザーの行があり、hozon_ID列にギャラリーと同じIDが格納されているか探索します。
もし同じIDがあった場合はtrueを返して、チェックボックスにチェックを入れています。
同じIDがない場合はfalseを返して、チェックボックスにはチェックが入りません。

Default
If(IsBlank(Find(Text(ThisItem.ID),LookUp(お気に入り,mail=User().Email).hozon_ID))=true,false,true)

Text

好きな文字列を指定してください。
例えば、「ブックマーク」や「保存」など

Text
"お気に入り"

Power Apps お気に入りに設定した項目だけを抽出するギャラリーを作成

お気に入りに追加した項目を表示するギャラリーを作成していきます。

ギャラリー「Items」

Filter(Split(LookUp(【SharePointのリスト名】,mail=User().Email).hozon_ID,”,”),Not(Value=””))

LookUp関数でログインユーザーの項目だけを絞り込み、Split関数で「,」ごとにテーブルに置き換えています。
さらにFilter関数で空白の項目をNot関数で除外してテーブルを作成しています。

Items
Filter(Split(LookUp(掲示_お気に入り,mail=User().Email).hozon_ID,","),Not(Value=""))

ギャラリー内のテキストボックス 主キー

ThisItem.Value

ThisItemでItem内の項目を取得します。

Text
ThisItem.Value

ギャラリー内のテキストボックス それ以外の項目

LookUp(【SharePointリスト名 ここではマスタが格納されているリスト名を入力】,Value(ThisItem.Value)=ID).【取得したい列名

Items内に格納されているhozon_IDとマスタのIDで一致する項目の列をLookUp関数を使用して取得しています。
下記のコードではタイトルを取得していますが、LookUp関数を使うことで【取得したい列名】を変更すれば度の列も取得できるようになります。

Text
LookUp(掲示板アプリ_マスタ,Value(ThisItem.Value)=ID).タイトル
Split関数を使用して別のテーブルに格納されているIDをLookUp関数で絞り込む全体像

コメント