やりたいこと
OneDriveのファイルの中から最新のファイルを見つける。
・・・他に方法ありそうな気はするのですがこれくらい力技でやっておけば他にも応用がききそう。
OneDriveをSharePointにしたり、最新ファイルじゃなくて特定条件にしたり。
さっそく手順
OneDriveからファイルを取得「フォルダー内のファイルのリスト」
トリガーは何でもよいです。
もし該当フォルダのファイル数がそこそこ多いのであれば…「・・・」の「設定」の「改ページ」の設定を「オン」にして「しきい値」を多めにしておきましょう。デフォルトだとファイル取得の上限がけっこう少なめに設定されているようです。
Apply to eachで全ファイルを調べて一番新しいものをとってくる
全体ではこんな感じです。
やっていることはファイル一覧の中から最大値をみつけるだけなのですが、詳しく説明していきます。
1つ1つの処理を見ていきます。
まず「変数」を初期化して用意します。
初期値は「ticks('1970-01-01')
」です。適当にありえないくらい古い日付をいれておきます。
ticks()
という関数で日付を整数値にしているのがポイントです。
Apply to each で全ファイルを1つ1つ見ながら次の条件で見ていきます。
左辺は「ticks(item()['LastModified'])
」です。つまりファイルの最終更新日をticks()
で数値にしたもの。
右辺は「最新日付
」変数です。初期値だと 1970-01-01 という日付の ticks()
の数値がはいっています。
数値同士なので大小で比較可能なので、「ファイルの最終更新日」が「最新日付(1970-01-01)」より大きい=新しい日付かどうかをチェックします。
「はい」の場合には、変数「最新日付
」に「ticks(item()['LastModified'])
」つまり今チェックしている「ファイルの更新日」をいれます。
「いいえ」の場合にはなにもしません。
これを全ファイルにを繰り返すことで、新しいファイルを見つけ次第「最新日付
」の更新をしていくことで、もっとも新しいファイルを見つけることができます。
最新のファイルを見つけてどうする?
後はお好きにお使いください!
例えば「ファイル名が知りたい」だったら上の処理の「はい」の中でファイル名を変数にいれておけばよいです。
もともとやりたかったことは、、、、
ログを格納しているフォルダのファイル一覧の最終更新日がXX時間以上古い=ログが更新されていない場合にバッチが止まっている!?
みたいなチェックをするために作った処理です。
なので「最新日付」が「ticks(addToTime(utcNow(), -10, 'Hour'))
」≒現在時刻より10時間前と比べてどう?みたいな処理をいれることで監視処理に使いました。