---
title: 気ままに勉強会_#57_おいしみ
tags: 
author: [おいしみ](https://convert.docswell.com/user/ksgiksg)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/47Q8X43WEP.jpg?width=480
description: 気ままに勉強会_#57_おいしみ by おいしみ
published: May 27, 23
canonical: https://convert.docswell.com/s/ksgiksg/ZJL92N-2023-05-27-210252
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/47Q8X43WEP.jpg)

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


# Page. 2

![Page Image](https://bcdn.docswell.com/page/KE426Q1171.jpg)

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


# Page. 3

![Page Image](https://bcdn.docswell.com/page/L71MVPG5JG.jpg)

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


# Page. 4

![Page Image](https://bcdn.docswell.com/page/G7W3L2KW72.jpg)

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


# Page. 5

![Page Image](https://bcdn.docswell.com/page/4JZVMDZ273.jpg)

デモ！


# Page. 6

![Page Image](https://bcdn.docswell.com/page/YE65N186JV.jpg)

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


# Page. 7

![Page Image](https://bcdn.docswell.com/page/GE5Y5495E4.jpg)

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


# Page. 8

![Page Image](https://bcdn.docswell.com/page/972GNV2G7R.jpg)

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


# Page. 9

![Page Image](https://bcdn.docswell.com/page/DJYVP3YGJM.jpg)

要件定義


# Page. 10

![Page Image](https://bcdn.docswell.com/page/V7NM5VP8E8.jpg)

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


# Page. 11

![Page Image](https://bcdn.docswell.com/page/YJ9NY63XJ3.jpg)

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


# Page. 12

![Page Image](https://bcdn.docswell.com/page/GJ8K6ZM9ED.jpg)

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


# Page. 13

![Page Image](https://bcdn.docswell.com/page/LJLZ9D3M7R.jpg)

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


# Page. 14

![Page Image](https://bcdn.docswell.com/page/47MVZPD67W.jpg)

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


# Page. 15

![Page Image](https://bcdn.docswell.com/page/P7R2614NJ9.jpg)

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


# Page. 16

![Page Image](https://bcdn.docswell.com/page/PJXDMY28EX.jpg)

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


# Page. 17

![Page Image](https://bcdn.docswell.com/page/3JKXG3MLED.jpg)

実行結果
attachmentsから、結果を２つ取り出してみました。
{
&quot;id&quot;: &quot;CF25B2B1-D53B-42DF-BDC0-4E8590CB79DE&quot;,
&quot;contentType&quot;: &quot;reference&quot;,
&quot;contentUrl&quot;: &quot;https://v45dm-my.sharepoint.com/personal/kyunmina_v45dm_onmicrosoft_
&quot;content&quot;: null,
OneDriveのURL
&quot;name&quot;: &quot;適当なファイル (2).pptx&quot;,
&quot;thumbnailUrl&quot;: null,
&quot;teamsAppId&quot;: null
},
{
&quot;id&quot;: &quot;3f129094-cd3b-40e1-a143-bd3952ccde9b&quot;,
&quot;contentType&quot;: &quot;reference&quot;,
&quot;contentUrl&quot;: &quot;https://v45dm.sharepoint.com/sites/ksgiksg/Shared Documents/標準チャネ
&quot;content&quot;: null,
SharePointのURL
&quot;name&quot;: &quot;Book1.xlsx&quot;,
&quot;thumbnailUrl&quot;: null,
&quot;teamsAppId&quot;: null
}


# Page. 18

![Page Image](https://bcdn.docswell.com/page/LE35NGY6J5.jpg)

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


# Page. 19

![Page Image](https://bcdn.docswell.com/page/8EDDW15MEG.jpg)

メッセージの詳細を取得


# Page. 20

![Page Image](https://bcdn.docswell.com/page/V7PX9QGQE8.jpg)

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


# Page. 21

![Page Image](https://bcdn.docswell.com/page/2JVLM56P7Q.jpg)

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


# Page. 22

![Page Image](https://bcdn.docswell.com/page/5EGXG6NQJL.jpg)

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


# Page. 23

![Page Image](https://bcdn.docswell.com/page/4JQ8X4QW7P.jpg)

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


# Page. 24

![Page Image](https://bcdn.docswell.com/page/K7426QN1J1.jpg)

添付ファイルの取得


# Page. 25

![Page Image](https://bcdn.docswell.com/page/LJ1MVP55EG.jpg)

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


# Page. 26

![Page Image](https://bcdn.docswell.com/page/GJW3L25WJ2.jpg)

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


# Page. 27

![Page Image](https://bcdn.docswell.com/page/4EZVMDN2J3.jpg)

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


# Page. 28

![Page Image](https://bcdn.docswell.com/page/Y765N196EV.jpg)

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


# Page. 29

![Page Image](https://bcdn.docswell.com/page/G75Y54N574.jpg)

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


# Page. 30

![Page Image](https://bcdn.docswell.com/page/9J2GNV5GJR.jpg)

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


# Page. 31

![Page Image](https://bcdn.docswell.com/page/DEYVP3KGEM.jpg)

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


# Page. 32

![Page Image](https://bcdn.docswell.com/page/VJNM5VR878.jpg)

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


# Page. 33

![Page Image](https://bcdn.docswell.com/page/YE9NY6MXE3.jpg)

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


# Page. 34

![Page Image](https://bcdn.docswell.com/page/GE8K6ZL97D.jpg)

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


# Page. 35

![Page Image](https://bcdn.docswell.com/page/LELZ9DLMJR.jpg)

URLからファイルをコピーするには③
ここでもう一度テストデータを観察してみます。
添付ファイルから取得できたこの情報の中から、ファイルを特定する必要があります。
{
&quot;id&quot;: &quot;3f129094-cd3b-40e1-a143-bd3952ccde9b&quot;,
&quot;contentType&quot;: &quot;reference&quot;,
&quot;contentUrl&quot;: &quot;https://v45dm.sharepoint.com/sites/ksgiksg/Shared Documents/標準チャネル/Book1.xlsx&quot;,
&quot;content&quot;: null,
&quot;name&quot;: &quot;Book1.xlsx&quot;,
&quot;thumbnailUrl&quot;: null,
&quot;teamsAppId&quot;: null
}
使えそうなのは、“id”と“countentUrl”ですね。
さっきは“id”を試してうまくいかないかったので“countentUrl”に注目します。


# Page. 36

![Page Image](https://bcdn.docswell.com/page/4JMVZPM6JW.jpg)

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


# Page. 37

![Page Image](https://bcdn.docswell.com/page/PJR261VNE9.jpg)

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


# Page. 38

![Page Image](https://bcdn.docswell.com/page/PEXDMYZ87X.jpg)

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


# Page. 39

![Page Image](https://bcdn.docswell.com/page/3EKXG38L7D.jpg)

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


# Page. 40

![Page Image](https://bcdn.docswell.com/page/L735NG26E5.jpg)

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


# Page. 41

![Page Image](https://bcdn.docswell.com/page/87DDW1ZM7G.jpg)

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


# Page. 42

![Page Image](https://bcdn.docswell.com/page/VJPX9QDQ78.jpg)

完成！？


# Page. 43

![Page Image](https://bcdn.docswell.com/page/2EVLM51PJQ.jpg)

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


# Page. 44

![Page Image](https://bcdn.docswell.com/page/57GXG62QEL.jpg)

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


# Page. 45

![Page Image](https://bcdn.docswell.com/page/4EQ8X4PWJP.jpg)

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


# Page. 46

![Page Image](https://bcdn.docswell.com/page/KJ426QY1E1.jpg)

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


# Page. 47

![Page Image](https://bcdn.docswell.com/page/LE1MVP657G.jpg)

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


# Page. 48

![Page Image](https://bcdn.docswell.com/page/GEW3L2WWE2.jpg)

おわりに


# Page. 49

![Page Image](https://bcdn.docswell.com/page/47ZVMD52E3.jpg)

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


