Power AutomatePower Platform

【Power Automate】Teamsチャネルの投稿をSharePointリストに転記する

今回の記事では、過去にTeamsチャネルへ投稿された内容をSharePointリストに転記するフローを実装していきます。

これまでに投稿されたメッセージをまとめて転記・整理したい場合や、投稿内容のバックアップを作成する場合にお使いください。

スポンサーリンク

実現したいこと

完成イメージは次の通りです。
下記のようなTeamsチャットに対してフローを実行すると、

Teamsチャネル画面

SharePointリストに投稿内容が転記されます。

転記先SharePointリスト

実装方法

SharePointリストの用意

フロー作成に取り掛かる前に、転記先となるSharePointリストを作成しておきます。

まずはSharePointリストを作成し、任意の名前を付けておきます。
(私の場合は「Teams投稿一覧」リストとしました。)

SharePointリストの作成

SharePointリストが作成できたら、列も作成しておきます。
(※ 列名は下表の通りに作成してください。列名が異なる場合、後からエラーが発生してしまいます)

列の作成
列名データの種類
createdDateTime日付と時刻(時間を含める)
lastEditedDateTime日付と時刻(時間を含める)
subject1行テキスト
body複数行テキスト(拡張リッチテキスト)
fromユーザーまたはグループ
reactionsCount数値
messageLinkハイパーリンク
スクロールできます

※ body列については、データの種類を「複数行テキスト」に設定した上で「拡張リッチテキストを使用」を「はい」にしておきます。

拡張リッチテキストの設定

手動トリガーの作成・設定

今回は手動トリガーで作成していきます。

手動トリガー

アクションのコピー・貼り付け

次に下記のコードをコピーします。(1行目右端のコピーボタンをご利用ください)

{"id":"4408512f-5e11-4046-9f6b-6edbeda7343b","brandColor":"#8C3900","connectionReferences":{"shared_sharepointonline":{"connection":{"id":"/providers/Microsoft.PowerApps/apis/shared_sharepointonline/connections/shared-sharepointonl-fd87a1ff-b982-4fa1-b9d6-aaaf563a5575"}},"shared_office365users":{"connection":{"id":"/providers/Microsoft.PowerApps/apis/shared_office365users/connections/8bf5610fb58e465ba2d5a1c531895206"}},"shared_teams":{"connection":{"id":"/providers/Microsoft.PowerApps/apis/shared_teams/connections/5b03efb8afa44f8f9a6baeda47eab776"}},"shared_teams_1":{"connection":{"id":"/providers/Microsoft.PowerApps/apis/shared_teams/connections/3bdeec61ac09485eb1f9edfa74ea42b9"}},"shared_sharepointonline_1":{"connection":{"id":"/providers/Microsoft.PowerApps/apis/shared_sharepointonline/connections/3a9c5a4dfcde44e3b452876d0eb0f8f9"}},"shared_office365users_1":{"connection":{"id":"/providers/Microsoft.PowerApps/apis/shared_office365users/connections/shared-office365user-e412c8d6-0f8f-4860-89b9-c5e5d8c0eb99"}}},"connectorDisplayName":"制御","icon":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDMyIDMyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPg0KIDxwYXRoIGQ9Im0wIDBoMzJ2MzJoLTMyeiIgZmlsbD0iIzhDMzkwMCIvPg0KIDxwYXRoIGQ9Im04IDEwaDE2djEyaC0xNnptMTUgMTF2LTEwaC0xNHYxMHptLTItOHY2aC0xMHYtNnptLTEgNXYtNGgtOHY0eiIgZmlsbD0iI2ZmZiIvPg0KPC9zdmc+DQo=","isTrigger":false,"operationName":"スコープ","operationDefinition":{"type":"Scope","actions":{"メッセージを取得します":{"type":"OpenApiConnection","inputs":{"host":{"connectionName":"shared_teams_1","operationId":"GetMessagesFromChannel","apiId":"/providers/Microsoft.PowerApps/apis/shared_teams"},"parameters":{"groupId":"xxx","channelId":"xxx"},"authentication":{"type":"Raw","value":"@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']"}},"runAfter":{},"description":"投稿一覧を取得","runtimeConfiguration":{"paginationPolicy":{"minimumItemCount":100000}},"metadata":{"operationMetadataId":"3310a8a9-0945-4921-ac68-f7c72f0fdf4c"}},"アレイのフィルター処理":{"type":"Query","inputs":{"from":"@outputs('メッセージを取得します')?['body/value']","where":"@equals(empty(item()?['deletedDateTime']), true)"},"runAfter":{"メッセージを取得します":["Succeeded"]},"description":"削除済み投稿を除外(エラー原因となるため)","metadata":{"operationMetadataId":"196c126f-69f8-40ff-8dcd-9296feaec788"}},"作成":{"type":"Compose","inputs":"@sort(body('アレイのフィルター処理_2'), 'createdDateTime')","runAfter":{"アレイのフィルター処理_2":["Succeeded"]},"description":"作成日(昇順)で並び替え","metadata":{"operationMetadataId":"4753a5a2-f58e-4572-9459-acb6ad9f164a"}},"Apply_to_each":{"type":"Foreach","foreach":"@outputs('作成')","actions":{"メッセージ詳細を取得する":{"type":"OpenApiConnection","inputs":{"host":{"connectionName":"shared_teams_1","operationId":"GetMessageDetails","apiId":"/providers/Microsoft.PowerApps/apis/shared_teams"},"parameters":{"messageId":"@items('Apply_to_each')?['id']","threadType":"channel","body/recipient/groupId":"xxx","body/recipient/channelId":"xxx","body/recipient/parentMessageId":"@items('Apply_to_each')?['replyToId']"},"authentication":{"type":"Raw","value":"@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']"}},"runAfter":{},"description":"各メッセージの詳細を取得","metadata":{"operationMetadataId":"078abd76-9f44-497b-897c-bf3f6aac56b6"}},"項目の作成":{"type":"OpenApiConnection","inputs":{"host":{"connectionName":"shared_sharepointonline_1","operationId":"PostItem","apiId":"/providers/Microsoft.PowerApps/apis/shared_sharepointonline"},"parameters":{"dataset":"xxx","table":"xxx","item/createdDateTime":"@outputs('メッセージ詳細を取得する')?['body/createdDateTime']","item/lastEditedDateTime":"@outputs('メッセージ詳細を取得する')?['body/lastEditedDateTime']","item/subject":"@outputs('メッセージ詳細を取得する')?['body/subject']","item/body":"@outputs('メッセージ詳細を取得する')?['body/body/content']","item/from/Claims":"@outputs('ユーザー_プロフィールの取得_(V2)')?['body/userPrincipalName']","item/reactionsCount":"@length(outputs('メッセージ詳細を取得する')?['body/reactions'])","item/messageLink":"@outputs('メッセージ詳細を取得する')?['body/messageLink']"},"authentication":{"type":"Raw","value":"@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']"}},"runAfter":{"ユーザー_プロフィールの取得_(V2)":["Succeeded","Failed"]},"metadata":{"operationMetadataId":"f105d423-55b3-4aef-af1c-16029b24ca7f"}},"ユーザー_プロフィールの取得_(V2)":{"type":"OpenApiConnection","inputs":{"host":{"connectionName":"shared_office365users_1","operationId":"UserProfile_V2","apiId":"/providers/Microsoft.PowerApps/apis/shared_office365users"},"parameters":{"id":"@outputs('メッセージ詳細を取得する')?['body/from/user/id']"},"authentication":{"type":"Raw","value":"@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']"}},"runAfter":{"メッセージ詳細を取得する":["Succeeded"]},"description":"投稿者の詳細を取得","metadata":{"operationMetadataId":"8ada6907-9d92-4ada-a43d-39fd8aced649"}}},"runAfter":{"作成":["Succeeded"]},"metadata":{"operationMetadataId":"beca4e2f-ab9b-449a-bd3b-90a93fd67af5"}},"アレイのフィルター処理_2":{"type":"Query","inputs":{"from":"@body('アレイのフィルター処理')","where":"@equals(item()?['messageType'], 'message')"},"runAfter":{"アレイのフィルター処理":["Succeeded"]},"description":"メッセージのみに絞込(システムメッセージを除外)","metadata":{"operationMetadataId":"0cf0f2f2-5c7f-4df8-b090-6a3d5c2de3d2"}}},"runAfter":{},"metadata":{"operationMetadataId":"26a3223b-2e88-4bb2-a6ac-f09581b85341"}}}

