はじめに
みなさま、さまざまな申請を手作業で処理するの、大変じゃないですか?
メールで申請を受け付け、内容を確認し、Excelに記載、フィードバックをメールで……エトセトラエトセトラ
「この作業、ちょっとでも楽にならないかな……」と思ったことがある人は多いはずです。
楽になります、ちょっとでも!!
一気に全部やろうとすると大変なので、少しずつ、スモールスタートでやっていきましょう。
今回は、「Teamsグループチャットに自動でメンバー(担当者・申請者)を追加する」 をやります。
わたしが一番実装するのに苦労したパートだからです。
他の機能も時間があれば書いていこうと思います。
また、私はまだひよっこエンジニアなので、「もっとこうやったらいいよ!」というアドバイスがありましたら、ぜひ教えてください!!!!!!
簡単な結論
- Teamsグループチャットにメンバーを追加するには、Office365ユーザーの「ID」が必要!
- グループチャットを作成するときに追加したいメンバー全員のIDを格納した変数を入れればOK

(※メモの内容は一旦無視してください)
やりたいこと/背景
- 申請があったら申請ごとにTeamsグループチャットができる
- グループチャットには、固定メンバーとそうじゃないメンバー(申請者とか)がいる
- グループチャットに自動でメンバー登録したい!!(これがメイン)
構成
- Forms(申請窓口)
- SharePointリスト(申請内容記録)
- Teamsグループチャット(申請者と担当者のやり取り)
Forms
申請の窓口をFormsにしました。Forms、便利です。
Power Appsより実装難易度も低く、メンテナンスもしやすいな~と個人的に感じています。
「なにから始めたらいいの!?」という方は、Power Appsではなく、まずはFormsを使ってみることをおすすめします。
非常にシンプルな構成です。とりあえず最低限必要な情報だけ入れてもらいます。
SharePointリスト
Formsの回答(申請)を記録するリストです。
こちらもシンプルに、Formsの質問の通りに作りました。

Power Automate作成
では本題です。
トリガーは「Forms」の「新しい応答が送信されるとき」で、
対象のフォームは先ほど作成したものです。

改めて、今回の登場人物(ペルソナ)は以下の通りです。
- 申請受付担当者(複数名、固定)
- 申請者(1人、案件ごとに違う人)
- 申請者の関係者(人数不明、メールのCCに入れるような人)
面倒なのは「申請者の関係者」なので、今回は一旦上2つを実装してみようと思います。
申請者の関係者も含めたverは時間と気力があれば改めて記事にしようと思います。
変数を用意
申請者や、受付担当者の情報を格納する変数を用意します。
最初に、「グループチャットメンバーをまとめて格納する」変数を作成しておきます。

ざっくりとした構図として、
「グループチャットメンバー」を入れる変数を作成
↓
「申請受付担当」を入れる変数を作成
↓
「申請者」を入れる変数を作成
↓
「申請受付担当」と「申請者」を合わせた文字列を「グループチャットメンバー」変数に格納
↓
「グループチャットメンバー」変数をTeamsグループチャット作成の際に使用
となります。
申請受付担当分を作ります。
受付担当は固定ということにして、今回は2名にしてみます。

ちょっと見にくいですが、セミコロン区切りでメールアドレスを入力します。
また、一番最後にはセミコロンはつけないように注意してください (あとからsplitする際にちょっとめんどくさいからです)
続いて、上記の文字列(メールアドレス)をセミコロン区切りにして、配列に格納します。

「値」に書いてある関数は以下の通りです。
split(variables('受付担当'),';')
ここまでのフロー図

Formsの応答取得、SharePointリストに記載の部分は説明を一旦省きます。
このあと、Forms「応答の詳細を取得する」から、申請者の情報を取得し、変数に格納します。
申請者情報
まず、「Office365ユーザー」の「ユーザープロフィールの取得」アクションを選択します。
「ユーザー」部分には、Formsの「メールアドレス」(申請者のメールアドレス)を入れます。

「変数」の「文字列変数に追加」を選択します。
グループチャットに追加するメンバーをまとめて格納している変数(画面上の「チャットメンバー」変数)に、ユーザープロフィール取得で取ってきた「ID」を入力します。
このとき、末尾にセミコロンを入れるのを忘れないようにしてください。
(このあと他のID(申請受付担当者など)が入ってくるため、セミコロンで区切る必要があります)

