自分のアプリID、アプリURLなどを取得する方法を調べてみた

はじめに

Param関数の記事で触れた今のアプリのアプリIDやURLなどの情報を動的に取得できないのか?を改めて調べてみてました。

結果、出来なくはないが完全ではなさそう。。もしかしたらうまいやり方があるかもしれないのですが、
とりあえず自分はやらなくていいかな。という印象でした。今回は備忘録的な記事となります。

今のアプリIDなどの情報は提供されていない

まず、アプリ上で今のアプリのIDやURLなどを標準で提供してくれるプロパティはありません。
今年くらいに「Hostオブジェクト」 というのが加わったのですがそこにもありませんでした。

Power Apps のホスト オブジェクト – Power Platform | Microsoft Learn
※取れるのは、BrowserUserAgent、OSType、property、SessionID、TenantID、Version

最初のアプリ作成時にはアプリIDはまだ出来ていないし、インポートの際もその時点で作られるから対応が難しいのかな?など推測しますが、出来れば標準で提供してくれるとありがたいですね。以下でも前からその話題が上がっていました。
アプリ内からアプリのメタデータを取得する ·コミュニティ (powerapps.com)

もちろんブラウザのUI上からはこの辺の情報は取れます。通常はこれを取得して使用する感じです。

アプリの詳細からWebリンク、アプリIDが取得可能

Power Apps for Makersコネクタで取得は可能

標準ではプロパティは提供されていないのですが、Power Apps for Makersコネクタを使用すれば、
アプリの一覧やアプリの各種情報を取得が可能です。

こちらのコネクタで(権限に応じた範囲で)アプリの一覧やアプリ情報の取得、共有や削除、接続やコネクタ操作、環境取得などが可能です。
じゃあこれで表示名でフィルターして取得できればいいな!と思ったんですが、調べていくうちにもういいやとなってしまいました💦
次から調べた内容を載せていきます。

Power Apps for Makesコネクタではフィルターが限定的っぽい

まずこのコネクタをアプリへ入れて使ってみます。アクションは「GetApps()」です。

コネクタの追加、GetAppsを使用

Power Appsで使用。Power Autoamte でも同様にコネクタ使える

そのままアプリ一覧を取得アクションをすれば一覧が取れる
アプリID以外にproperties.でappOpenUriなど各種情報が取れる

フィルターが効かない? →環境指定くらいしか効かない様子。

パラメータにある通りここでフィルタークエリ($filter )で表示名を入れて取ってくればOK?と思ったんですが、
それっぽく入れてもエラーになります。。Automateでも同様。

調べると以下の記事があり、環境のフィルターは効くようだが表示名など他のフィルターは効かなかったとのことでした。
この方のアプローチでは一旦環境IDでフィルターして全部取った後に表示名でLookupして特定する感じでした。
※Automateの方でも一旦取得してから名前でフィルターアクション

日時:メーカー向けパワーアプリ – アプリを入手 – フィルタークエリ… – パワープラットフォームコミュニティ (microsoft.com)

実際フローやアプリで試しましたがやはり環境IDであれば行けるが表示名はエラーになりました。
環境でのフィルターはちゃんとされていたのでこちらは効いているようです。

環境IDを指定したフィルタークエリは成功

大量のアプリがある場合は大丈夫か

取得できる件数は? →Topは1100件まで指定可能だった

取得した情報をアプリ上でLookUpすればよさそうだが何件まで取れるの?という点が気になりました。
パラメータには$Topがあるので上げてみたところ、1100件までよーとエラーが出ました。ここまではいけるようです。

アプリのデータ行制限は関係する? →しなかった。最大で1100件までは取れると思われる

他の記事で以下で取れるよーというのがありました。
こちらでは、GetApps内ではフィルターは使わずに取得後にLookupしている感じ。

How to get current PowerApps Application Name/App … – Power Platform Community (microsoft.com)

あれ?これだとデータ行数制限に引っかからない?最大500~2000までになる?一般的なデータソースとは異なる?
と思い確認したところ、データ行数制限は無関係でした。
試しに5件にしても50件くらい取れたので問題なさそうです。なのでTop1100件までが上限と思われます。

データ行の制限を5にしてもそれ以上のデータがコレクションに入ってくれた。

表示名が別環境でかぶる可能性あり →環境でフィルターは最低限必要か

上記の方のアプローチだと全体から取ってくるので複数環境があって同じ名前のアプリがある場合はアプリ名が重複する可能性があります。
同じ環境内であれば同名アプリは作れないよう怒ってくれますが、他環境へのインポートは同じ名前にしているはずなので。(その可能性がないまたはアプリ名自体変更している場合は大丈夫ですが)

また、全環境でその方が1100アプリ以上権限があったら同様に取れないのかと
(1100件まで行くことはほとんどないと思いますのでこの点はスルーでもいいかも)

なので環境でのフィルターは最低限必要なのかと思います。フィルタークエリ部分で環境IDでフィルター、
かつTop1100までとすればまずカバーできるのかなと思いました。
環境のフィルタークエリとTop1100した結果に対して表示名でフィルター(Lookup)する実装したのが以下です。

結局表示名と環境IDのべた書きが残る

環境IDって動的に取れるの? 

表示名はまだいいとして、この環境IDは提供されていたっけ?と調べたところ、基本的にはなし。。
Dataverseが使えるプレミアムプランであれば環境変数を持っているテーブルに元からあるのでアプリのみでそれを使えますが、通常プランの場合はAutomateであればプレミアムなしで使える様子。
ただソリューション化していないとAutomateでもこの環境変数の項目は出てこない認識(ちがったかな?)

解決済み: PowerA に現在の環境名を表示する – パワー プラットフォーム コミュニティ (microsoft.com)

有償プランならいけるとは言えるか

上記でアプリまたはフローで動的に環境IDを取得して、それをアプリ上のフィルターに指定して、
表示名で取ってくれば、環境が変わっても動的にアプリIDを正しく取れそうではあります。

が、結局はアプリ名はべた書きORどっかに保持して読み込みが必要ですし、万一その人の権限のあるアプリが1100件以上同じ環境にあると取れない可能性がある、そもそもこれやるのが面倒。。。

それなら、アプリIDはべた書きでインポート時に都度編集するか、SPOやDataverseに保持して読み込むか、ソリューション化しているなら環境変数を使えばいいし。という結論になり、ここまでで終了ー。となりました。

おわりに

今回は昔から要望されているアプリIDを簡単に取得できる方法を探してみたんですが、
あるにはあるけど場合によっては使えないなあ。面倒だし。的な結果だったという記事でした。
検索した結果の記事では出来るよってなっていても、場合によっては難しいケースもあったりするので、その点は要注意ですね。

今回紹介した「Power Apps for Makesコネクタ」については、今のアプリIDを取得する用途よりも、ユーザーに権限のあるアプリを管理する目的で使用するには便利かと思いますー。

それでは。

この記事は役に立ちましたか?

もし参考になりましたら、下記のボタンで教えてください。

ヨウセイ

ヨウセイ

一般職からSharePoint、C#、.NET系技術者へ、そこからPower App、Power Automate技術者へと転身。 ワンランク上のおっさんはPower Appsでシステム開発が出来る〜! qiitaや自社HPでも技術ブログを書いていました。

関連記事

コメント

この記事へのコメントはありません。

CONTENTS