Param関数 でアプリ起動時に指定ページを開く、他

はじめに

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

公式リファレンスは以下です。

ぴーたくん

この機能の記事自体は前から色々出ているよ。
新しめ要素としてレスポンシブレイアウト自動生成アプリのサンプルを載せてるよ。

アイテム詳細画面へ遷移するサンプル(スマホ版)

スマホレイアウトで自動生成したアプリでのサンプルです。
主な手順は以下です。

  1. OnStartにパラメータがある場合に変数にレコード格納を実装
  2. StartScreenにパラメータ有無で遷移画面切り分けを実装
  3. ギャラリー画面の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つと用意して使用できます。

IDが指定した数値の詳細ページが開けばOK

その他調整(必要に応じて)

上記で基本実装は出来ています。実際に実装する場合、その他要素もあると思うので、必要に応じて実装を確認・調整ください。

例えば、パラメータで直接詳細画面を開く場合には、戻るアイコンに「Back()」としていても効きません。
そのためBack()としている場合はNavigate(一覧画面)のように明示的に指定する必要があります。

また、ギャラリーのSelectedからCurrentItem変数に変更した部分で他に影響がある場合は調整するなどですね。
画面遷移や追加、更新などアプリの動作を確認し、想定外の動きがないかを確認しておきましょう。

自動生成レスポンシブアプリのサンプル

次に同じデータソースでレスポンシブレイアウトで自動生成したアプリの場合の調整です。
この場合は1画面構成となりますね。そのため画面遷移は不要となりますが、
初期選択をパラメータのアイテムIDで指定した状態で開くように調整するサンプルです。

自動生成アプリでは最初からギャラリーのDefautプロパティが以下のようにCurrentItem(コンテキスト変数)となっています。
またOnSelect時にもThisItemをCurrentItemに格納する実装となっています。

自動生成アプリのギャラリー部

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

ギャラリーのDefault(最初に選択される値)は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です。同様に公開、再生してから動作確認し、指定アイテムが選択された状態で開くことを確認しましょう。

パラメータitemIdに5を指定して開いた場合

その他実装イメージ

上記のようにアイテム(レコード)を指定して開かせたいケースは多いと思います。

承認系でメールを送る際に対象アイテムが開くURLリンクを付けて送る。
また、詳細画面上に承認、却下のボタンを表示しておき画面上で承認処理ができるようにする。など

その他にも検索フィルターの初期値を指定したり、画面表示を切り替えたりと
使い道は色々ありますのでサンプルを参考に調整してみてください。

おわりに

今回はParam関数を使ったアプリ起動時の制御について、アイテム画面への遷移や既定値指定、関連実装について解説しました。
承認系アプリでメール内にURLリンクを入れたいという要件はよくありますし、実装についても複雑ではないので、取り入れやすい機能かと思います。
ご興味ある方はチャレンジしてみてください。それでは。

追記

URLコピー機能

Copy関数を使ったURLリンクコピー機能もユーザーの使い勝手向上のため良い機能だと思います。
こちらについての記事も書きました!

アプリ設定リスト

アプリIDなどをアプリ設定リストを作成してそちらを参照して使用する記事を書きました。
開発、本番など複数アプリを運用する場合には参考となるかもです。

アプリID、URLの取得について

自分のアプリIDやURLの取得は通常では提供されていないのでサンプルではべた書きとなっています。
取得方法はあるにはあるようでしたが、正確に取得するには結局アプリ名や環境IDが必要になってくるのであんまり意味がないなと感じました。
そもそも別テナントへインポートする用途がなければべた書きでも困りませんし。わかりやすくOnStartに変数で書いておくかくらい?

NOTE個人的には別テナントを使う環境へ移行する場合は、べた書きしてのアプリ編集や管理リスト作りそっちを参照する、ソリューション化している場合は環境変数に持たせるなどの対応がよさげな印象です。

上記、アプリIDやURLの取得を探った記事は近日公開予定です。

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

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

ヨウセイ

ヨウセイ

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

関連記事

コメント

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

CONTENTS