Posted at

【#PowerApps Tip's】Officeファイルをクライアントアプリで起動させる

前回は「【#PowerApps Tip's】OfficeファイルをOnlineで起動させる」という話題でした。今回は、PowerApps からファイルを「Officeクライアントで起動」してみたいと思います。


やりたいこと

PowerApps で、データソースがSharePoint Online のリスト。そのリストの添付ファイルを利用している状態で、PowerApps アプリ側でデータソースの添付ファイルをクリックした際などでダウンロードではなく、Officeクライアントを起動したい。

例えば、〇〇.xlsx だったら、クライアントでExcelを起動させる、というコトです。


利用するデータ・アプリ

前回と同様です。前回利用したアプリをチョイと改造して確認しています。


実際の動作

下記の動画をご覧ください。


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 を!