てんこ製作

Tenco Works

PowerAutomateでPlannerに定期タスクを投入したい(検討編)

Microsoft 365のPlannerに定期的にタスクを作りたいというリクエストがあったので、方法を考えてみました。

環境

勤め先の会社での話になります。会社ではMicrosoft 365が使えます。使うアプリは、

  • Planner
  • Power Automate
  • SharePoint上のリスト
  • Excel on the web

処理フローを考えてみる

とりあえず最初考えたのが以下の手順。

  1. SharePoint上のリストに定期タスクのもとになるデータを作る、中身としては
    • 毎月何日にタスクを作るか
    • 誰宛のタスクにするか
  2. 1日1回、PowerAutomateで作ったフローを自動起動する。この時、
    • リストの中から今日の日付に一致するアイテムを見つける
    • 来月の今日の日付でPlannerにタスクを登録する

これを実現するために必要な処理は、

  • 今日の日付を取得する
  • 来月の今日の日付を作り出す
  • SharePointのリストの内容を読み込む
  • リストのアイテムから日付を比較して一致するものをリストから見つける
  • Plannerに来月期限でタスクを登録する

これらができれば実現できそう。

「来月の今日の日付を作り出す」とは

来月の今日の日付とは、例えば

  • 2021年1月20日なら2021年2月20日
  • 2021年8月31日なら2021年9月30日
  • 2020年12月5日なら2021年1月5日

職場の要件で、1ヶ月先を計算する時も確実に月を跨がないようにする必要があります。単純に今の日付に30日や31日を足すだけの日付ではないです。

また毎月30日と指定して、1月30日になったときに次月に2月30日という日付がないので処理しないとか、3月1日に処理するのもNG。2月28日期限のタスクを登録したいです。

では31日指定があった場合どうするか?

例えば9月は30日までしか無いので9月中は31日指定の定義は実行されるタイミングは無いです。

となると、日付指定の他に「月末」という指定もできたほうが良さげ。

「月末」の考慮を追加するとなると、「月初」とか「指定曜日」とか追加したくなりますが、めんどくさくなりそうなのでいったん「月末」だけにしとこうと思います。

PowerAutomateで日付計算

「来月の今日の日付を作り出す」ために月だけ取り出したり、月の最終日を調べたりしたいのです。

そいうことができる機能がないか、Microsoftのドキュメントを漁ってみます。

docs.microsoft.com

が、そういう機能はなさそう、、、うまい方法も思いつきません。

PowerAutomate以外の方法を考える

vbaならゴリゴリ計算できそうなんだけどなぁと思いPowerAutomateでExcelマクロを実行する方法をググってみましたが、PowerAutomateDesktopしか記事が引っかからない。

どうもクラウドのPowerAutomateからはOfficeスクリプトしか呼び出せない模様?

OfficeスクリプトはTypeScriptベースってことみたいなので、ここは日付計算部分をOfficeスクリプトでやることにします。

最終的なフロー

  1. PowerAutomateでリストからアイテムを読み取る
  2. OneDrive上のExcelファイルに保存する
  3. ExcelファイルでOfficeスクリプトをキックして、保存したアイテムの中から本日対象のタスク情報を抽出する
  4. PowerAutomateで3.の処理結果を読み取る
  5. PowerAutomateからPlannerにタスクを投入する

この流れで作っていこうと思います。

次回は実際に作成して見る編の予定。