1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Last updated at Posted at 2024-11-14

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

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

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

image.png

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

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

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

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

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

image.png

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

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

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

image.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

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

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

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

image.png

image.png

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

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

image.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

ユーザー情報がブランクの場合は、変数だけとなっている。
image.png

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

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

さらばだ。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?