PowerAppsで電話番号からユーザ情報を引っ張るをやってみた。
PoweAppsでユーザ情報を引っ張れるらしいので、電話番号から人の情報を引っ張れる機能を作成してみました。素人が作ってますので、完全ではないので、この記事を見たいい人がもっといい方法を編み出してくれると嬉しいです。
なぜ完全じゃないか。
Office365ユーザー.SearchUser()というものがあるのですが、これが持ってこれるユーザ数は最大で999名と決まっておるようなのです。
ためしに、ギャラリーのItemに以下を追記してみます。
Search( ( Office365ユーザー.SearchUser() ),TextInput1_2.Text,"mobilePhone" )
上記は、TextInput1_2.Textの値とOffice365ユーザーの中から"mobilePhone"と同じ奴を引っ張ってきてねという意味になります。部分一致(0120ーxxxx-xxxxなら12でも引っ張ってくる。)です。
これをいったん限界(999件)までデータを引っ張ってくるようにします。
{top:999}といれると999件引っ張ってくるようです。
Search( ( Office365ユーザー.SearchUser( {top:999} ) ),TextInput1_2.Text,"mobilePhone" )
なぜOffice365ユーザー.SearchUserV2()を使わないのか。
Search( Office365ユーザー.SearchUserV2().value,TextInput1_2.Text,"mobilePhone" )
ある程度勉強するとユーザ情報を引っ張るときに、電話番号検索の場合はSearchUserV2を使う方がいいのでは?と思われるかもしれませんが。
これはある意味正しいですが、これにも999件の壁が存在するのです。
正確に言うと、SearchUserV2()というのは、Office365ユーザー(つまりazureだと思う)のなかの最初の999件を検索する事しかできません。
Office365ユーザー(つまりazureだと思う)が999人以上いた場合(うちの場合)は、999人目以降は絶対引っ掛かりません。
SearchUser()の方は、Office365ユーザー(つまりazureだと思う)を一通りなめて、条件に合致した人を最大で999件まで引っ張ってくれるようです。
個人的にこの違いは大きいです。
他のサイトでは999件以降を検索する方法がないので自分なりに以下の様に考えました。
この違いを利用して、SearchUser()で999件のユーザをいったんPowerAppsで呼び出して、その中から再度電話番号で検索するという荒業で約2万名からの電話番号を検索できるようにしました。
約26個(アルファベットa~zにマッチするユーザを999件)のギャラリーを作り、
Itemに以下を突っ込む。
Search ( ( Office365ユーザー.SearchUser(){searchTerm:Trim("a"),top:999} ) ) ,TextInput1_2.Text,"mobilePhone" )
→ユーザ名に”a”がある人を抽出するこれをa~zまで作る。
最後に検索結果表示用のギャラリーをつくり、Itemに以下をいれる。
If(!IsEmpty(Gallery_a.AllItems),Gallery_a.AllItems,!IsEmpty(Gallery_b.AllItems),・・・・・,!IsEmpty(Gallery_z.AllItems),Gallery_z.AllItems)
※すべてが空かどうかを確認して値があればそれを取得する形です。
突っ込みどころのおおい仕組みですが、
複数検知しても電話番号からユーザを知りたいだけなので、これで十分かなと思います。