【Power Automate】Switchの型不一致対策|String・Integer・Floatの型変換

Power AutomateのSwitchでオン欄をint()に変換し、Float型をInteger型に揃えてケースの数値と型を一致させる解決方法を示した図 Power Automate

この記事でわかること

Power Automateの「スイッチ(Switch)」アクションで分岐しようとしたらエラーを吐きました。調べてみると、「オン」と「ケース」の型が揃っていないことが原因でした。この記事では、私が実際に出したエラーの解決方法をまとめます。

  • Switchが is of type ‘Float’ のエラーを吐く原因が「型不一致」だと分かる。
  • Switchの「オン」欄を int() で整数にし、「ケース」欄を素の数値で揃えると解決する。
  • ケース欄に指定できる値の型(リテラルか @parameters() だけ)が分かる。

結論:Switchの「オン」と「ケース」の型を揃える

私の場合は、次の方法で解決しました。

// オン欄(Integer に確定させる)
int(items('For_each')?['SectionNo'])

// ケース欄(式ではなく素の数値・リテラルで入力)
1

ポイントは、オン欄を int() で囲んで整数型に確定させ、ケース欄には動的コンテンツや式を使わず、キーボードから数字を直接入力することです。

Switchは「オン」と「ケース」が同じ型で揃っていないと、分岐条件を評価できません。以降に、私が順番に踏んだエラーを切り分けて振り返ります。

どんな状況で詰まったか

SharePointの名簿リストを「複数の項目の取得」で取得し、For each の中で各人の課番号(SectionNo)を使ってSwitchで分岐させようとしていました。

このとき「複数の項目の取得」の未加工出力を見ると、SectionNoは次のように出ていました。

"SectionNo": 1
未加工出力で "SectionNo": 1 がクォート無しで表示されている画面

シングルクォートが付いていないので文字列ではなく数値となります。この状態で、フローを走らせたのですが、下記のエラーが出て失敗しました。

フロー実行に失敗しました。 アクション 'スイッチ' に失敗しました: The execution of template action 'スイッチ' failed: The result of the evaluation of 'scope' action expression '@items('For_each')?['SectionNo']' is not valid. It is of type 'Float' but is expected to be a value of type 'String, Integer'.

エラーの原因

エラー①:「is of type ‘Float’」で落ちる

エラー文には It is of type ‘Float’ と書かれており、私の環境ではSectionNoが Float 型となっていました。JSONの見た目では Integer型 と Float型 が区別できないので、実際にフローを走らせるまで気づきませんでした。

実行履歴で is of type 'Float' のエラーが表示されている画面

エラー②:ケース欄に式は入れられない(リテラルかparameters()だけ)

もう一点、私はオン欄の型を Integer にした際に、型を合わせるためにケース欄に int(1) を入れたのですが、これはテストの時点で次のように弾かれました。

the value '...' specified for 'case' property ... contains expressions that are not supported. Only a literal of type string or interger or a '@parameters()' expression can be specified for the 'case' property.

エラー文中の interger は integer の誤りと思います。

Switchのケース欄に、int()関数が入っており、エラーが出ている画面

このメッセージから、ケース欄に指定できるのは「文字列型または整数型のリテラル」か、parameters() 式だけのようです。int()関数 はケース欄では使えませんでした。

解決手順

エラーの原因がSwitchのオン欄とケース欄の「型不一致」と「サポートされている式以外の入力」だったので、次の2つの修正をしました。

  • Switchのオン欄を int(items(‘For_each’)?[‘SectionNo’])にして Float型を Integer型にする
  • Switchのケース欄は、数字を直接入力する

これで、オン欄とケース欄の型が一致するのでエラーが解消されます。

Switchのオン欄に int() を設定した状態でフローが正常に実行された画面
Switchのケース欄に数値を設定した状態でフローが正常に実行された画面

型判定関数がないので、型はエラー文で確認する

今回困ったのは、私が調べた範囲では値の型を直接判定してくれる関数が見当たらなかったことです。「今この値はFloat型なのかInteger型なのか」を式だけで確かめる手段が分からなかったので、実際の型をエラーメッセージから読み取ることにしました。

まとめ

今回のポイントを整理します。

  • オン欄は int() で囲み、Integer型に確定させる。
  • ケース欄は式を使わず、素の数値でオン欄とあわせる。
  • 値の型が分からないときは、エラー文の is of type 'Float' などから読み取る。

数値の列は、JSONでは素直な数字に見えても型が分からないことがあります。同じところで詰まった方が、この記事でエラーが解決できれば嬉しいです。Power Platformを触り始めたばかりの方に向けて、こういった詰まりポイントをこれからも発信していきます。よかったらブログをブックマークして、またのぞきに来てください。

あわせて読みたい

この記事の前に読むとスムーズです。初心者がつまずく「式の書き方」はこちら。

【Power Automate】初心者がつまずく「式の書き方」|OData × WDL の使い分け
Power AutomateでODataとWDLの式の書き方が混乱する方向けに、複数の項目の取得のフィルタークエリ・アレイのフィルター処理・条件・Switchの4箇所での書き分けルールを、実際に組んだ業務フローの画面を交えて解説します。

コメント

タイトルとURLをコピーしました