欲しいアプリは自分で作る!

Power Platform や Azure などを利用して作成した業務アプリや趣味アプリなどをご紹介します。

Power Apps でメール列を用いて Gallery にユーザー名を表示させる方法(と Power Apps でよくありがちな型のエラーのお話)

初学者向けです。
前回の記事(https://jn.hateblo.jp/entry/2020/11/25/182830)の続きのような内容なので、先に前回の記事をご覧いただくと本記事のご理解が早まるかと思います。




どうも、じゅんじゅんです。



前回、Teams × Power Apps でユーザーの情報をメール列(メール形式のテキスト列)で格納しました。
そして、フォームでは Office 365 ユーザー コネクタを用いて特定部署のユーザーをドロップダウンで選択させました。
あの時、ドロップダウンの表示はユーザー名でしたが、テーブルにはメールアドレスのみを登録していました。
つまり、テーブル上ではユーザーの情報はメールアドレスだけだったんですね。

そうなると、次は
「テーブルにユーザー名がないのに、Gallery にどうやってユーザー名を表示させるのか?」
という疑問が湧いてくるのではないかと思います。

ということで、今日はこれを実現してみたいと思います。
環境は今回も Teams × Power Apps とします。



事前準備

テーブルはあえて前回のものとは変えて、今回は情シスさんをターゲットに他部署からの問い合わせ内容をメモするアプリとします。

テーブルはこんな感じ。
ユーザー情報は "userEmail" というメール列(メール形式のテキスト列)で格納しています。
他の列は今回のポイントではないので、気にしなくて OK です。 f:id:jn-kodama:20201130225814p:plain

上記のテーブルを用意すると、アプリは自動でこんな感じになると思います。
左側の Gallery のメールアドレスの部分を、ユーザー名に置き換えるのが今回のゴールです。 f:id:jn-kodama:20201130230321p:plain


実装方法

これを実現するには、今回も "Office 365 ユーザー コネクタ" を利用します。
簡単に言えば、このコネクタを用いて該当のユーザーを検索し、そのユーザー名を抽出する、という処理を実装します。


まずは前回と同様に、データのタブから Office 365 ユーザー コネクタを追加します。

そういえば前回書き忘れていましたが、はじめてこのコネクタに接続しようとすると Web ブラウザが起動して以下の画面が表示されるかもしれません。
その場合は画面右上の検索窓から本コネクタを検索して選択し、"作成" をクリックしてください。
接続済みになれば OK です。Teams 上のアプリを一度保存して開きなおし、再度コネクタの追加を試みてください。 f:id:jn-kodama:20201130230654p:plain f:id:jn-kodama:20201130230816p:plain

追加されました。 f:id:jn-kodama:20201130231251p:plain

早速、メアドが表示されているラベルを選択してみましょう。
Text プロパティに "ThisItem.userEmail" が設定されていることが分かります。 f:id:jn-kodama:20201130231556p:plain


で、ここでやりたいことは "メアドに該当するユーザー名を Office 365 ユーザー コネクタで抽出する" なので、以下のように記述します。
Office 365 ユーザー コネクタでユーザーを検索するのは、前回も使用した SearchUser 関数。
SearchUser 関数で searchTerm プロパティを用いるとメアドで検索できます。
https://docs.microsoft.com/ja-jp/powerapps/maker/canvas-apps/connections/connection-office365-users#searchuser

First(Office365ユーザー.SearchUser({searchTerm:ThisItem.userEmail})).DisplayName

f:id:jn-kodama:20201201104856p:plain

SearchUser 関数の戻り値、つまり検索結果は1件だろうが何件だろうがテーブル型で返ってきます。
今回はメアド検索で1件のみ結果が返ってくるので、テーブルから First 関数でレコードを抽出し、さらにそこからユーザー名(=DisplayName)のフィールドを選択しています。

補足資料になるか分かりませんが、こんなイメージです。 f:id:jn-kodama:20201201105132p:plain


テーブル、レコード、フィールドとは?

テーブル、レコード、フィールドはこんな階層関係です。

各々のコントロールや関数がどのレベルを扱うのかが理解できると、アプリ作成が捗ると思います。 f:id:jn-kodama:20201201110255p:plain


アプリを作成していると、しばしば "型" の違いでエラーに見舞われると思います。

型の違いというと、何となく「"テキスト型" か "数値型” か?」のように、同じフィールドのレベルの型のように思いがちです。
しかし、実際には階層の違いによる型のエラーである可能性も十分にありますので(というか自分が遭遇するエラーはこのエラーがほとんどかも)、「○○型が必要です」というエラーが発生した場合は、一度冷静にそれぞれの型を考えてみるとよいと思います。


下図は、テキスト型が必要な箇所にレコード型を設定したエラーの例。
この場合、レコードに対してテキスト型の列を指定し、フィールドを抽出する必要があります。 f:id:jn-kodama:20201201111006p:plain


まとめ

今回ご紹介した方法自体は単純なものですが、そこにデータの理解が加わると、より一層理解が深まり、応用が利くと思います。

初めのうちは手順をコピペして作るで良いと思いますので、慣れてきたらステップアップとして型などのデータの理解を深めてみてもよいかもしれません。



欲しいアプリは欲しい人が作る時代へ。

何かの参考になれば幸いです。