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


「項目が作成されたとき」トリガーで動作確認。


「アイテムが作成または変更されたとき」トリガーを使用し、アイテムを編集した際も基本動作するけど、


「項目が削除されたとき」では動作しない。


これは「項目が削除されたとき」トリガーには最低限の情報しか含まれておらず、列を対象とした条件をほぼ書けないため。
※「削除者の名前」や「削除時間」を対象にトリガー条件式を設定するとかなら可能。

※「削除者の名前」や「削除時間」を対象にトリガー条件式を設定するとかなら可能。

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

※下のテキスト列の場合は「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'], '長') )
コメント