Power Automate コピペで使えるSharePointリストのトリガー条件式まとめ|テキスト、日時、ユーザー等

前回の記事の続き。今回はSharePointリストの各列(テキスト、数字、日時、ユーザー列、など)に対してのトリガー条件式をまとめてみた。

スポンサーリンク

前提

今回は以下のSPOリストに対して、
「項目が作成されたとき」トリガーで動作確認。
「アイテムが作成または変更されたとき」トリガーを使用し、アイテムを編集した際も基本動作するけど、
「項目が削除されたとき」では動作しない。
これは「項目が削除されたとき」トリガーには最低限の情報しか含まれておらず、列を対象とした条件をほぼ書けないため。
※「削除者の名前」や「削除時間」を対象にトリガー条件式を設定するとかなら可能。

補足:列名を日本語で付けた場合

もし列を日本語で作成した場合は、OData文字列(先頭に「OData_」をつける)で指定する必要あり。
※下のテキスト列の場合は「OData__x30c6__x30ad__x30b9__x30c8_」でフィルター条件式を書く。

テキスト列

まずはテキスト列(1行テキストと複数行テキスト)から。
// 一致
@equals(triggerOutputs()?['body/【列名】'], '文字列')
// サンプル:列「タイトル」が「abc」の場合、フロー起動
@equals(triggerOutputs()?['body/Title'], 'abc')

// 含む
// ※containsがnull非許容のため、andでnullチェック
@and(
  not(empty(triggerOutputs()?['body/【列名】'])),
  contains(triggerOutputs()?['body/【列名】'], '文字列')
)
// サンプル:列「タイトル」に「abc」を含む場合、フロー起動
@and(
  not(empty(triggerOutputs()?['body/Title'])),
  contains(triggerOutputs()?['body/Title'], 'abc')
)

// 複数行テキストも同様
@and(
  not(empty(triggerOutputs()?['body/【列名】'])),
  contains(triggerOutputs()?['body/【列名】'], '文字列')
)
// サンプル:列「multipleText」に「def」を含む場合、フロー起動
@and(
  not(empty(triggerOutputs()?['body/multipleText'])),
  contains(triggerOutputs()?['body/multipleText'], 'def')
)

数字列

続いて数字列。
// 一致
@equals(triggerOutputs()?['body/【列名】'], 値)
// サンプル:数字列「num」が3以上の場合に起動
@equals(triggerOutputs()?['body/num'], 3)
// 不一致の場合はnotで囲む(この場合、数字列が空(null)でも動作)
@not(equals(triggerOutputs()?['body/num'], 3))

// 以上
@greaterOrEquals(triggerOutputs()?['body/【列名】'], 値)
// サンプル:数字列「num」が3以上の場合に起動
@greaterOrEquals(triggerOutputs()?['body/num'], 3)

// 以下
@lessOrEquals(triggerOutputs()?['body/【列名】'], 値)
// サンプル:数字列「num」が3以下の場合に起動
@lessOrEquals(triggerOutputs()?['body/num'], 3)

はい/いいえ列

「はい/いいえ」列
// 「はい」のときにフローを起動したい場合
@equals(triggerOutputs()?['body/【列名】'], true)
// サンプル:はい/いいえ列「bool」がtrueのときのみ起動
@equals(triggerOutputs()?['body/bool'], true)

// 「いいえ」のときにフローを起動したい場合
@equals(triggerOutputs()?['body/【列名】'], false)

選択肢列

// ある選択肢のときにフローを起動
@equals(triggerOutputs()?['body/【列名】/Value'], '選択肢')
// サンプル:選択肢列「choices」が「選択肢 1」のときに起動
@equals(triggerOutputs()?['body/choices/Value'], '選択肢 1')

// 複数の選択肢で起動したいときは、orで囲む
@or(
 equals(triggerOutputs()?['body/【列名】/Value'], '選択肢 1'),
 equals(triggerOutputs()?['body/【列名】/Value'], '選択肢 2')
)

// ある選択肢以外のときに起動したい場合は、notで囲む
// ※下の式だと選択肢列が空(null)でも起動
@not(equals(triggerOutputs()?['body/【列名】/Value'], '選択肢'))