これで申請者の情報は入りました。
受付担当のデータを取得するまえに
先に結論を書くと、フローの作成者(実行者)が受付担当の中にいる場合、「申請者情報」取得のときと同じ方法ではエラーになります。 (私がそうなっただけかもしれませんが……)
そのため、まず先に「自分(実行者)の情報」を取得し、「申請受付担当」と重複していないかチェックする必要があります。
申請受付担当情報
というわけで、先に自分の情報を取得しておきます。
「Office365ユーザー」の「マイプロフィールの取得」を選択します。

複数いる申請受付担当を1人ずつ、実行者と重複していないか確認をし、重複していなければ文字列変数(チャットメンバー)に追加します。
ループ処理を入れます。申請受付担当者の数だけループ処理を行いたいので、このように設定します。

ここで条件分岐を行います。
実行者と申請受付担当者が同じか、そうでないか、の分岐です。
わかりにくいですが、「マイプロフィールの取得」のIDと、「ユーザープロフィール情報取得」のIDを比較しています。

Trueの場合(=実行者と受付担当者が異なる場合)に、「チャットメンバー」に「ユーザープロフィール」のIDを追加します。申請者のときと同じように、末尾に「;」(セミコロン)をつけることを忘れないようにしてください。

最終処理
これで申請者と申請受付担当のIDが入りました。
しかし、この状態だとまだエラーになります。
現在、文字列を連結させていますが、今の状態だと、
ID1;ID2;ID3;ID4;
となっています。
Teamsのグループチャットにメンバーを追加する際、「;」区切りでユーザーを追加しようとするので、これだと、
「ID1さん、ID2さん、ID3さん、ID4さん、の後ろにまだもう1人いる!」と判断され、
「いやでも誰もおらんけどな……」とエラーになります。
きっともっといい方法があるのだと思うのですが(ぜひ教えてください!!)脳筋な私がたどり着いた実装方法は以下の通りです。
その後「最終系」変数に、「チャットメンバー」文字列変数を整形して、格納します。

最終系の「値」に入っている式は以下の通りです。
substring( variables('チャットメンバー'),0,sub(length(variables('チャットメンバー')),1))
本当にこれでいいんでしょうか……絶対もっといい方法があると思います……。一応動きます……。
簡単に言うと、最後の1文字を消すという処理をしています。
これで、先ほど問題になっていた
ID1;ID2;ID3;ID4;
が
ID1;ID2;ID3;ID4
になり、4人がグループチャットに追加されるメンバーとして認識されます。
Teamsグループチャットに追加
ここまでくればあとは簡単です。
このように、「チャットの作成」では、「セミコロンで区切られたユーザーのID」が必要と書いてあるので、先ほど整形した「最終系」を入れます。

このようにタイトル部分をSharePointリストのIDや案件名にしておくとパッと見でどの案件かわかり、管理しやすいかもしれないですね。

ちなみに
フロー作成者(所有者?)は勝手に追加されちゃうみたいなので、テストする際は気をつけてください。
わたしはFormsの申請を自分でやったせいで、「ID重複しとるけど……」ておこられました。
(IDに重複がなくても勝手に追加されちゃうから結果として重複判定になったのかな……)
おわりに
今回、わたしがこのフローを作成したのは社内の審議があまりにも手作業で大変だ~~!という声を聴いたからです。
特に実装が難しかった(というか情報が錯綜していて困った)ので、まずここを記事にしましたが、簡単にまずExcel→SharePointリストにするだけでもだいぶ変わるのではないかなと思います。
開発のコツは一気に全部作り上げようとせず、小さいところから作成し、あとから肉付けすること(って偉い人が言ってた)なので、できそうなところからやってみてください。私もがんばります。
本当はこのフロー、もっといろんな機能があります。
- 関係者(CC)がいる場合、関係者も一緒にグループチャットへ追加する(これは冒頭でちょっと書きましたね)
- ステータスが「完了」になったら、自動で申請者(と、関係者)をチャットから退室させる
- グループチャットに投稿する際、申請者が提出した添付ファイルも一緒に載せる(権限設定つき)
- なんならSharePointリストのリンクも載せる(権限設定つき)
などなど……
機会があればちょっとずつ書いていこうと思います。将来の私のために。
ちょっとでもこの記事で私みたいに困っている人が減りますように……。





