前回は「【#PowerApps Tip's】OfficeファイルをOnlineで起動させる」という話題でした。今回は、PowerApps からファイルを「Officeクライアントで起動」してみたいと思います。
やりたいこと
PowerApps で、データソースがSharePoint Online のリスト。そのリストの添付ファイルを利用している状態で、PowerApps アプリ側でデータソースの添付ファイルをクリックした際などでダウンロードではなく、Officeクライアントを起動したい。
例えば、〇〇.xlsx だったら、クライアントでExcelを起動させる、というコトです。
利用するデータ・アプリ
前回と同様です。前回利用したアプリをチョイと改造して確認しています。
実際の動作
下記の動画をご覧ください。
#PowerApps open the SPO attachment in Office Client application. ex: .xlsx -> Excel. ms-excel: + FileURL pic.twitter.com/YOprZp0DrO
— やま (@yamad365) November 4, 2019
Office クライアントで起動する方法
Officeファイルを該当するアプリケーションで開きたい場合は、下記サイトを参考に該当する URI スキームを開きたいファイルのURLの前に付けるだけ、です。
■参考URL
予約済みのファイルと URI スキーム名
たとえば、Excel、Word、PowerPoint だと下記。
Excel(.xlsx) → ms-excel:
Word(.docx) → ms-word:
PowerPoint(.pptx) → ms-powerpoint:
このスキームと、開きたいファイルのURLを下記のように組み合わせる、というコト。例えば、Excelのファイルだった場合。
ms-excel:[ファイルのURL(https://~)]
あとは、前回と同じように文字列を操作して Launch関数です。
※上記参考URLは @br_Yellow11 さんが教えてくれました。ありがとうございます!!
補足 あるいは ポイント
前回は単純なURLパラメーターを末尾に付与するだけでOKでした。今回は、開きたいアプリケーションによってURIスキームを動的に変更する必要があります。前述の動画で、追加したボタンの OnSelect アクションに記載していた処理は下記です。
UpdateContext({wkSchema:
Switch(Last(Split(DisplayName,".")).Result,
"xlsx","ms-excel:"
,"docx","ms-word:"
,"pptx","ms-powerpoint:")});
Launch(wkSchema & AbsoluteUri,DisplayName)
ファイル名を"."で分割して、Last(最後の要素)を取得すると拡張子が取得できるハズです。その拡張子から、該当するスキームを変数に格納し、Launch関数に、変数に格納したスキーム+URLをパラメーターとして指定しています。上記の例は3種類しか対応していない、ということになります。
ちょっとメンドクサイですw
しょうがないね。
注意
このURIスキームを指定した場合の動作は、完全にブラウザーに依存します。おそらく、Office 365がサポートしているブラウザーであれば意図した動作をするでしょう。が、万が一、意図したアプリケーションが起動しない状況が発生した場合は・・・諦めてブラウザーを変更してみてくださいw
※アプリに不具合がない前提で、ですがw
まとめ
- PowerApps から Officeクライアントでファイルを開きたい場合はURIスキームを付与してLaunch関数
- 拡張子などでアプリケーションを判定する必要がある
- URIスキームを解釈してくれるか否かは、ブラウザー依存
".txt"や".pdf"など、大半のブラウザーでデフォルト表示が可能な拡張子はURIスキームを付与せず直接URLをLaunchするとブラウザー上で表示されるコトが多いです。そのため、前述の関数で、Switch関数のデフォルト値(どれにも該当しなかった場合)に Blank() を指定しておけば、ブラウザーまかせで良しなに処理をしてくれる状態になります。すぐに把握できると思いますので試していただければ、と思います。
あ、そうだ。前回書き忘れたのですが、SPOリストの添付ファイルで試していますが、ドキュメントライブラリのアイテムでも同じ処理で動きます。たぶん。
ちなみに、Ignite 2019 を観ながら途中まで書いてたので、誤字脱字などありましてもご容赦賜れれば幸いです(汗
それでは、皆さま。素晴らしい Power Platform Life を!