LoginSignup
1
1

More than 1 year has passed since last update.

Power Automate の 条件アクション に値を指定した時の型について改めて整理してみた

Last updated at Posted at 2022-12-20

条件アクションに指定した値はどの型として扱われるのか

Power Automate にはデータ型の概念が一応ありますが、分かりやすさのためか条件アクションにおいて、値を設定したときにどんな型で扱われるのか不明確なインターフェースになっています。

例えば

  • 整数変数 Int と 整数値 10 がイコールであるかを判定する
    image.png
    このケースは正しく判定でき、変数に 10 が入っていれば「はいの場合」に進みます。

  • 文字列変数 Str と 文字列 "こんにちは" がイコールであるかを判定する
    image.png
    これも正しく動作するでしょう。しかし・・・

  • 文字列変数 Str と 文字列 "10" がイコールであるかを判定する(半角の数値を文字列として判定したい)
    このような時、
    image.png
    のようにしてしまうと、正しく判定できません。
    正しくは、
    image.png
    のように指定してあげる必要があります。
    しかも、保存して開きなおすと敢えて入れたダブルクォーテーションは画面上からは消え去ります。(2022年12月現在。この仕様は本当に良くないと思います・・・)
    なお、シングルクォーテーションでの指定はNGです。シングルクォーテーションも文字列の一部として扱われてしまいます。

これらは、条件アクションが画面上で入力された値の内容から型推論していることから発生しているものと思います。
本稿では、初心に立ち返ってPower Automateの条件アクションにおける型推論の結果について改めて整理してみました。

結果

検証ベースで試してみて、いくつかのパターンに整理してみました。
以下4列の表でまとめています。

  • 期待する型
    → 指定した値をどの型で判定してほしいか
  • 実際に指定する例
    → 条件アクションの入力ボックスに指定する値
  • 推論される型
    → 指定した値が実際に取り扱われる型
  • フロー定義に書き込まれる値
    → フロー定義(JSON)としてどのように定義されるか(末尾に補足)

あまり意識せずにそのままいけそうなパターン

期待する型 実際に指定する例 推論される型 フロー定義に書き込まれる値
整数値 10 整数値 10
浮動小数点数値 3.14 浮動小数点数値 3.14
文字列 こんにちは 文字列 "こんにちは"
文字列 "こんにちは" 文字列 "こんにちは"
文字列 10
※全角数字
文字列 "10"
真偽値 true 真偽値 true
真偽値 false 真偽値 false

意識しないとハマる可能性のあるパターン

期待する型 実際に指定する例 推論される型 フロー定義に書き込まれる値
整数値 10
※全角数字
文字列 "10"
浮動小数点数値 3.14
※全角数字
文字列 "3.14"
文字列 'こんにちは' 文字列 "'こんにちは'"
文字列 10 整数値 10
文字列 "10" 文字列 "10"
真偽値 True 文字列 "True"
真偽値 TRUE 文字列 "TRUE"
真偽値 False 文字列 "False"
真偽値 FALSE 文字列 "FALSE"

補足:フロー定義に書き込まれる値 について

フローの中身はJSONで定義されていますが、条件アクションに指定した値がどのように推論されたかを確認するためにフロー定義を確認しました。今回は簡易的に、アクションのコピー機能を用いて確認しています。
image.png
上記のようなアクションのフロー定義を確認すると(↓)、
operationDefinition.expression.equals の2要素目が "'10'" となっていることが確認できますね。

フロー定義
{
    "id": "XXXXXXXXXXXXXXXXXX",
    "brandColor": "#484F58",
    "connectionReferences": {},
    "connectorDisplayName": "制御",
    "icon": "XXXXXXXXXXXXXXXXXX",
    "isTrigger": false,
    "operationName": "条件",
    "operationDefinition": {
        "type": "If",
        "expression": {
            "equals": [
                "@variables('Str')",
                "'10'"
            ]
        },
        "actions": {},
        "runAfter": {
            "変数を初期化する": [
                "Succeeded"
            ]
        },
        "metadata": {
            "operationMetadataId": "XXXXXXXXXXXXXXXXXX"
        }
    }
}

今回の内容は、あくまでも条件アクションについてまとめたものです。
特に、数式において条件式で文字列を扱う際には、文字列リテラルとしてシングルクォーテーション(')を利用する必要があるので、混同しないように注意してください。

1
1
0

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
1
1