memomoji | nanamoji

Microsoft365周辺、Power Appsの勉強、備忘録

問合せアプリで、「自分以外の人にも連絡ほしい」に対応した

Power Apps で、簡易的な問合せ受付アプリを作成して運用しています。
依頼内容に対する連絡先に入力した人以外も含めて欲しいという要望があり、やっと対応できたのでメモを残しておきます。思ったより紆余曲折ありました。

「連絡先」として複数ユーザーの列を作成する

SharePoint Listsに「連絡先」列を追加し、複数ユーザーの選択を可にします。
アプリのEdit画面にも追加しておきます。

アプリの「連絡先」のデフォルトを設定する

「連絡先」の DefaultSelectedItems に下記の内容を設定します。

 {
  Claims: "i:0#.f|membership|" & Lower(User().Email),
  Email: User().Email,
  DisplayName: User().FullName
}   

こちらの記事を参考にさせていただきました。ありがとうございます。
Power Apps で SharePoint のユーザーとグループ列に既定値を設定する方法 - Office 365 の豆知識

私の環境では Claims と Emailとは違うのですが、欲しい内容は取れているようなのでとりあえず良しとします。

連絡先に入っているユーザーのメールアドレスを別欄に取り出す(フロー)。

元々アプリには「自分が登録した依頼」が表示される画面を作っていました。
登録者をログインユーザーのEmailでFilterしたコレクションがあるので、ちょっと条件を変えたらいけるかと思ったのですがうまくいきません。ユーザー列はリストの中にリストが入っているようなイメージなので、私の力量で Power Apps 上で実現するのは難しそうだなと早々に路線を変更し、SharePoint Lists に新しい項目が追加されたときに連絡先列のユーザー情報から Email 部分を取り出して別の列に登録するよう、Power Automateでフローを作成しました。

益森さんの記事を参考にさせていただきました。 ありがとうございます。
(そもそもこの記事を拝見したので、今回の変更が実現できました。)
SharePoint リストのユーザー列 (複数選択を許可) を使って、Power Automate でメール通知する - Qiita

フローはこちら。

SharePoint Listsに OtherEmail という1行テキストの列を作成して、そこに「連絡先(OtherMember)」に入っているユーザーの Emailを格納します。
ですがここで問題が。Power Appsで User().Email としたときの結果は UPN になるのですが、Power Automateで @{item()?['Email']} と指定すると、メールアドレスが返ってきます(それで最初の連絡先のデフォルトが User().Email でうまくいったのかもしれません)。
なので、「選択」では @{item()?['Claiml']} と指定しました。
007@xxx.jp がUPN、James.Bond@xxx.jp が Email です。

そうするとこんな感じで返ってきます。

[
  "i:0#.f|membership|007@xxx.jp",
  "i:0#.f|membership|009@xxx.jp"
]

次の「結合」ではそのまま「,(カンマ)」で区切って結合。

最後に「作成」で、余分なところをReplaceしてやります。

replace(body('結合'),'i:0#.f|membership|','')

自分が連絡先に入っている依頼を抽出する

「依頼履歴を見る」ボタンのOnSelectを以下のように書き換えます。

ClearCollect(colstatus,Filter(irailists,User().Email in otherEmail));
Navigate(ReviewScreen,ScreenTransition.None)

ログインユーザーのEmailが otherEmail に含まれるものを抽出します。委任の警告が出ますがとりあえず無視します。現在の問合せ数でいけば委任の問題が発現するまで数年かかるはずですので、それまでには何かしらの方法で解決しているでしょう。

連絡先のユーザーとチャットするボタンを設置

管理者用の詳細画面に、「依頼者とのチャットを開く」ボタンを設置しました。
ボタンの OnSelectに下記のように記載します。

Launch("https://teams.microsoft.com/l/chat/0/0","users", DataCardValue1 ,"topicName","依頼受付","message",DataCardValue2)

DataCardValue1 は、otherEmail、DataCardValue2 は受けた依頼のタイトルや番号などを入れています。
このボタンを押すと連絡先のユーザーとのグループチャットが開くので、問合せ内容に不明点があった場合など楽ちんです。

管理者用のボタンを設置する

上記の管理者用詳細画面は、特定の人だけが表示されるボタンから入れるようにしています。
こちらの記事を参考にさせていただきました。ありがとうございます。

【小ネタ】PowerAppsでログインユーザーにより表示/非表示を切り替えるボタンを配置する - Qiita

まとめ

今回も先人たちのおかげで業務改善が捗りました。感謝しています。
依頼者個人ではなく複数の人に対応結果を知らせて欲しいという要望は、割とあるんじゃないでしょうか。
結果としては意外と簡単なちょこちょこで解決できましたが、ちょこちょこでもいくつかあると途中でつまづいたっきり8割の出来で放置…というのはもったいないですよね。解決できて嬉しいです。