※(2024/3/7追記)
- 自動化メニューが表示されないケースについて追記
- フローを微改修
- Teamsチャットの送信先をトリガーの出力の値を使うように変更
- はじめに
- 思い描く手段はWindowsエクスプローラーの「送る」
- 実行イメージ
- フロー全体図
- フロー作成時の注意点
- フロー解説
- 4.[Microsoft Teams]チャットまたはチャネルでメッセージを投稿する
- このフローの制限事項
- OneDrive for Business で自動化メニューが表示されない場合
- 参考にしたページ
- さいごに
はじめに
Microsoft 365とBoxを併用しており、自分のローカル作業はOneDirve for Business で行い、共有で保管されるファイルはBoxにアップロードしています。(SharePintはファイルの保管にはほぼ使われていません。)
この為、OneDrive for Business と Box 間でのファイルのコピー/移動が結構な頻度で発生するのですが、その都度
- WebブラウザでBoxにアクセス
- アップロード先の深いフォルダー階層を開く
- OneDrive for Businessを開いたウィンドウを並べて
- ドラッグ&ドロップでアップロード
という作業が発生します。
深いフォルダ階層で管理するルールになっていることもあり、こういった作業が積みかなさると結構な手間ですので、少しでも楽できる方法を考えてみました。
思い描く手段はWindowsエクスプローラーの「送る」
Windowsエクスプローラーではファイルを右クリックメニューで表示される「送る」(shell:sendto)に任意のフォルダーのショートカットを配置することで指定のフォルダーに簡単にファイルをコピーできる歴史あるお馴染みの機能があります。(Windows11ではひと手間増えてしまいましたが)
これに近い操作でOneDrive for BusinessからBoxにファイルを「送る」ことを実現します。
実行イメージ
OneDrive for Business でファイルを右クリック(または「…」)→「自動化」→「📁ドキュメント@Box(今回作成したクラウドフロー)」を選択すると
クラウドフローが実行できます。
実行して少し待つと、Teamsのチャットで完了通知が届きます。
Boxを確認するとアップロードされています。
フロー全体図
フロー作成時の注意点
既定の環境でフローを作成する必要がある
今回利用するOneDrive for Businessコネクタの「選択したファイルの場合」トリガーは、リファレンスページには何も記載がありませんでしたが、既定の環境でのみ機能するようです。(Microsoft Teams コネクタの「選択したメッセージの場合」トリガーと同じ制限事項?)
不具合回避のためクラシックデザイナー推奨
この記事の作成時点(2024年3月)ではPower Automateの既定のモダンデザイナーではOneDrive for Businessコネクタの動作が怪しい点があるため、あえてクラシックデザイナーで作成しています。
- モダンデザイナーでフローを新規作成
- 適当なトリガーとアクションをフローに追加し一旦保存
- 「新しいデザイナー」トグルボタンをオフにしてクラシックデザイナーに切り替える
- 2.で追加したアクションとトリガーを削除して、再度追加しなおす
といった手順で作成を始めています。
フロー解説
1.[OneDrive for Business]選択したファイルの場合 (トリガー)
このトリガーを使うとOneDrive for Business でファイルの右クリックメニューからフローを実行することができるようになります。
2.[OneDrive for Business]パスによるファイル メタデータの取得→(エラーの場合[コントロール]終了)
今回使用する「選択したファイルの場合」 トリガーは、実はファイルだけでなく、フォルダーの右クリックでも実行することができます。しかし、トリガーから出力される情報では、選択したものがファイルかフォルダーかを判断する情報がありません。そこで、「パスによるファイル メタデータの取得」アクションを実行しエラーが発生した場合はフォルダを選択したと判断して、フローを終了しています。
- パスによるファイル メタデータの取得アクション
- ファイルパス
- @triggerBody()?['entity']?['filePath']
- ファイルパス
- 終了アクション
- 状態
- 取り消し済み
- 「…」→実行条件の構成
- "に失敗しました"のみ選択
- 状態
3.[コントロール]スコープ-ファイルをアップロード
3-1.[OneDrive for Business]パスによるファイルコンテンツの取得
選択したファイルのコンテンツを取得します。
- ファイルパス
- @triggerBody()?['entity']?['filePath']
3-2.[Box]ファイルの作成
3-1.で読み込んだファイルコンテンツをBoxフォルダにファイルとして作成します。
- フォルダーのパス
- アップロード先Boxフォルダー
- ファイル名
- @{triggerBody()?['entity']?['fileName'] }
- ファイルコンテンツ
- @{body('パスによるファイル_コンテンツの取得')}
※フォルダーパスの選択にはピッカー(📁)を使用してはいけない
Boxコネクタのリファレンスページの制限事項にも記載がありますが、非英語環境ではファイルピッカーを使ってフォルダを選択すると、意図したフォルダーが指定されない問題が起きます。(最上位に"すべてのフォルダ"というフォルダが存在するパスになる)この為、面倒ですが最上位のフォルダーから/区切りでパスを手書きする必要があります。
※ファイル名について
ファイル名はトリガー出力の動的な値としては表示されませんが、フロー実行結果でトリガーの「未加工情報の表示」をするとファイル名(fileName)が出力されていることが確認できます。
これを@{triggerBody()?['entity']?['fileName'] } で取得しています。
4.[Microsoft Teams]チャットまたはチャネルでメッセージを投稿する
Teamsのチャットでアップロード完了を通知します。
- 投稿者
- フローボット
- 投稿先
- Chat with Flow bot
- Recipient
-
base64ToString(triggerOutputs()?['headers']?['x-ms-user-email-encoded'])
- ※トリガーの出力の「ユーザーの電子メール」です
-
- Message
- ファイル名
- @{triggerBody()?['entity']?['fileName'] }
- アップロード先
- actions('ファイルの作成')['inputs']['parameters']?['folderPath']
- ファイル名
※アップロード先フォルダーパスの取得
actions関数を使って3-2.[Box]ファイルの作成アクションの入力パラメータ「フォルダーパス」で指定した値を取得しています。
このフローの制限事項
- ファイルを複数選択した状態では実行できない
- OneDrive for Business の仕様なのであきらめています
- フォルダーを選択した場合に対応していない
- フォルダの中にさらに深い階層があることまで想定するとフローが複雑になる割に利用頻度は高くない為割り切っています
- ファイルの上書きチェックはしていない
- 既に同名のファイルが存在する場合にどのような動きになるかはBox側の設定に依存します。私の環境では、ファイル作成アクションで上書きされBox上のファイルのバージョンが上がります。
- 確実に制御したい場合は、Boxにアップロードする前に同名ファイルの存在チェックを行う方がよいかもしれません。
- その他
- Microsoft365, Boxともに法人契約のテナントで検証しています
- 使用しているコネクタの制限事項やm365・Boxテナントの設定次第で、アプロードできるファイルサイズなどに制限が発生する可能性があります。
- 5MB程度のファイルでテストしています。
OneDrive for Business で自動化メニューが表示されない場合
OneDrive for Business にはm365のいろいろなところからアクセスできますが、アクセスの仕方によって「自動化」メニューが表示されない場合がありますのでご注意ください。
- 表示される
- ワッフルメニュー→OneDriveから
- Outlook on the Web の左のバーから
- 表示されない
- Microsoft365ホーム→アプリ→OneDriveから
- Teamsの中のOneDriveアプリ
- OneDrive同期アプリ
OneDrive for Business の URLが「https://https://xvxfc-my.sharepoint.com/personal/~」で始まる場合は表示されます。(2024年3月現在)
参考にしたページ
actions関数について学ばせていただきました。わたるふさんいつもありがとうございます。
使用するコネクタの公式リファレンスは要チェックです。
さいごに
OneDrive for Business の自動化メニューは、もう少し幅を広げてほしいですね。