日付、日時列

続いて日付、日時列。
※例ではすべて日本時間で条件式を記述。SharePoint側を日本時間にしておくと条件式の動作確認がしやすい。

日付

時間を含めない列の場合。
// 以降(より後の場合は「@greater」)
@greaterOrEquals(triggerOutputs()?['body/【列名】'], '日付(yyyy-MM-dd)')
// サンプル:日付列「date」が2025/1/1以降の場合、フローを起動
@greaterOrEquals(triggerOutputs()?['body/date'], '2025-01-01')
// 以前(より前の場合は「@less」)
@lessOrEquals(triggerOutputs()?['body/【列名】'], '日付(yyyy-MM-dd)')
// サンプル:日付列「date」が2025/1/1以前の場合、フローを起動
@lessOrEquals(triggerOutputs()?['body/date'], '2025-01-01')
// 範囲の場合はandで囲む(例は、2025/1/1 ~ 2025//1/31)
@and(
  greaterOrEquals(triggerOutputs()?['body/date'], '2025-01-01'),
  lessOrEquals(triggerOutputs()?['body/date'], '2025-01-31')
)

// 範囲外の場合はorで囲む(例は、~2024/12/31, 2025/2/1~)
@or(
  lessOrEquals(triggerOutputs()?['body/date'], '2024-12-31'),
  greaterOrEquals(triggerOutputs()?['body/date'], '2025-02-01')
)
// 一致
@equals(triggerOutputs()?['body/【列名】'], '日付(yyyy-MM-dd)')
// サンプル:日付列「date」が2025/1/1の場合、フローを起動
@equals(triggerOutputs()?['body/date'], '2025-01-01')

日時

時間を含める列。
// 以降(より後の場合は「@greater」) convertTimeZoneの代わりにaddHoursで+9時間してもOK
// ※日時列が空(Null)の場合は動かない
@and(
  not(empty(triggerOutputs()?['body/【列名】'])),
  greaterOrEquals(
    convertTimeZone(triggerOutputs()?['body/【列名】'], 'UTC', 'Tokyo Standard Time', 's'),
    '日時(yyyy-MM-ddTHH:mm:ss)'
  )
)

// サンプル:日時列「dateTime」が日本時間の「2025/1/1 09:00」以降の場合、フローを起動
@and(
  not(empty(triggerOutputs()?['body/dateTime'])),
  greaterOrEquals(
    convertTimeZone(triggerOutputs()?['body/dateTime'], 'UTC', 'Tokyo Standard Time', 's'),
    '2025-01-01T09:00:00'
  )
)

// ※以下はうまく動作しない
@greaterOrEquals(triggerOutputs()?['body/dateTime'], '2025-06-04T09:00:00+09:00')
// 以前(より前の場合は「@less」)
@and(
  not(empty(triggerOutputs()?['body/【列名】'])),
  lessOrEquals(
    convertTimeZone(triggerOutputs()?['body/【列名】'], 'UTC', 'Tokyo Standard Time', 's'),
    '日時(yyyy-MM-ddTHH:mm:ss)'
  )
)
// サンプル:日時列「dateTime」が日本時間の「2025/1/1 09:00」以前の場合、フローを起動
@and(
  not(empty(triggerOutputs()?['body/dateTime'])),
  lessOrEquals(
    convertTimeZone(triggerOutputs()?['body/dateTime'], 'UTC', 'Tokyo Standard Time', 's'),
    '2025-01-01T09:00:00'
  )
)
// 範囲の場合はandで囲む
// サンプル:列「dateTime」が「2025/1/1 9:00 ~ 2025/1/31 18:00」のとき
@and(
  not(empty(triggerOutputs()?['body/dateTime'])),
  greaterOrEquals(
    convertTimeZone(triggerOutputs()?['body/dateTime'], 'UTC', 'Tokyo Standard Time', 's'),
    '2025-01-01T09:00:00'
  ),
  lessOrEquals(
    convertTimeZone(triggerOutputs()?['body/dateTime'], 'UTC', 'Tokyo Standard Time', 's'),
    '2025-01-31T18:00:00'
  )
)

