ルドルフもわたるふもいろいろあってな

Microsoft 365、Power Platform、PowerShellについて調べたことや検証したことなどを投稿します。技術の話は面白い。

【解説編その4】プレミアムアクションを使わずAzureADアプリも作らずにPower AutomateでMicrosoft TeamsのスレッドをCSVに保存する

掲題のフローの解説編その4です。

フローはGitHubで公開しています。
github.com

この投稿は、解説編その1 解説編その2 解説編その3 の続きです。

概要編はこちらです。

この回で解説する範囲

解説する範囲のフロー図

この回で解説する範囲のフロー図は以下の通りです。

今回の範囲の目的

今回の範囲の目的は、解説編その3 の出力として得た投稿一覧のデータを最終更新日時の昇順に並べかえるたものをCSVに出力することです。

解説編その3 で得た投稿一覧のデータ

この範囲で解説するステップ

この範囲で解説するステップは以下の通りです。

  1. "投稿一覧のデータを並び替えたもの"をCSV形式に変換する
  2. CSVを作成してフロー実行者のOneDriveに保存する
  3. フロー実行者宛にCSVの保存先パスをチャットで通知する

アクションごとに解説します。

解説

1.「CSVテーブルの作成」アクション

これは「データ操作」>「CSVテーブルの作成」アクションです。解説編その3 で作成した投稿一覧の配列をCSV形式のフォーマットに変換します。

配列の整形は解説編その3 で完了したため配列をそのままCSVに変換します。そのため、ここでは「自動」を選択します。

コードビュー

"inputs": {
"from": "@variables('並び替え後の配列')",
"format": "CSV"
},

2.「ファイルの作成」アクション

これは「OneDrive for Business」>「ファイルの作成」アクションです。CSVファイルを作成してフロー実行者のOneDriveに保存します。


コードビュー

"inputs": {
"parameters": {
"folderPath": "/スレッドをOneDriveにCSV保存",
"name": "@{convertTimeZone(utcNow(), 'UTC', 'Tokyo Standard Time', 'yyyyMMdd_HHmm')}_@{triggerBody()?['entity']?['teamsFlowRunContext']?['messagePayload']?['subject']}.csv",
"body": "@concat(decodeUriComponent('%EF%BB%BF'),body('CSV_テーブルの作成'))"
},
},


フローの保存先のフォルダ名を指定します。ここで指定した名前のフォルダがルートフォルダ直下に無い場合は、このアクションによってフォルダが自動で作成されます。
CSVのファイル名は、「フローを実行した日時(yyyyMMdd_HHmm)」+ 「スレッドの件名」です。

ポイント:CSVの文字化けを回避する

ポイントは、Excelで開いたときに文字化けが発生しないようにCSVにBOMを追加していることです。
"body": "@concat(decodeUriComponent('%EF%BB%BF'),body('CSV_テーブルの作成'))"

こちらについては下記ページ(からめもさんの記事)に目を通すと理解しやすいです。
zenn.dev

3.「共有リンクを作成する」アクション

これは「OneDrive for Business」>「共有リンクを作成する」アクションです。チャットでCSVの保存先を通知するためにファイルのパスを作成します。
※共有リンクを作成せずにファイルのフルパスを取得する方法が見つからなかったためこの方法を使用しています。

コードビュー

"inputs": {
"parameters": {
"id": "@outputs('ファイルの作成')?['body/Id']",
"type": "View",
"scope": "Organization"
},
},


このリンクからExcelにアクセスした場合にシートを読み取り専用にするために「リンクの種類」を"view"にしています。これは、このリンクを他のユーザーに共有する場合に誤って更新されることを防ぐための設定です。


この設定で作成したリンクを開くとシートが閲覧専用モード開きます。


「リンク スコープ」は、テナント内のユーザーのみアクセスできるように「Organization」を選択します。


この設定で作成したリンクを開いて「アクセス許可を管理」を開くと、テナント内のユーザーがアクセス可能になっていることがわかります。


4.「変数を初期化する - チャットの本文を定義する」アクション

これは「変数」>「変数を初期化する」アクションです。チャットで通知する本文を定義します。Teamsのチャット投稿アクションで直接本文を定義しようとするとHTMLタグが崩れる場合があるため、変数として定義します。

コードビュー

"inputs": {
"variables": [
{
"name": "本文",
"type": "string",
"value": "指定したスレッドをCSV形式でエクスポートしました。
\n
\n【エクスポート元のスレッド】
\nスレッドを開く
\n
\n【CSVの保存先パス】
\nCSVを開く
"
}
]
},

5.「マイ プロフィールの取得 (V2)」アクション

これは「Office 365 Users」>「マイ プロフィールの取得 (V2)」アクションです。チャットの通知先であるフロー実行者のメールアドレスを取得します。

6.「チャットまたはチャネルでメッセージを投稿する」アクション

これは「Microsoft Teams」>「チャットまたはチャネルでメッセージを投稿する」アクションです。"取得した宛先"と"定義したチャット本文"を入力情報としてチャットの送信を行います。

コードビュー

"inputs": {
"parameters": {
"poster": "Flow bot",
"location": "Chat with Flow bot",
"body/recipient": "@{outputs('マイ_プロフィールの取得_(V2)')?['body/mail']};",
"body/messageBody": "

@{variables('本文')}

"
},
},

これで解説編は終了です。

これでこのフローの解説編は以上です。
ここまで読んでいただき、ありがとうございました。

フローはGitHubで公開してますので、活用いただければ幸いです。
github.com

フローをカスタマイズしてブログ等で公開して頂いてもかまいません。その際は元ネタとしてこの記事のリンクを記載ください。
(`・ω・´)シャキーン