Microsoft FormsとPower Automateを使って、アンケート結果からランダムに一つ取得してTeamsに投稿するアプリを作ってみた（後編）

前回に続き、今回は後半のTeamsへの投稿までやっていきます。

前編はこちら↓
https://qiita.com/flutter_daisuki/items/a33fb58283d3780830e8

前半では、
>１、投稿できるフォームの作成
２、投稿された時に検知して、投稿内容を取得しSharePointリストに保存

までしました。

## 目的
グループメンバーがフォームから投稿したテーマの中からランダムで一つ取得して、MTG前にチャネルに投稿してくれるアプリを作りたい

## 背景
会社では毎週決まった時間に所属グループ全員が集まるMTGがあり、そこで3,4人に分かれたブレイクアウトルームを作り、
コミュニケーションを取る時間を設けています。
毎週グループリーダーがその場でテーマを決めるのは大変なので、メンバーから募集を募ることにしました。
そこで、メンバーにはフォームから自分が考えたテーマを投稿してもらい、集まったテーマ一覧の中からランダムに一つピックアップして、MTG時間に投稿してくれるようしたいと思います。


## 使う技術・ツール
【１】Microsoft Forms
　→ メンバーがテーマを投稿するためのフォームを作るのに使います

【２】Power Automate
　→ 投稿されたテーマをSharePointリストに追加する処理と、Teamsのチャネルに自動投稿する処理に使います。

【３】Microsoft Teams
　→ ここのチャネルに選ばれたテーマを投稿するようにします

【４】Share Point
　→ Formsから取得したテーマをリストに保存するのに使います

## 実装
#### ３、溜まったテーマ一覧の中からランダムで選んで、毎週決まった時間にTeamsのチャネルに投稿してくれるようにする
先ほどとはまた違った新しいワークフローをPowerAutomateで作成して、Teamsに投稿するまでの処理をやっていきます。
大まかにやる内容は
>１、まずはどの頻度・スケジュールで実行を行うか決める
２、テーマ一覧が保存されているSharePointにアクセスして全て取得
３、その中からランダムで一つ選んで、Teamsに投稿
４、選ばれた投稿は最後に削除する

ここまでの処理をやっていきます。

まずは先ほどと同様に「作成」を選択して、今回は「**スケジュール済みのクラウドフロー**」を選択します。
![スクリーンショット 2023-03-11 14.39.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812049/f97ed82a-cd41-ade8-b08b-8a5151a11278.png)

選択するとモーダルが表示されるので、適当なフロー名、開始日と時間、繰り返しの間隔を決めます。
今回は毎週火曜日の10時に投稿されるようにしました。
![スクリーンショット 2023-03-11 14.39.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812049/6642ccfc-cc81-9329-c8ab-f0806c01663e.png)

作成すると、ワークフロー作成画面に移ります。
あらかじめ先ほど設定した時間スケジュールのフローが登録されてます。
まずは、SharePoint上のリストからテーマ一覧を取得しますので、検索エリアに「share point」と入力して、
検索結果に出てくる「**複数の項目の取得**」を選択します。
![スクリーンショット 2023-03-11 14.44.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812049/d664da7e-0f9a-f7e4-93bb-7936ed95d9aa.png)

先ほどと同じようにサイトのアドレス名とリスト名を選択肢から選んでください。
必須じゃない下の二つの入力欄は空白で大丈夫です。
![スクリーンショット 2023-03-11 14.48.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812049/8f7c2503-20bc-e7ab-a824-bab10cf621a3.png)

次に取得したデータ（テーマ）の数を変数に入れます。
新しいステップから「変数」と入力すると「**変数を初期化する**」というのが出てくるので選択します。
適当な名前（変数名）と種類を「整数」にします。
値は式から「**length**」というのを選択してください。
![スクリーンショット 2023-03-11 14.51.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812049/7d5a34e3-7e2d-efe8-97bd-8001974b7479.png)

lengthの丸括弧の中には動的なコンテンツにある「**value**」を入れてください。
OKボタンを押すと「値」のところに追加されるかと思います。
これでデータの数を取得して変数として使うことができるようになります。
![スクリーンショット 2023-03-11 14.51.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812049/7d841b42-f885-1792-ae02-edb0607f1f2c.png)

次は先ほど作成した変数（データの数）の範囲でランダムな値を取得するようにします。
新しいステップをクリックして、もう一度「変数を初期化」を選択
同じく、名前（変数名）と種類を「整数」　にして、先ほどはlength関数を使いましたが、今回はrand関数を使用します。
タブを「式」に変えて、入力欄に「**rand()**」と入力します。
rand関数には最小値と最大値の二つの引数を入れていきます。
![スクリーンショット 2023-03-11 14.57.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812049/7b052238-c768-ad8e-a5f4-e8510438c4ed.png)

再度タブを「動的なコンテンツ」に変えて第一引数に１、第二引数には先ほど作成した変数（今回の説明だと「投稿数」）を入れます。
こうすることで、1からデータの数の間のランダムな値を取得できます。
例）データの数が6つの場合は、1~6の中から値を一つランダムに取得される
![スクリーンショット 2023-03-11 15.03.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812049/9c1d0c8e-7776-f811-a12a-e0ae1951c148.png)
ここで取得したランダム数をもとに、実際のデータを参照するのですが、データを参照するときは1からではなく0から始まります　（例えば一つ目の値を参照したいときはdata[1]ではなく、data[0]になる）ので、このランダム数に-1をする必要があります。

