やりたかったこと
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”という事前アナウンスもあったのですが、完全に把握漏れ…。

現在直接リンクオプションを使用している場合は、2021年9月25日までにアプリとフローを修正する必要があります。その後、アクションはエラーメッセージを返します。意図したとおりに長寿命の共有リンクを作成するには、リンクタイプとして「直接」ではなく「表示」または「編集」を選択してください。
https://app.cloudscout.one/evergreen-item/mc280012/
Directリンクを使っている場合に修正しろとだけあって、代替手段が書かれていない。
Directはダウンロード可能なリンクを返してくれるのですが、そのほかのView、Editではクリックすると別タブが開いてしまうので、動きが変わってしまいます。
代替手段がないか調査しました。
結論:Embedリンクを取得して文字列を置き換える
色々ググって、参考にしたのがこちらのページ。

OneDriveファイルの直接ダウンロードリンクを取得する方法。
Embedのリンクを取得した後、URL内の文字列を「embed」から「download」に書き換えればダウンロードリンクになるとのこと。(マジ…?)
Power Automateでもやってみる。
まずは推奨されているアクションである「共有リンクを作成する」を選びなおして、「リンクの種類」にEmbedを選択。

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

そうしたらちゃんとダウンロード処理ができるようになりました!
またいつ挙動が変わるか怪しいけど、一旦はこれでいいかなあ。
コメント