ユーザー定義型(User Defined Type:UDT)を使ったSPO複数行テキストへのJSON登録、ParseJSONのサンプル

はじめに

前回の記事でユーザー定義型(UDT)について概要やサンプルを記事にしました。
その中でサクッと作ってみたSPOへのJSON文字列で情報保持、それを戻して使うサンプルを記事にしました。
※サンプルなので登録部分などは適当です。ご容赦ください。

この記事は、Microsoft Power Apps Advent Calendar 2024 12月14日担当分の記事です。

ユーザー定義型の概要、利用設定などは前回記事ご参考ください。

NOTE!本機能は試験段階のため今後更新や挙動変更となる可能性が十分あります。実運用アプリへの適用などはお勧めできないため、用途に合わせてご利用ください。

サンプルアプリ動画

SPO複数行テキストにJSONで登録、ParseJSONするサンプル

以下ではサンプルで作ったSPO複数行列(明細情報列)にテーブル形式で明細(No、名前、単価、数量、合計)×複数行でJSON文字列として登録、それをParseJSONで戻している例です。

NOTEサンプルとしてSPOの複数行へJSONとしてデータ保持するアプリを作っていますが、JSON化して保持する場合はその後のデータ活用が難しいと思います。通常はそれぞれのリストでリレーションしての保持が望ましいです。(大容量であればDataverse推奨)
あくまでサンプルの位置づけであり、重要でない付加情報をJSON保持する場合などにご参考いただければと思います。

SPOリストに複数行テキスト列で「明細情報JSON」を作成

デモ用にJSONを登録する用のアプリを作成

さらっと作ったサンプルアプリです。レコードのフォームにテーブルコントロールを突っ込んで明細データを登録できるようにしています。(サンプルなのでご容赦ください。実用の場合はしっかり作ってもらえればと)

ユーザー定義型をApp.Formulasに定義する

定義する場所はユーザー定義関数と同じくApp.Formulasとなります。
書式は以下の感じのようです(動画からの推測と実装サンプルより)
レコード型の場合とテーブル型の場合とサンプルを用意しました。

  • ユーザー定義型名を付けて半角スペース、そのあとに「 := 」を付けます
  • そのあとに「Type( ) 」を付けます。この中に型を定義します
  • 列名を指定して「 : 」の後に型名を指定します。用意されている型は以下の10種のようです。(ユーザー定義関数同様)インテリセンスで表示されます。
  • 末尾にはセミコロン「;」を付けます。

Code【テーブル形式のサンプル】
JSONDef := Type([{No:Number, 名前:Text, 単価:Number, 数量:Number, 合計:Number}]);

上記のテーブル側の方を今回のアプリで利用しています

ParseJSONでユーザー定義型を使って型指定する

こちらに対してサンプルアプリではレコード選択時に、明細情報JSON列から取ってきた情報をParseJSON、ユーザー定義型で型指定したものをコレクションに格納しています。

Code//レコードの明細情報JSON列に入っているJSON文字列をParseJSON、ユーザー定義型で型指定してコレクションへ格納
ClearCollect(meisaiCol, ParseJSON(LookUp(UDF検証用,ID=ThisItem.ID,明細情報JSON),JSONDef));

型指定しコレクションにしたものをテーブル(やギャラリー)に指定

上記コレクションをテーブルコントロールのItemsに指定します。
この時点で定義されている列がフィールドとして指定が出来ます!

サンプルではこちらにデータを足すために右側に追加コントロールを適用に用意して追加してます。

JSON文字列でSPOリストの複数行列へデータを更新(フォームの場合)

フォームを使っているのでSubmitFormで更新したいと思います。
明細情報JSON列のデータカードのプロパティ:Updateを以下のように調整します。

Code//データカードのUpdateをコレクションをJSON関数でJSON文字列にしたものにする
JSON(meisaiCol,JSONFormat.Compact)

※今回フォーム内に入れての更新ですが、Patchで更新する場合でも同様にコレクションをJSON関数で文字列にすればOKです

上記で適当にデータを登録してSubmitFormすると以下のようにSPOにコレクションがJSON文字列化されたデータが入ります。

リロード時などもそのままテーブルにデータが表示されます。

これを先ほどのレコード選択時にParseJSONで型定義し、型を合わせてテーブルコントロールにデータ表示しています。

従来だとForAllして型定義、かつ列名.Valueとなる形式を調整が必要だったがとてもスマートに!

前回記事にも書きましたが、従来はForAll、型指定し再定義が必要でした。たとえば先ほどの実装を行う場合、以下のような感じでParseJSONしたデータをテーブル化してForAllで各項目に型定義しながら再指定してあげる感じです。

TIPS比較するとものすごくスマートになっていますし、ループ処理(それほど負荷ないらしいが)も不要でパフォーマンスもよさそうですね。
メンテナンス性の面でも完全にユーザー定義型がいいと思います。
※ただし現時点試験段階なので、プレビューやGAまでは待つのが良いかとは思います

おわりに

今回はSPOリストへJSON文字列でデータ保持させ、ParseJSONで型指定してそのまま使うサンプルをご紹介しました。動画も作ったのでユーザー定義型の使い方の一つとしてご参考ください。それでは!

関連記事

関連ポスト

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

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

ヨウセイ

ヨウセイ

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

関連記事

コメント

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

CONTENTS