カスタムコードでParseJson[PowerApps]

概要

しょうもないですが、カスタムコードでParseJson関数を作成。

PowerAppsのJSON関数の逆で、JSONを解析してコレクションやオブジェクトとして扱えるようにします。
EAVパターンをリレーショナルデータでなくJSONで管理したい場合に使えるかも・・・

f:id:RamboPy:20210923002752p:plain

方法

カスタムコネクタを作成し、以下のカスタムコードを貼り付けて作成します。
作成すると、PowerAppsから「コネクタ名.アクション名()」の形式で関数のように呼び出すことができます。
ClearCollect(colItemSpec, cc_ParseJson.FashionItemSchema({json:TextInput_JsonText.Text}));

ただし、関数の戻り値である応答スキーマを動的に変化させることはできないので、
事前に一JSONスキーマごとに一アクション作成しておく必要があります・・・

カスタムコード

JSONテキストを受け取って、中身をapplication/jsonとして応答することでカスタムコネクタ側でオブジェクトとして扱うことができます。
C#ですがローコードです。

※バリデーションはありません。
全アクションでコードは共通です。

    public class Script : ScriptBase {

        public override async Task<HttpResponseMessage> ExecuteAsync() {

            var reqBody = await Context.Request.Content.ReadAsStringAsync().ConfigureAwait(false);
            
            var response = new HttpResponseMessage();
            response.Content = CreateJsonContent(JObject.Parse(reqBody)["json"].ToString());

            return response;
        }

    }

アクションの作成

以下のようにスキーマごとにアクションを定義します。
テストが完了したら応答スキーマも登録して定義します。

f:id:RamboPy:20210923003203p:plain

f:id:RamboPy:20210923004134p:plain

参考

上記の方法はプレミアムコネクタが必要ですが、単純なJSONならPowerApps関数でParse可能です。
MatchAll関数を使います。
qiita.com