トリガー下の「新しいステップ」ボタンを押した後、自分のクリップボードから「スコープ」を選択します。
(※表示されない場合は、「自分のクリップボード」を選択した状態でCtrl + Vを押すと表示されます)

自分のクリップボード

接続エラー(警告アイコン)が表示されるため、既存の接続を選択するか新しい接続を作成してください。
※計4カ所あります

接続エラー
再接続操作

チーム・チャネルの設定(転記元)

接続が設定できたら、「メッセージを取得します」アクションと「メッセージの詳細を取得する」アクションの設定値を変更します。
「xxx」となっている部分を消去し、転記元のTeamsチーム・チャネルを指定してください。

「メッセージを取得します」アクションの設定変更
「メッセージの詳細を取得します」アクションの設定変更

SharePointリストの設定(転記先)

最後に、「項目の作成」アクションの設定値を変更します。
「xxx」となっている部分を消去し、最初のステップで作成したSharePointリストを指定してください。

「項目の作成」アクションの設定変更

フローの保存が成功すれば、操作は完了です。
テストを実行してみると、投稿内容がSharePointリストに転記できたことが分かります。

転記先SharePointリスト

フローの流れ

フローの流れ

フローの流れは下記の通りです。

フロー全体像
# アクション名動き
1メッセージを取得しますTeamsチャネルを指定して、投稿されたメッセージの一覧を取得します
2アレイのフィルター処理既に削除された投稿を除外することで、エラー発生を防ぎます
3アレイのフィルター処理 2システムメッセージを除外することで、エラー発生を防ぎます
4作成投稿を時刻順(昇順)に並び替えます
5メッセージ詳細を取得する投稿メッセージの詳細情報(メッセージへのリンクなど)を取得します
6ユーザープロフィールの取得 (V2)投稿者の詳細情報を取得します
7項目の作成上記 5, 6の内容をSharePointリストに転記します
スクロールできます

エラーを防ぐためデータ整形・詳細情報取得の処理を多く入れており、複雑に見えるかと思います。

ただ各アクションの処理自体はそこまで難しくないため、コピペした式やメモを見ながらご理解いただければと思います。

まとめ

Teamsチャネルへ投稿された内容をSharePointリストに転記するフローを実装しました。
コピペで比較的簡単にお使いいただけるため、ご自身の業務効率化にご活用ください。

スポンサーリンク
Hiromaru

普段からPower Platform・SharePointの技術を広めています!
デザインに力を入れて、見やすい・分かりやすい記事を投稿していきます

Hiromaruをフォローする
シェアする
Hiromaruをフォローする
タイトルとURLをコピーしました