LoginSignup
13

More than 1 year has passed since last update.

Power Apps と Record/Table型変数 と Collection と JSON のまとめ

Last updated at Posted at 2022-12-13

この記事は、Microsoft Power Apps Advent Calendar 2022に参加しています。
カレンダー1 の 14日目 です。

はじめに

Power Apps において、Collection や JSON を利用するケースは様々ですが、主に

  • コネクタやAPIからの応答
  • Power Automate への連携部分

でのシーンが多いと思います。

とっつきにくい感のあるJSONですが、使いこなすと非常に強力です。

しかし、Power Apps では、Collection と JSON で扱い方は大きくが異なりますし、Record/Table型変数も存在します。

この記事では、Power Apps における Record/Table型変数 と Collection と JSON の違いと、作成方法、扱い方について記載します。

前提

当記事は、気ままに勉強会 #32 JSON リターンズで登壇した内容の一部を含みます。
Power Automate をメインに、Power Platform について扱う勉強会になりますので、ご興味ある方は是非ご参加ください。

また、当記事では、上記で利用したスライドからスクリーンショットを引用します。
実際のスライドは以下をご覧ください。

Power Apps における Record/Table型変数 と Collection と JSON

この記事で扱う3種は、どれも構造化データとして扱うことが可能です。

① Record/Table型変数

UpdateContext()Navigate()set() といった関数を使用し、[ ]{ } で囲まれた配列やレコード( {列名:値} の形状を持つ )とTable()関数でテーブルを代入したもの。
下記、② Collection を代入することも可能。

Set(tbl, [ "値1", "値2", "値3" ])
Set(rec, { 列1:"値1", 列2:"値2", 列3:"値3" })
Set(tbl, Table({ 列1:"値1", 列2:"値2", 列3:"値3" },{ 列1:"値4", 列2:"値5", 列3:"値6" }))
Set(tbl, col))

代入するデータについて、キー値(列1など)をダブルクォーテーションで囲んではいけません。(JSONではありません)

② Collection

Collect()ClearCollect() といった関数を使用し、[ ]{ } で囲まれた配列やレコード、およびテーブルを代入したもの。
上記、① Record/Table型変数 を代入することも可能。

ClearCollect(col, [ "値1", "値2", "値3" ])
ClearCollect(col, { 列1:"値1", 列2:"値2", 列3:"値3" })
ClearCollect(col, { 列1:"値1", 列2:"値2", 列3:"値3" },{ 列1:"値4", 列2:"値5", 列3:"値6" })
ClearCollect(col, rec)
ClearCollect(col, tbl)

③ JSON

JSON()関数を使用し、[ ]{ } で囲まれた配列やレコード、およびテーブルを代入したもの。
上記 ① Record/Table型変数 や ② Collection を代入することも可能。
JSON()関数の戻り値は文字列(テキスト)型です。

Set(txtJSON, JSON( [ "値1", "値2", "値3" ] ))
Set(txtJSON, JSON( { 列1:"値1", 列2:"値2", 列3:"値3" } ))
Set(txtJSON, JSON( [ { 列1:"値1", 列2:"値2", 列3:"値3" },{ 列1:"値4", 列2:"値5", 列3:"値6" } ] ))
Set(txtJSON, JSON( rec ))
Set(txtJSON, JSON( tbl ))
Set(txtJSON, JSON( col ))

Record/Table型変数 と Collection

Record/Table型変数 と Collection は似ていますが、以下のような違いがあります。

  • Collectionでのみ、Patch()Collect()Update()Remove()といったCollection操作関数が動作する
  • CollectionでのみSaveDate()LoadData()が動作する

また、データ代入時にも違いがあります。

Record/Table型変数 と Collection の作成

image.png

Record/Table型変数 と Collection の作成ルールです

二つのデータ型に対しレコードの形式をもつデータを代入すると、異なった構造でデータを格納します

また、気を付けなくてはいけないのが、配列([ ]で囲まれる )をTable型変数やCollectionに格納すると、"Value"をいうキー値(カラム)が暗黙的に付与される点です。

これは、要素がオブジェクトの構造( { }で囲まれる場合も同様です)

ClearCollect(colTable2,[{列1:"値1", 列2:"値2", 列3:"値3" },{ 列1:"値4", 列2:"値5", 列3:"値6" }]);

をCollectionに格納し、JSON化すると以下の状態に変換されていることがわかります。

[{"Value": {"列1": 値1,"列2": 値2,"列3": 値3}},{"Value": {"列1": 値4,"列2": 値5,"列3": 値6}}]

上図ではset()関数を例としてますが、UpdateContext()Navigate()の場合は、コンテキスト変数の定義方法に従います。

UpdateContext( { tbl: [ "値1", "値2", "値3" ] } )

Record/Table型変数 と Collection の操作

image.png

Record/Table型変数 に対して、Patch()Collect()Update()Remove()といったデータ操作関数の利用はできません。

目的の値を取得する際は下記の記事が役に立つと思います。

JSON の作成

Power Apps で JSON を作成する場合は、前述のとおり、JSON()関数を使用します。

image.png

上記で Record/Table型変数 と Collection の性質を理解していると、生成されるJSONの内容も理由がわかると思います。

JSON を扱う

image.png

待望のParseJSON()関数(Preview段階)を利用し、JSONの各要素の値を取得可能です。

image.png

ParseJSON()関数は、指定した要素に対し、型指定されていないオブジェクトを返すため、明示的に型変換関数を使用する必要があります。
また、テーブルのレコードフィールドには、JSONの解析によりValueという名前のカラムが付与されるため、Value.[テーブルのカラム名]を指定します。

さいごに

Record/Table型変数 と Collection そして JSON 似ているようで、少しずつ仕様と動作が異なります。
これらにハマらないように、しっかり仕様を押さえていただければ!

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
13