Tips #019 リストから取得したアイテムの項目がNullだった場合、を条件分岐に使用したいゾ

https://qiita.com/Novskiiiiiiiiii/items/77580100ea15ed2f40a7

現在Microsoft Listを活用してとある申請フローを構築しようと日々悪戦苦闘している。

そんな中、条件に満たないアイテムに関してはエラーとして処理を分岐させたい、という願望がふつふつと湧き上がってきた。

単純な発想として、「複数の項目の取得」で取得された値を使って条件分岐をすればいいや、と考えてやってみたが、想定していた結果にならなかった。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3891071/0322aa31-5869-b0aa-1385-8af331de306d.png)

想定では取得された7件中、2件については対象フィールドがブランクなので、その2件については条件分岐でFalse側へ流れるはずだった。

が、対象フィールドがブランクでも分岐の結果がTrueになってしまった。

これはちょっと今後いろいろなフローを作っていく上でとんでもない障壁になる。

そう確信した私は急遽パリへ飛んだ。

そうしてたどり着いた結果がこれだ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3891071/4a9a98ac-8488-30f5-2c6a-5a86411283d1.png)

このフローでは、下の条件分岐において、str変数に入った値がブランクだったらTrue、そうじゃない場合はFalseに流れるように組んである。

1件目のアイテムはstr変数に値が入っているのでFalseに流れている。

では2件目のアイテムの処理の結果を見てみよう。
2件目のstr変数はブランクである。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3891071/2f5c57b6-08e6-93e9-9cec-4c5acd61248b.png)

お判りいただけるだろうか。

Trueに流れているのである。

私の悲願が達成された瞬間である。

ではそのからくりを説明しよう。

今回条件分岐に扱いたいフィールドは「財務経理user」というオブジェクト項目となる。
その前提で読み進めてくれたまえ。

まずオブジェクト変数を初期化する。

    {
      "type": "InitializeVariable",
      "inputs": {
        "variables": [
          {
            "name": "obj_user",
            "type": "object"
          }
        ]
      },
      "runAfter": {}
    }

続いて取得したオブジェクトの中から条件分岐に使いたい項目を格納するために文字列変数を初期化する。

    {
      "type": "InitializeVariable",
      "inputs": {
        "variables": [
          {
            "name": "str_zaimu_user",
            "type": "string"
          }
        ]
      },
      "runAfter": {
        "obj変数_obj_user": [
          "Succeeded"
        ]
      }
    }

その後、「複数の項目の取得」を設定しよう。

    {
      "type": "OpenApiConnection",
      "inputs": {
        "parameters": {
          "dataset": "https://**********.sharepoint.com/sites/internal-****-****",
          "table": "chomechomefugafugahogehoge",
          "$filter": "record_kbn eq '一般支払'"
        },
        "host": {
          "apiId": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline",
          "connection": "shared_sharepointonline",
          "operationId": "GetItems"
        }
      },
      "runAfter": {
        "str変数_str_zaimu_user": [
          "Succeeded"
        ]
      }
    }

それから、Apply to eachを開始する。
パラメータはもちろん、直前で取得した項目だ。

続いて冒頭で初期化したオブジェクト変数に欲しいフィールドをセットしよう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3891071/1b828f39-45b9-a53c-6b41-510317a37ae1.png)


    {
      "type": "SetVariable",
      "inputs": {
        "name": "obj_user",
        "value": "@items('Apply_to_each')?['zaimu_user']"
      }
    }

オブジェクト変数 obj_user に、Apply to eachの項目から zaimu_user のオブジェクトを格納する。
フィールドがオブジェクトでなければここの処理は不要なはずだ。

オブジェクト変数のままでも条件分岐で使えるとは思うが、きちんと欲しいプロパティを指定しておいた方がよいと思うので、文字列変数に指定した値をセットしよう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3891071/cdd6531b-fef0-c9ea-4c45-e1dde0d7d65b.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3891071/45ce9e47-2958-eb47-49b3-e157208e1560.png)


    {
      "type": "SetVariable",
      "inputs": {
        "name": "str_zaimu_user",
        "value": "@variables('obj_user')?['DisplayName']"
      },
      "runAfter": {
        "obj変数の設定": [
          "Succeeded"
        ]
      }
    }

あとはここで設定した str_zaimu_user を条件分岐で使用すればOKだ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3891071/bd483bc7-09ae-afbd-6c84-53b5b08680f8.png)

    {
      "type": "If",
      "expression": {
        "and": [
          {
            "equals": [
              "@variables('str_zaimu_user')",
              ""
            ]
          }
        ]
      },
      "actions": {
        "作成": {
          "type": "Compose",
          "inputs": "@variables('str_zaimu_user')"
        }
      },
      "else": {
        "actions": {
          "作成_1": {
            "type": "Compose",
            "inputs": "@variables('str_zaimu_user')"
          }
        }
      },
      "runAfter": {
        "str変数の設定_str_zaimu_user": [
          "Succeeded"
        ]
      }
    }


ユーザー情報がきちんと入っている場合は、変数とともにValueが表示されている。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3891071/6fb6bcea-32b7-6e20-db3a-edff36a18319.png)

ユーザー情報がブランクの場合は、変数だけとなっている。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3891071/4a24f680-d062-97cc-eaaf-494dd21bf30f.png)

この方法を使えばPower Automateの実装の自由度が格段に増すはずだ。

それでは今回のこのへんで失礼する。

さらばだ。

https://qiita.com/Novskiiiiiiiiii/items/fe6d5ca4128b99ca2b12