Power Apps / Power Automate / Dataverse for Teamsを利用してPlannerの機能強化を試みた

Plannerアプリを利用してメンバーのタスク作成をしていましたが、複数人で同じタスクを担当する際に課題を感じていました。

1つのタスクに対し複数人担当者を割り当てると、誰か1人がタスクを完了させた時点でクローズされてしまい、困る場合があります。

ですが、同じタスクを人数分作ってそれぞれに割り当てる、というのも作業効率が悪いと感じました。

そこで、上記の2パターンをケースによって使い分けたり効率化したり出来るような、Plannerアプリの機能強化版を作成してみました。(記事執筆・テーブル作成:李、池邉)

アプリの要件

今回作成するアプリの要件を改めてまとめます。

  • 以下の2つの操作を1つのPower AppsアプリのUI上で操作できるようにする
    • 同じタスクを人数分作ってそれぞれに割り当てる
    • 1つのタスクに対し複数人担当者を割り当てる
  • Dataverse for Teamsを使用したPower Appsアプリを作成し、作成したタスクの一覧を表示できるようにする

アプリ作成手順

アプリ作成の大まかな手順は以下の通りです。

  1. Dataverse for Teamsでテーブルを2つ作成する(タスク管理用、担当者リスト)
    ▽参照となるリンク先:Microsoft Dataverse for Teamsの概要 - Power Apps | Microsoft Learn
  2. コンポーネントを追加してアプリUI画面を作成する
  3. Dataverse上に作成したテーブルに「行が追加、変更、または削除された」場合をトリガーとしたPower Automateのフローを作成する

詳細を見て行きましょう。

タスク管理用テーブルの作成

タスク管理用のテーブル名は任意のものを設定および保存したのち、下記項目の列を追加します。

  • 列名
    • 任意
    • ※今回は「Task_management_sample」とします
  • データの種類
    • 掲題
      • 1行テキスト型
    • 期限
      • 日付と時刻(日付のみ)
    • 担当者
      • 1行テキスト型
    • ユーザー別割り当て
      • はい/いいえ

Power Apps画面は下記のような表示になります。

それぞれの項目はPower Automate に連携され、「ユーザー別割り当て」の値によって分岐が分かれます。

担当者リスト用のテーブル名は任意のものを入力して保存し、列には担当者の表示名を追加しました。

タスクに担当者を割り当てる際に使用するテーブルは以下になります。

  • 列名
    • 任意
  • データの種類
    • Name
      • 1行テキスト型

UIの作成

Power Apps画面は2画面で構成します。1つ目は作成したタスクの一覧を表示させるもの、2つ目はタスク作成にあたる編集画面とします。

完成版のイメージを下記に表示します。

画面1 タスクの一覧を表示させる画面

画面2 タスク作成にあたる編集画面

画面1は垂直ギャラリーを追加しており、タスク管理テーブルに紐づいています。またタスク作成後に編集・削除ができるようにしました。

画面1上部の「+」の部分をクリックすると画面2に遷移し、タスク管理テーブルへの列追加、すなわちタスクを作成することができます。

画面2の編集画面で各項目を入力し、担当者を指定します。

ここで、担当者リストテーブルに紐づいたリストボックスを設けることで、複数の担当者を選択できるようにしました。

Power Automateでフローで条件分岐させる

Power Automate側の処理は1つのフローで実装しており、大きく2つ(目的別)に分けてあります。

フローの概要

フロー作成

それでは実際にフローを作成していきます。

まずはDataverseテーブルの「行が追加、変更、削除された場合」をトリガーとします。

トリガーの内容は下記の通りです。

  • 種類の変更
    • 作成
  • テーブル名
    • Task_sample
  • スコープ
    • Organization

担当者をDataverseテーブル上で作成している兼ね合いで、担当者の文字列を分割しないと検索ができないため、Power Automateで文字列を分割する必要があります。

「担当者」の文字列を変数に初期化し、Split関数を用いて文字列を担当者ごとに分けたのち、配列として格納します。

変数の設定

その後、割り当てられたユーザの数を変数に格納します。

同じタスクを人数分作ってそれぞれに割り当てる場合は、バケットを作成して担当者名があるか確認します。

Dataverseテーブルに格納された担当者の文字列及び、Plannerバケット表示名の一覧を文字列が一致するかを判断するために用意します。

1つのタスクに対し複数人の担当者を割り当てるため、変数を用意します。

1つのタスクに対し、複数人担当者を割り当てる際に人数を比較するための変数「共同タスク用変数」を作成します。

1つのタスクに対し複数人担当者を割り当てるフロー

ユーザー情報を取得するため、配列に格納した担当者を上から順番に検索します。

Dataverseテーブルに登録された「ユーザー別割り当て」の値が「true」であるかを判別します。

次にPlannerバケットの一覧を取得し、バケットの表示名を配列に格納します。

バケット配列のなかに担当者の表示名があるかどうかを判断します。

割り当てられた担当者の表示名がバケット配列の中に含まれている場合は、対象のバケットの中にタスクを作成します。

含まれていない場合は、新しくバケットを作成しタスクを作成します。

1つのタスクに対し複数人を割り当てるフロー

ユーザー情報を取得するため、配列に格納した担当者から順番に検索します。

 

「ユーザー割り当て」値を判断します。ここでは「True」ではないとき、すなわち1つのタスクに複数の担当者を割り当てる場合のフローを実行します。

検索されたメールアドレス、および検索してヒットした担当者を配列変数に追加します。Plannerタスクに担当者追加する際に使用します。

「Apply to each」の中でタスクを作成してしまうと、割り当てた担当者分だけタスクが作成されてしまうため、ここで一度Apply to eachを抜けます。

ここで、変数名「割り当てユーザ配数再取得」に、「共同タスク用変数」に格納した担当者の数を格納します。

その後「割り当てられたユーザーの個数」と「割り当てユーザ配数再取得」を比較しし、数が同じなら1つのタスクに担当者を割り合て作成します。

最後に

Power AppsアプリのUI追加から、Power Automate のフローを作成してみました。

私自身、関数を使用してのPower Automateのフローを作成するのが初めてでしたが、Datavereテーブルでテキスト型で格納される文字列でも、Power Automateで使用できるsplit関数を使用することで、文字列を分割し配列に格納できることを学びました。

執筆担当者プロフィール
池邉 拓哉

池邉 拓哉(日本ビジネスシステムズ株式会社)

Microsoft 365サービスの導入を担当しています。 主な担当はExchangeとSharePointです。

担当記事一覧
執筆担当者プロフィール
李 兆昊

李 兆昊(日本ビジネスシステムズ株式会社)

現在、Microsoft 365の導入を担当しています。主な担当はTeamsとSharePoint Onlineです。 体を動かすのが好きで、週末は必ず海に出ています!

担当記事一覧