はじめに
Power AppsからPower Automateを呼び出し、Power AutomateからPower Appsに値を返す場合、以下のようなエラーが表示される場合があります。
JSON 解析エラー。必要な 'ブール値' に対して '文字列' です。
まず結論から書くとこのエラーは以下条件下で発生することを現在(2024/02/27)私の方では確認しています。
- Power Automateを旧デザイナーで編集している
- Power Appsへ返す値の型を変更した
検証
新しいデザイナーでフローを作成した場合
まずは、以下のようにPower AutomateからPower Appsへ「文字列」のデータを返すだけのフローを新しいデザイナーで作成します。
こちらのフローをPower Appsから呼び出してみます。
当然、「文字列」のデータを取得することができますね。
続いて、Power Appsに返すデータを「文字列」から「ブール値」に変更してみます。
当然、「ブール値」のデータを取得することができますね。
ここまでが正常な動作です。
旧デザイナーでフローを作成した場合
さて、続いて旧デザイナーでPower AutomateからPower Appsへ「文字列」のデータを返すだけのフローを作成します。
こちらのフローをPower Appsから呼び出してみます。
「文字列」のデータが返ってきます。
期待される動きですね。
さて、続いてPower Appsに返すデータを「文字列」から「ブール値」に変更してみます。
「ブール値」ではなく「文字列」の"False"が返ってきてしまいました。
"body": { "bool": "False" }
期待している結果と異なりますので、以下のように「JSON 解析エラー」が発生してしまっています。
JSON 解析エラー。必要な 'ブール値' に対して '文字列' です。
これは「ブール値」だけでなく、「数値」の場合などでも同様の結果になります。
JSON 解析エラー。必要な '数値' に対して '文字列' です。
まぁ、数値の場合Power Appsでの応答結果みるに数値で来てるように見えるんですけどね。
問題と解決策
新しいデザイナーに戻して保存しなおす(解決しません)
新しいデザイナーでは上手くいってるので、新しいデザイナーに変更して保存しなおせばこの問題は解決するのでは?
と考えるかもしれませんがこれでは解決しないです。
コードの修正を行う
まずこの問題はフローにあり、そしてフロー側のアクション定義に問題があります。
新デザイナー、旧デザイナーのそれぞれの「コード ビュー」を見比べてみましょう。
新デザイナー
{ "type": "Response", "kind": "PowerApp", "inputs": { "schema": { "type": "object", "properties": { "bool": { "title": "bool", "type": "boolean", "x-ms-content-hint": "BOOLEAN", "x-ms-dynamically-added": true } }, "additionalProperties": {} }, "statusCode": 200, "body": { "bool": "@false" } }, "runAfter": {} }
旧デザイナー
{ "kind": "PowerApp", "inputs": { "statusCode": 200, "body": { "bool": "@{false}" }, "schema": { "type": "object", "properties": { "bool": { "title": "bool", "x-ms-dynamically-added": true, "type": "boolean" } } } }, "metadata": { "operationMetadataId": "15a88610-3083-4fbe-bcf7-7ed0cfe8ec3c" } }
差分というと、
- Power Appsに返す値("@false" と "@{false}")
- "metadata"の有無
の2か所ですね。
このうち問題なのは、Power Appsに渡している値です。
したがって、こちらの定義を修正します。
「クリップボードにコピー (プレビュー)」よりこちらのアクションの情報をコピーします。
その後、メモ帳などに貼り付けて以下のように {} で囲まれている箇所を削除します。
そのJSONを再度コピーし、「新しいステップ」 > 「自分のクリップボード」を開き、Ctrl + Vで貼り付けを行います。
すると、選択可能なアクションが増えますのでそのアクションを選択します。
こちらの操作に関しては昔こちらでGifで紹介していますので、動いている画面見たい方はこちらをご参照ください。
これにより追加されたアクションをみると、以下のように定義が書き換わっています。
{ "kind": "powerapp", "inputs": { "statusCode": 200, "body": { "bool": "@false" }, "schema": { "type": "object", "properties": { "bool": { "title": "bool", "x-ms-dynamically-added": true, "type": "boolean" } } } } }
これでPower Appsから再度フローを呼び出すと
無事エラーなく、「ブール値」の結果を取得することができました!
おわりに
新しいデザイナーでの不具合はちょくちょく目にしますが、古いデザイナーでの不具合(デグレ?)はちょっと珍しいですね。
古いデザイナーでフローの作成をされている方もまだまだ多いと思いますので、皆さまお気をつけくださいー