// 範囲外の場合はorで囲む
// サンプル:列「dateTime」が「~2025/1/1 9:00, 2025/1/31 18:00~」のとき
@and(
  not(empty(triggerOutputs()?['body/dateTime'])),
  or(
    lessOrEquals(
      convertTimeZone(triggerOutputs()?['body/dateTime'], 'UTC', 'Tokyo Standard Time', 's'),
      '2025-01-01T09:00:00'
    ),
    greaterOrEquals(
      convertTimeZone(triggerOutputs()?['body/dateTime'], 'UTC', 'Tokyo Standard Time', 's'),
      '2025-01-31T18:00:00'
    )
  )
)
// 一致(あんま使わない)
@and(
  not(empty(triggerOutputs()?['body/【列名】'])),
  equals(
    convertTimeZone(triggerOutputs()?['body/【列名】'], 'UTC', 'Tokyo Standard Time', 's'),
    '日時(yyyy-MM-ddTHH:mm:ss)'
  )
)
// サンプル:日時列「dateTime」が日本時間の「2025/1/1 09:00」ちょうどの場合、フローを起動
@and(
  not(empty(triggerOutputs()?['body/dateTime'])),
  equals(
    convertTimeZone(triggerOutputs()?['body/dateTime'], 'UTC', 'Tokyo Standard Time', 's'),
    '2025-01-01T09:00:00'
  )
)

時間

時間を含める列に対して、「日付」を考慮しないでトリガー条件式を書きたい場合。

// 以降(より後の場合は「@greater」)
@and(
  not(empty(triggerOutputs()?['body/【列名】'])),
  greaterOrEquals(
    convertTimeZone(triggerOutputs()?['body/【列名】'], 'UTC', 'Tokyo Standard Time', 'HH:mm:ss'),
    '時間(HH:mm:ss)'
  )
)
// サンプル:日時列「dateTime」が日本時間の「09:00」以降の場合、フローを起動
@and(
  not(empty(triggerOutputs()?['body/dateTime'])),
  greaterOrEquals(
    convertTimeZone(triggerOutputs()?['body/dateTime'], 'UTC', 'Tokyo Standard Time', 'HH:mm:ss'),
    '09:00:00'
  )
)
// 以前(より前の場合は「@less」)
@and(
  not(empty(triggerOutputs()?['body/【列名】'])),
  lessOrEquals(
    convertTimeZone(triggerOutputs()?['body/【列名】'], 'UTC', 'Tokyo Standard Time', 'HH:mm:ss'),
    '時間(HH:mm:ss)'
  )
)
// サンプル:日時列「dateTime」が日本時間の「09:00」以前の場合、フローを起動
@and(
  not(empty(triggerOutputs()?['body/dateTime'])),
  lessOrEquals(
    convertTimeZone(triggerOutputs()?['body/dateTime'], 'UTC', 'Tokyo Standard Time', 'HH:mm:ss'),
    '09:00:00'
  )
)
// 範囲の場合はandで囲む
// サンプル:列「dateTime」が日本時間の「9:00 ~ 18:00」のとき
@and(
  not(empty(triggerOutputs()?['body/dateTime'])),
  greaterOrEquals(
    convertTimeZone(triggerOutputs()?['body/dateTime'], 'UTC', 'Tokyo Standard Time', 'HH:mm:ss'),
    '09:00:00'
  ),
  lessOrEquals(
    convertTimeZone(triggerOutputs()?['body/dateTime'], 'UTC', 'Tokyo Standard Time', 'HH:mm:ss'),
    '18:00:00'
  )
)

