Power Apps で投票ツールを作る
※ データや見た目は一部記事用に改変しています
作ったもの
こんな感じの投票ツールを Power Apps で作りました
👍 ボタンを押すと投票できて、投票数(青文字)を押すと投票したユーザーの一覧を見ることができるツールです
データの持ち方
SharePoint のリストを DB にしました
データの持ち方はこんな感じです
カラム | タイプ | 説明 |
---|---|---|
番号 | 1行テキスト | 項目の番号を格納します |
項目名 | 1行テキスト | 項目の名前を格納します |
ユーザー | 複数行テキスト | 投票したユーザーのメールアドレスを, 区切りで格納します |
投票数の持ち方は色々あると思うのですが、今回は投票したユーザーを一覧できるようにしたかったのでこんな風にしました
Office365 コネクタを使って、メールアドレスからユーザの名前と写真を引っ張ってきて表示します
Power Apps 側
一覧部分は 挿入 > ギャラリー
から「ギャラリー(Gallery」を挿入してアイテムをループで表示します
投票数が多い > 番号が早い 順で表示する
投票数(ユーザー)の持ち方のせいで、ここでけっこう苦戦しました...
SQL 慣れてる人はちょちょい!とできてしまうのかも😅
最終的なコードはこんな感じです
Sort(
Sort(
'リスト名',
番号,
Ascending
),
If(
IsBlank(
Trim(
Substitute(
Substitute(
PlainText(ユーザー),
Char(10),
""
),
Char(13),
""
)
)
),
0,
CountRows(
Split(
Trim(
Substitute(
Substitute(
PlainText(ユーザー),
Char(10),
""
),
Char(13),
""
)
),
","
)
)
),
Descending
)
ポイント① 二重で Sort する
投票数が多い > 番号が早い 順で表示したいので、二重で Sort します
優先度が高いもの(今回で言うと「投票数」)を外側にします
ポイント② 投票数「0」の出し方
はじめは ユーザーカラムの中身を Split => Split したものを CountRows で個数数えて投票数を出す
という風にしていたのですが、 Split だと空の場合も 1 件としてカウントされてしまいます
そこで、 If
を使って「空白の場合は 0 件」という条件を追加しました
空白の判定にはIsBlank
を使う + ユーザーカラムは複数行テキストなので改行・空白を取り除く ようにしました
改行は CR = Char(13)
LF = Char(10)
です
投票数の算出ロジックは、投票数を表示している箇所・投票数によってテキストの色を変えている箇所も同様です
※ こちら参考にさせていただきました
https://qiita.com/yamad365/items/4f0bec10ae57368173d3
投票する
👍 ボタンを押して投票できるようにしています
Office365ユーザー
コネクタのMyProfileV2()
を使うと、アプリケーションの画面を見ているユーザーの情報を取得できます
Office365ユーザー.MyProfileV2().mail
でメールアドレスを取得して、 SharePoint のリストのユーザーカラムに書き込みます
コードはこんな感じ
Patch(
[@'リスト名'],
LookUp(
[@'リスト名'],
番号 = ThisItem.番号
),
If(
IsBlank(
LookUp(
[@'リスト名],
番号 = ThisItem.番号
).ユーザー
),
{ユーザー: Office365ユーザー.MyProfileV2().mail},
{
ユーザー: Concatenate(
LookUp(
[@'リスト名'],
番号 = ThisItem.番号
).ユーザー,
",",
Office365ユーザー.MyProfileV2().mail
)
}
)
)
心残り
投票したときにリアルタイムで投票数・表示順が変わりますが、そのときに Sort
が実行されるので表示がちらついてしまいます
不格好なのでなんとかしたかったのですが、Sortが完了するまで表示しないようにするやり方がなさそう(PowerAppsのタイミングに任されている)だったので諦めました
もしこうするといいよ!という方法ご存知の方いらっしゃいましたら、是非教えてほしいです〜〜
Author And Source
この問題について(Power Apps で投票ツールを作る), 我々は、より多くの情報をここで見つけました https://qiita.com/y-miine/items/6a31000f319d61ee231c著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .