はじめに
Param関数ではパラメータを渡してアプリを起動することが出来ます。
パラメータを使ってアプリ起動時に特定の画面を指定(レコード詳細画面など)やフィルター初期値を指定して開くなどに活用できます。
今回は自動生成アプリをベースに指定したアプリ詳細画面へ遷移する実装サンプルを紹介しようと思います。
スマホ版とレスポンシブレイアウト版それぞれご紹介します。
公式リファレンスは以下です。

この機能の記事自体は前から色々出ているよ。
新しめ要素としてレスポンシブレイアウト自動生成アプリのサンプルを載せてるよ。
アイテム詳細画面へ遷移するサンプル(スマホ版)
スマホレイアウトで自動生成したアプリでのサンプルです。
主な手順は以下です。
- OnStartにパラメータがある場合に変数にレコード格納を実装
- StartScreenにパラメータ有無で遷移画面切り分けを実装
- ギャラリー画面のSelect、フォームのItemプロパティの調整
① OnStartでパラメータ判定
App.OnStartに以下を実装します。パラメータの名前は「itemId」としています。
これが空でなければ、変数「CurrentItem」にデータソースから対応するアイテムを取得し保持しています。
Code//App.OnStart:
If(!IsBlank(Param(“itemId”)),
Set(CurrentItem,LookUp(商品リスト,ID=Value(Param(“itemId”))));
);

② StartScreenで画面切り替え
App.OnStartScreenを開き以下実装します。パラメータの有無で遷移する画面を切り替えています。
Code//App.StartScreen
If(!IsBlank(Param(“itemId”)),DetailScreen1,BrowseScreen1)

③ ギャラリーのOnSelectを調整、フォームのItemを調整
ギャラリーを開き、OnSelectを以下のように調整します。
変数CurrentItemにThisItemを格納するを追加
Code//ギャラリーのOnSelect
Set(CurrentItem,ThisItem); ←この処理を追加
Navigate(DetailScreen1, ScreenTransition.None);


次のフォームのItemプロパティをギャラリーのSelectedからCurrentItemに変更します。
DetailFormとEditFormをそれぞれ変更しています。
Code//フォームのItem
CurrentItem
//BrowseGallery1.Selected



動作確認(アプリ公開・再生)
上記で基本的には実装が出来ています。この段階で保存して公開、アプリ再生で動きを確認しましょう。
Param関数は編集プレビューでは確認できないので、必ず公開して再生で試しましょう。
・アプリのURLを取得して最後にパラメータを追加する。
アプリURLを取得します。開いているアプリの上部URLでもいいですし、以下アプリの詳細画面から取得も可能です。
★アプリのリンクはURLおよびアプリIDを使うことが出来ます。今回はURLを使っています。

・URLの末尾に以下のようにパラメータを追加してブラウザで開く。
TIPSURLのクエリパラメータは一つ目のパラメータは「?=」で、以降は「&=」 となります。
アプリのURLにはtenantidなどの他のパラメータがすでに含まれていますので
おおむね&でつなげて追加する形となります。
※元のパラメータで一部無くてもよいものもありますが、とりあえずそのまま使うで問題はないです。
Codeこの例の場合は<URL>&ItemId=1 など
★パラメータは複数指定可能です。サンプルでは1つですが、2つ、3つと用意して使用できます。

その他調整(必要に応じて)
上記で基本実装は出来ています。実際に実装する場合、その他要素もあると思うので、必要に応じて実装を確認・調整ください。
例えば、パラメータで直接詳細画面を開く場合には、戻るアイコンに「Back()」としていても効きません。
そのためBack()としている場合はNavigate(一覧画面)のように明示的に指定する必要があります。
また、ギャラリーのSelectedからCurrentItem変数に変更した部分で他に影響がある場合は調整するなどですね。
画面遷移や追加、更新などアプリの動作を確認し、想定外の動きがないかを確認しておきましょう。
自動生成レスポンシブアプリのサンプル
次に同じデータソースでレスポンシブレイアウトで自動生成したアプリの場合の調整です。
この場合は1画面構成となりますね。そのため画面遷移は不要となりますが、
初期選択をパラメータのアイテムIDで指定した状態で開くように調整するサンプルです。
自動生成アプリでは最初からギャラリーのDefautプロパティが以下のようにCurrentItem(コンテキスト変数)となっています。
またOnSelect時にもThisItemをCurrentItemに格納する実装となっています。


ギャラリーのOnSelect コンテキスト変数CurrentItemに格納している

そのため、パラメータがある場合はCurrentItem変数に指定アイテムを格納すればよいです。
ただ、スマホ版アプリのようにOnStartにSet関数(グローバル変数)で指定しても、
画面内に同じ名前のUpdateContext変数(コンテキスト変数)があるので、そちらが優先され効きません。
またApp.OnStartにはコンテキスト変数は指定できない(画面上の変数のため)ので、
今回は、画面のOnVisibleにコンテキスト変数として実装する形になります。
TIPSSet関数はグローバル変数となり、アプリ上で共通して使用する変数です。
対してUpdateContext関数はコンテキスト変数となり、画面上でのみ使用できる変数となります。
それぞれスコープが異なります。同じ名前の場合はコンテキスト変数が優先されます。
※気付かずにそれぞれ同名の変数を作った場合に「変数が更新されない!?」という躓きが結構あったりします。おかしいな?と思ったら変数メニューから検索するなどでチェックしてみましょう。
Set,UpdateContext関連:Power Apps Power Fx 数式リファレンス カテゴリ別チートシート | Power Apps Tips ログ (youseibubu.com)
Code//MainScreenのOnVisibleプロパティ
If(!IsBlank(Param(“itemId”)),
UpdateContext({CurrentItem:LookUp(商品リスト,ID=Value(Param(“itemId”)))});
);

上記を追加するだけでOKです。同様に公開、再生してから動作確認し、指定アイテムが選択された状態で開くことを確認しましょう。

その他実装イメージ
上記のようにアイテム(レコード)を指定して開かせたいケースは多いと思います。
承認系でメールを送る際に対象アイテムが開くURLリンクを付けて送る。
また、詳細画面上に承認、却下のボタンを表示しておき画面上で承認処理ができるようにする。など
その他にも検索フィルターの初期値を指定したり、画面表示を切り替えたりと
使い道は色々ありますのでサンプルを参考に調整してみてください。
おわりに
今回はParam関数を使ったアプリ起動時の制御について、アイテム画面への遷移や既定値指定、関連実装について解説しました。
承認系アプリでメール内にURLリンクを入れたいという要件はよくありますし、実装についても複雑ではないので、取り入れやすい機能かと思います。
ご興味ある方はチャレンジしてみてください。それでは。
追記
URLコピー機能
Copy関数を使ったURLリンクコピー機能もユーザーの使い勝手向上のため良い機能だと思います。
こちらについての記事も書きました!

はじめに 今回は以前もQiitaの方でご紹介したCopy関数を使ったURLコピー機能と非対応時の対応サンプルです。サンプルとして前回ご紹介したParam関数を使ったレコードを指定したURLを使います。 Param関数の記事はこちらCopy関数について Copy関数は今年2023年...
アプリ設定リスト
アプリIDなどをアプリ設定リストを作成してそちらを参照して使用する記事を書きました。
開発、本番など複数アプリを運用する場合には参考となるかもです。

アプリ設定リストのサンプル (メンテナンスモード、URL、アドレスなど)
はじめに 今回はキャンバスアプリを使用する際、アプリ自体の設定項目を管理するリストの作成・使用例についてご紹介します。開発ではよく開発環境で開発→検証環境で検証→本番環境で運用という感じでアプリを移送して運用します。こういった場合にその環境ごとに変わる値があります。共通のURLだとか送信用メ...
アプリID、URLの取得について
自分のアプリIDやURLの取得は通常では提供されていないのでサンプルではべた書きとなっています。
取得方法はあるにはあるようでしたが、正確に取得するには結局アプリ名や環境IDが必要になってくるのであんまり意味がないなと感じました。
そもそも別テナントへインポートする用途がなければべた書きでも困りませんし。わかりやすくOnStartに変数で書いておくかくらい?
NOTE個人的には別テナントを使う環境へ移行する場合は、べた書きしてのアプリ編集や管理リスト作りそっちを参照する、ソリューション化している場合は環境変数に持たせるなどの対応がよさげな印象です。
上記、アプリIDやURLの取得を探った記事は近日公開予定です。
この記事は役に立ちましたか?
もし参考になりましたら、下記のボタンで教えてください。
コメント