【Power Automate】OneDriveの「共有リンクの作成」でリンク種類にDirectを選べなくなったので代替手段を調べてみた。

調べたこと・分かったこと

やりたかったこと

Power Appsのボタンクリック時に、OneDrive内のファイルをローカルにダウンロードしたい。

最初、Power Automateの「OneDrive 共有リンクの作成」で、「リンクの種類」をDirectにしてPower Apps側に文字列として返却、Power AppsのDownload関数に戻り値を指定して実行することでダウンロードしていました。

ところがある日、この処理でBadGatewayのエラーが出るようになり、ダウンロードをすることができなくなりました。(10月中旬ごろまでは正常に稼働していたようです)

公式を見ると、「共有リンクを作成する」アクションが2つあり、これまで使用していたアクションが非推奨になっている模様。

“MC280012: Retirement of Direct Link option while creating a Sharing link in the OneDrive for Business connector”という事前アナウンスもあったのですが、完全に把握漏れ…。

MC280012 - (Updated) PowerApps/PowerAutomate Retirement of Direct Links in the OneDrive for Business Connector (archived)
2021-09-25 Product: OneDrive, Power Apps, Power Automate, PowerApps Platform: World tenant, Online Status: Change type: Admin impact, Retirement, Updated messag...

現在直接リンクオプションを使用している場合は、2021年9月25日までにアプリとフローを修正する必要があります。その後、アクションはエラーメッセージを返します。意図したとおりに長寿命の共有リンクを作成するには、リンクタイプとして「直接」ではなく「表示」または「編集」を選択してください。

https://app.cloudscout.one/evergreen-item/mc280012/

Directリンクを使っている場合に修正しろとだけあって、代替手段が書かれていない。

Directはダウンロード可能なリンクを返してくれるのですが、そのほかのView、Editではクリックすると別タブが開いてしまうので、動きが変わってしまいます。

代替手段がないか調査しました。

結論:Embedリンクを取得して文字列を置き換える

色々ググって、参考にしたのがこちらのページ。

How to Get Direct or Permanent Link for OneDrive Files? • Bydik
OneDrive is one of the most popular cloud file storage service developed by Microsoft. You can easily share the files and folders that you store in

OneDriveファイルの直接ダウンロードリンクを取得する方法。

Embedのリンクを取得した後、URL内の文字列を「embed」から「download」に書き換えればダウンロードリンクになるとのこと。(マジ…?)

Power Automateでもやってみる。

まずは推奨されているアクションである「共有リンクを作成する」を選びなおして、「リンクの種類」にEmbedを選択。

Power Appsに文字列を返却する際に、Replace関数を使用して「embed?」の文字列を「download?」に置き換えたうえで返却するように修正。

そうしたらちゃんとダウンロード処理ができるようになりました!

またいつ挙動が変わるか怪しいけど、一旦はこれでいいかなあ。

コメント

タイトルとURLをコピーしました