9
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Teamsのタブ内のPowerAppsアプリに動的にパラメータを渡す

Last updated at Posted at 2022-08-26

今回はPowerAppsでアプリを開発している過程(それをフォローしている過程)で遭遇した問題についてのトラブルシューティングです。

Background

  • PowerAppsでアプリを構築している。
  • 当該アプリはTeamsのチームのチャネル内のタブに埋め込み表示する。
  • OutlookのメールやTeamsのメッセージ内のリンクから当該アプリに画面遷移する経路を用意する。
  • 遷移の折、アプリで特定のデータ(IDで指し示される)を初期表示したい。
  • 当該データはメールやメッセージによって異なる(データのIDは動的に決まる)。

Problem

PowerAppsのアプリをWebブラウザで表示するのであれば、URLのクエリ文字列の中に任意名称のパラメータを指定することができる(例:...&itemId=123)。
しかしTeamsのチームのチャネルのタブ内にアプリを埋め込み表示している場合、当該タブを指すURL(「タブへのリンクをコピー」で取得)にクエリ文字列を追加しても効果がない。

image.png

「タブへのリンクをコピー」で取得できるURLはあくまでもそのタブを指すURLであって、タブの中に表示されるコンテンツについてのURLではない。

Solution

「タブへのリンクをコピー」で取得できるURLのクエリ文字列の中に含まれる context=... にURLエンコードされたJSONの形式で情報を埋め込むことで解決できる。

URLのクエリ文字列部分をよく見ると、 context=... というキーでもってJSON形式のデータが埋め込まれている(読みやすさのため?&の前で改行を挿入している):

https://teams.microsoft.com/l/entity/a6b6....7af9/_djb2_msteams_prefix_3...
?context=%7B%22subEntityId%22%3Anull%2C%22channelId%22%3A%2219%3A...3e99%40thread.skype%22%7D
&groupId=34fd...ee05
&appid=364a...2ed6

context=... の値はURLエンコードされている。デコードすると以下のように、JSON形式のデータであることがわかる:

{"subEntityId":null,"channelId":"19:b853....3e99@thread.skype"}

ここでsubEntityIdというプロパティがありながらあえてnull指定されていることがわかる。
この値は何なのかとMicrosoft社のドキュメントを見てみると、次のような説明が見つかる:

このコンテンツが指すサブページの開発者定義の一意の ID。 このフィールドは、特定のコンテンツへのスクロールやアクティブ化など、ページ内の特定の状態に復元するために使用する必要があります。

今回の目的にぴったりなプロパティであることがわかる。

PowerAppsアプリのOnStartアクションでこのプロパティの値を取り出して変数に設定する式を追加する:

Set(subEntityId, Param("subEntityId"))

image.png

あとはこの値を必要とする別の式やコントロールから参照するだけ。

こうしてPowerApps側アプリで準備ができたら、先ほどのURLのうち %22subEntityId%22%3Anull(デコードすると"subEntityId":null)とある箇所に、 %22subEntityId%22%3A123というふうに任意の値を記述する:

https://teams.microsoft.com/l/entity/a6b6....7af9/_djb2_msteams_prefix_3...
?context=%7B%22subEntityId%22%3A123%2C%22channelId%22%3A%2219%3A...3e99%40thread.skype%22%7D
&groupId=34fd...ee05
&appid=364a...2ed6

これでメールやTeamsメッセージからURLを使って(Teamsに組み込まれた)アプリに画面遷移した時、subEntityIdで指定されたデータを初期表示するという動きが実現できる。

なお、前掲資料ではcontextのプロパティとして他にもいろいろなものが列挙されている。
しかし私がほんの二三試してみた限りではsubEntityIdのように画面遷移時のパラメータとして活用できるものはあまり(or まったく)ないようである。

参考記事

9
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?