-1した値を変数に入れます。
再度新しいステップをクリックして、「変数を初期化する」を選択
名前と種類を「整数」にして、今回は「**sub**」関数を使用します。
第一引数に先ほど作成した変数（今回の説明だと「**ランダム数**」）、第二引数に減算する値なので1を入れます。
今回はデータへの参照用として使うので変数名をインデックスにしてます。
![スクリーンショット 2023-03-11 15.40.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812049/247c2dda-7d6f-cd2d-f704-94ef281005ec.png)


作成したインデックスに紐づくデータを取得します。
また新しいステップをクリックして、「変数を初期化する」を選択
適当な名前（変数名）と種類を「文字列」にして、動的なコンテンツから「**value**」を選びます。
すると関数（fx）の中には「outputs...」というが表示されると思います。
![スクリーンショット 2023-03-11 15.14.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812049/3f8bf9c2-1558-e728-3002-5ebd297e8f54.png)

このままだとデータ一覧（複数の値）を取得することになるので、fxに続きを書いていきます。
語尾に[]を入れて、先ほど作成した変数の「インデックス」を中に入れます。
これでインデックスに紐づくデータを取得できましたが、もうワンステップ必要です。
これだとオブジェクトデータを取得して、名前とか追加日とか必要ないデータも含まれてて、データの中からテーマだけを取得したいので、さらに語尾に「**['Title']**」を追加します。
※Titleを入れることで、そのリストのタイトルを取得できます。
![スクリーンショット 2023-03-11 15.17.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812049/484079eb-9f69-40b8-05a0-f6c51e6740e5.png)
これでインデックスに紐づくデータ、その中の今回使いたい「テーマ」を取得することができました。

あとはTeamsに投稿するだけです！
新しいステップをクリックして、検索エリアに「teams」と入力すると、「**チャットまたはチャネルでメッセージを投稿する**」が出てくるので選択します。
![スクリーンショット 2023-03-11 15.22.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812049/968832ea-821f-0013-4c17-c4e4577491dd.png)

投稿者はユーザーもしくはチャットボットか選択できます。今回はユーザーにしました。
投稿先もチャネルかグループチャットのどちらかを選択できます。
TeamとChannelは投稿したいチャネルをサジェストから選択してください。
Messageに投稿内容を記載することができます。
先ほど作成した変数（今回の説明だと「選ばれたテーマ」）を埋め込んで、前後に適当な文言を入れました。
ちなみにSubjectにはこの投稿のタイトルを入れることができます。
![スクリーンショット 2023-03-11 15.25.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812049/3af0af86-919d-46de-4ec5-e8b27bc9a23a.png)
これで全てTeamsへの投稿までの処理ができました！
あともう少しです。
***
#### ４、選ばれたテーマは次回以降出てこないように削除する
最後に選ばれたテーマは次週以降は選ばれないようにしたいので削除するようにします。
フローは先ほどまで作成したものの続きに書いていきます。

まずは削除するIDを取得して変数に入れます。
新しいステップをクリックして、「変数を初期化する」を選択して、いつも通り適当な名前（変数名）と種類を「整数」にします。

IDの取得方法はテーマを取得した時と同じで、データ一覧の中からインデックスで一つに参照して、その中のIDというKeyの値を取得するようにします。
詳しい取得方法は「選ばれたテーマ」という変数を設定したところを見てみてください。語尾が['Title'」から['ID']に変わっただけです。
![スクリーンショット 2023-03-11 15.49.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812049/a6a938e9-c680-7551-0c41-54ca57a18b76.png)

取得したIDを使って、SharePointのリストから削除する処理をします。
新しいステップをクリックして、検索エリアで「sharepoint」と入力、「**項目の削除**」を選択します。
![スクリーンショット 2023-03-11 15.32.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812049/3c7ca435-06d0-bc66-d832-dd58fd7e3caa.png)

前にやったようにサイトのアドレスとリスト名を入れて、IDには先ほど作成した変数（今回の説明だと「削除するID」）を入れます。
![スクリーンショット 2023-03-11 15.51.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812049/aa3c6b30-ca99-5ff1-3189-d0b9a452f14d.png)
以上で一連の処理を作ることができました。
実際に動かしてみましょう。

![スクリーンショット 2023-03-11 15.54.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812049/14ea8d50-03c4-a7c8-36d4-ed7beb6f7df0.png)
![スクリーンショット 2023-03-11 15.54.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812049/6032b0a4-70c4-1daa-2d9f-5acde5e1e96f.png)
無事全て問題なく動作しました！
テーマの中からランダムで一つ取得できてますし、Teamsのチャネルにも投稿されてました。
またSharePointのリストにも該当のテーマが削除されてました。

以上が今回のアプリの作り方です。
ノーコードツールって初めは慣れないですが、使い続けていくとめちゃくちゃ便利です。
***
このアプリに更に新しいフローを作りました。
追加機能編はこちら↓
https://qiita.com/flutter_daisuki/items/a77121faa3fbe3139f37