// 範囲外の場合はorで囲む
// サンプル:列「dateTime」が日本時間の「~9:00, 18:00~」のとき
@and(
  not(empty(triggerOutputs()?['body/dateTime'])),
  or(
    lessOrEquals(
      convertTimeZone(triggerOutputs()?['body/dateTime'], 'UTC', 'Tokyo Standard Time', 'HH:mm:ss'),
      '09:00:00'
    ),
    greaterOrEquals(
      convertTimeZone(triggerOutputs()?['body/dateTime'], 'UTC', 'Tokyo Standard Time', 'HH:mm:ss'),
      '18:00:00'
    )
  )
)
// 一致(あんま使わない)
@and(
  not(empty(triggerOutputs()?['body/【列名】'])),
  equals(
    convertTimeZone(triggerOutputs()?['body/【列名】'], 'UTC', 'Tokyo Standard Time', 'HH:mm:ss'),
    '時間(HH:mm:ss)'
  )
)
// サンプル:日時列「dateTime」が日本時間の「09:00」ちょうどの場合、フローを起動
@and(
  not(empty(triggerOutputs()?['body/dateTime'])),
  equals(
    convertTimeZone(triggerOutputs()?['body/dateTime'], 'UTC', 'Tokyo Standard Time', 'HH:mm:ss'),
    '09:00:00'
  )
)

ユーザー列

最後はユーザー列。
※部署や役職は管理センターなどで設定可能。
// DisplayNameが一致
// ※ユーザー列が空(null)の場合は動作しない
@equals(triggerOutputs()?['body/【列名】']?['DisplayName'], 'ユーザー名')
// サンプル:ユーザー列「user」のDisplayNameが「田中 一郎」
@equals(triggerOutputs()?['body/user']?['DisplayName'], '田中 一郎')

// DisplayNameに特定文字列を含む
// containsがnull非許容のため、andでnullチェック
@and(
  not(empty(triggerOutputs()?['body/【列名】'])),
  contains(triggerOutputs()?['body/【列名】']?['DisplayName'], '特定文字列')
)
// サンプル:ユーザー列「user」のDisplayNameに「田中」を含む場合、フロー起動
@and(
  not(empty(triggerOutputs()?['body/user'])),
  contains(triggerOutputs()?['body/user']?['DisplayName'], '田中')
)
// Emailが一致
@equals(triggerOutputs()?['body/【列名】']?['Email'], 'メールアドレス')
// サンプル:ユーザー列「user」のEmailが「TestUser@sample.com」の場合、フロー起動
@equals(triggerOutputs()?['body/user']?['Email'], 'TestUser@sample.com')

// Emailに特定文字列を含む
@and(
  not(empty(triggerOutputs()?['body/【列名】'])),
  contains(triggerOutputs()?['body/【列名】']?['Email'], '特定文字列')
)
// サンプル:ユーザー列「user」のEmailに「TestUser」を含む場合、フロー起動
@and(
  not(empty(triggerOutputs()?['body/user'])),
  contains(triggerOutputs()?['body/user']?['Email'], 'TestUser')
)
// Department(部署)が一致
@equals(triggerOutputs()?['body/【列名】']?['Department'], '部署名')
// サンプル:ユーザー列「user」の部署が「営業部」の場合、フロー起動
@equals(triggerOutputs()?['body/user']?['Department'], '営業部営業一課')

// Departmentに特定文字列を含む
@and(
  not(empty(triggerOutputs()?['body/【列名】'])),
  contains(triggerOutputs()?['body/【列名】']?['Department'], '特定文字列')
)
// サンプル:ユーザー列「user」の部署に「営業部」を含む場合、フロー起動
@and(
  not(empty(triggerOutputs()?['body/user'])),
  contains(triggerOutputs()?['body/user']?['Department'], '営業部')
)
// JobTitle(役職)が一致
@equals(triggerOutputs()?['body/【列名】']?['JobTitle'], '役職名')
// サンプル:ユーザー列「user」の役職が「課長」の場合、フロー起動
@equals(triggerOutputs()?['body/user']?['JobTitle'], '課長')

// JobTitleに特定文字列を含む
@and(
  not(empty(triggerOutputs()?['body/【列名】'])),
  contains(triggerOutputs()?['body/【列名】']?['JobTitle'], '特定文字列')
)
// サンプル:ユーザー列「user」の役職に「長」を含む場合、フロー起動
@and(
  not(empty(triggerOutputs()?['body/user'])),
  contains(triggerOutputs()?['body/user']?['JobTitle'], '長')
)

関連記事

コメント

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