気ままに勉強会_#57_おいしみ

4K Views

May 27, 23

スライド概要

profile-image

Excel大好き人間から初めて、VBAを経由し、 モダンExcelに感動しつつも、最近はTeamsなどSharePointが気になるお年頃。 Power Platformも魅力的!

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

Teamsの投稿から OneDriveに添付 ファイルを一括ダウ ンロードするフロー おいしみ なりのPower 勉強方法について

2.

自己紹介 { “DisplayName” : “おいしみ”, “ID” : “ksgiksg”, “Introduce” : [ おいしみ “今年から情シス1年生”, “前職は「プラントエンジニア」と、非IT職”, “社内ではPower PlatformをはじめDX推進の講師役として活動中”, “Qiitaでアウトプット始めてみました(主にPower Automate関連)” ], “ContentURL” : [ “Twitter” : https://twitter.com/ksgiksg, @ksgiksg “Qiita” : “https://qiita.com/ksgiksg” ] }

3.

非IT職が市民開発者として成長したお話 ITに全く関係のない仕事をしていた人間が、 情シス・Power Platform の社内講師に転職した記念に、 僕が普段やってる勉強法(?)をお話しします。

4.

今日ご紹介する内容 Teamsの投稿からOneDriveに添付ファイルを一括ダウンロードするフロー ✓ なくてもいいけど、あったら便利 ✓ 手作業に戻しても最悪困らない(手間だけど) ✓ 自分の実力で できそうで できなさそうで できそう フローの詳しい内容や解説はQiitaにて配信済みなので、 今日はこのフローを作成するにあたって行った、試行錯誤をお話しします。

5.

デモ!

6.

これを作ろうと思った背景

7.

組織として自動化していい範囲 集団の中でアプリやフローを維持していくには、 どうしても下限を意識してレベルを合わせる必要がある。 複雑なフローは 運用しない方がいい 組織で運用していいレベル でも、それだとつまんない…(∵)

8.

じゃあ、どうやって楽しむ? 引継ぎの問題 : 引き継がなければ問題ない メンテナンスの問題 : 自分の手の届く範囲なら問題ない 不具合による業務への影響 : 主たる業務に使わなければ影響は軽微 結論 別に自動化しなくても困らない、 自分のためだけの些細な問題を解決して遊ぶ!!

9.

要件定義

10.

まず、やりたいことの整理 いっぱい届いた添付ファイルを どこかにまとめて保存しておきたい。

11.

まず、やりたいことの整理 送られてくる方法にはどんな種類がある? • 個人チャット • グループチャット • チャネルの親投稿 • チャネルの返信 全部できた方がいい!

12.

まず、やりたいことの整理 ダウンロードしたファイルはどこに保存する? • OneDrive for Business • SharePoint Online • ローカルフォルダ 個人の領域であり 一番手軽なOneDriveに決定!

13.

そもそも添付ファイルって何だ? 添付ファイルを追加しようとすると、いくつか選択肢が出てきます。 …ここでも分岐が必要そうですね。 ※画面はチャネルで投稿する場合 添付ファイルといいますが、投稿に直接ファイルを保持しているわけではありません。 OneDriveやSharePointに保存されたファイルへのリンクとして投稿されます。

14.

テスト用のデータを作成 まずはInputとなるデータを用意しておきます。 とりあえず、最初はチャネルの親投稿として用意しました。

15.

テストデータの詳細を取得する 最初は場合分けを考えず、これくらいのフローで十分です。 単純にチャネルの親投稿を取得してみて、データの中身を確認します。

16.

実行結果 “attachments”の中に配列で 添付ファイルの情報が入っているようです。

17.
[beta]
実行結果
attachmentsから、結果を2つ取り出してみました。
{

"id": "CF25B2B1-D53B-42DF-BDC0-4E8590CB79DE",
"contentType": "reference",
"contentUrl": "https://v45dm-my.sharepoint.com/personal/kyunmina_v45dm_onmicrosoft_
"content": null,
OneDriveのURL
"name": "適当なファイル (2).pptx",
"thumbnailUrl": null,
"teamsAppId": null
},
{
"id": "3f129094-cd3b-40e1-a143-bd3952ccde9b",
"contentType": "reference",
"contentUrl": "https://v45dm.sharepoint.com/sites/ksgiksg/Shared Documents/標準チャネ
"content": null,
SharePointのURL
"name": "Book1.xlsx",
"thumbnailUrl": null,
"teamsAppId": null
}

18.

パターンを書き出す ここまでで考えられるパターンを列挙してみます。 メッセージの詳細を取得 URLからファイルを取得 • 個人チャット • グループチャット • OneDriveのファイル • チャネルの親投稿 • SharePointのファイル OneDriveに保存 ✅ • チャネルの返信 4 × 2 = 8 パターンありそうですね。 Power Automate では分岐が多くなると、横に長い視認性の悪いフローに なってしまうので、できれば避けたいところ。。。

19.

メッセージの詳細を取得

20.

メッセージの詳細を取得 基本的には、トリガーのアウトプットにチャネルの情報が含まれているかで分岐します。

21.

メッセージの詳細を取得 チャネルの情報が空の場合はグループチャットとして取得します。 この方法で、個人チャットも取得できます。

22.

メッセージの詳細を取得 チャネルの情報が空でない場合は、チャネルの投稿として取得します。 “Parent message ID”を指定しておくことで、返信も取得できます。

23.

メッセージの詳細を取得 さらに言うと、メッセージの種類をグループチャットにすることで、チャネルの投稿を 含む全てのメッセージが取得できます。 これでメッセージの詳細を取得するための分岐はなくなりました。

24.

添付ファイルの取得

25.

URLからファイルをコピーするには① URLがわかっていて、OneDriveにファイルを保存したいとなったとき 一番に思いついたのはこのアクションでした。

26.

URLからファイルをコピーするには① しかし、試したところ403エラーで失敗。。。

27.

URLからファイルをコピーするには① 調べたところ、認証の必要なファイルは取得できないようでした。 自分にアクセス権のあるファイルでもダメなんですね。。。 URL からアップロードする - OneDrive API - OneDrive dev center | Microsoft Learn ということで、1つ目の方法は断念(∵)

28.

URLからファイルをコピーするには② 次に思いついたのがこのアクションでした。

29.

URLからファイルをコピーするには② サイトのアドレスはいったん置いといて、ファイル識別子にIDを指定してみます。 こんな感じで設定して・・・実行! テスト取得したattachments

30.

URLからファイルをコピーするには② ・・・が、ダメ! ファイルの存在が見つからないというエラーでした。

31.

余談:Inputの形式を確認する フローの作成時、動的コンテンツでどのプロパティを指定したらいいかが わからなくなることありませんか? 特にこういうファイルピッカーで選択する項目…

32.

余談:Inputの形式を確認する そういうときは、手動で適当にInputを埋めたあと 「・・・」メニューから「コードのプレビュー」を確認します!

33.

余談:Inputの形式を確認する フローの作成時、動的コンテンツでどのプロパティを指定したらいいかが わからなくなることありませんか?特にこういうファイルピッカーで選択する項目…

34.

URLからファイルをコピーするには③ 最後に思いついたのがこのアクションでした。 ファイルコンテンツを取得して、同じ中身のファイルを作成します。

35.
[beta]
URLからファイルをコピーするには③
ここでもう一度テストデータを観察してみます。
添付ファイルから取得できたこの情報の中から、ファイルを特定する必要があります。
{

"id": "3f129094-cd3b-40e1-a143-bd3952ccde9b",
"contentType": "reference",
"contentUrl": "https://v45dm.sharepoint.com/sites/ksgiksg/Shared Documents/標準チャネル/Book1.xlsx",
"content": null,
"name": "Book1.xlsx",
"thumbnailUrl": null,
"teamsAppId": null
}

使えそうなのは、“id”と“countentUrl”ですね。
さっきは“id”を試してうまくいかないかったので“countentUrl”に注目します。

36.

URLからファイルをコピーするには③ contentUrl と アクションのインプットを比較します。 ・・・よく見ると、なんとなく似ていませんか? "contentUrl": "https://v45dm.sharepoint.com/sites/ksgiksg/Shared Documents/標準チャネル/Book1.xlsx" or

37.

URLからファイルをコピーするには③ contentUrl の前半がサイトのアドレス、後半がファイルパスになっています。 “/”で区切ってうまく再編すれば何とかなりそうですね。

38.

URLからファイルをコピーするには③ split,join,take,skipを使って、うまくテキスト処理を行います。 個人的に、Automateでのテキスト処理にはsplitを多用する印象があります。

39.

URLからファイルをコピーするには③ いったんこれで実行してみましょう。OneDriveのファイルはケアできていませんが、 SharePointのファイルは取得できるはず。

40.

URLからファイルをコピーするには③ あれ? なぜか成功しました・・・(∵)

41.

SharePoint Online と OneDrive for Business 実は、この2つの土台は同じ仕組みが使われているようです。 参考: SharePoint Technical Notes : Microsoft Teams, OneDrive for Business と SharePoint をファイル管理するときにどう使い分けるか? (lekumo.biz) SharePointコネクタのアクションですが、 OneDriveのサイトのアドレスを指定して ファイルを取得できるようです!! これで分岐が必要なくなりました(∵)

42.

完成!?

43.

テストしまくる 基本的なところはできたので、いろいろなパターンでテスト実行を行います。 メッセージの詳細を取得 URLからファイルを取得 • 個人チャット • グループチャット • OneDriveのファイル • チャネルの親投稿 • SharePointのファイル OneDriveに保存 ✅ • チャネルの返信 少なくとも、この4 × 2 = 8 パターンは確認しておく必要がありますね(∵)

44.

あれ?失敗... グループチャットのファイルがうまく取得できませんでした。

45.

あれ?失敗... よく見ると、ファイル名にあたる部分が謎の文字列になっています。

46.

Power Automate 謎の文字列ランキング この“%”が多用された文字列は、 よくわからん文字列ランキング上位のpercent-encodingです。 日本語ファイル名がURLとしてエンコードされてしまっているようです。 順位 形式 1st Odata_x... 2nd Base64 3rd percent-encoding

47.

デコード (日本語に戻)して完成! Power Automate にこの文字列を復元する関数が用意されているので、 少しだけ修正してフローは完成です。 split(decodeUriComponent(item()?['contentUrl']), '/')

48.

おわりに

49.

まとめ • 自分の手の届く範囲でやってみたいことを楽しんでやってみる • テストデータを作ってデータ構造を観察することが大事 • 試行錯誤は無駄にはならない!!