4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Plannerを救いたい with Power Apps

Last updated at Posted at 2024-11-26

緒言

Plannerってとても魅力的だと思うんです。シンプルな入力、バケットで整理も楽、充実の自動通知、OutlookやTeamsからも確認しやすい優れた動線、等々。
一方で若干物足りないなと思うところも。例えば関連ファイル連携が弱かったり、ビューがあまり実用的でなかったり、承認機能が無かったり。
そんなこんなで誰しも一度は使おうとして断念した経験がおありじゃないでしょうか。
せっかく魅力たっぷりのPlannerを救いたい!Power!

Plannerを救うには

Plannerの良さを活かしつつ、拡張性の低さやビューの実用性の低さを補うには、SharePointをデータソースにしたPower AppsとPlannerを連携させれば良い!さすれば拡張性もあるしPower BIで実用性のある可視化もできる!
ただしPower Apps編集⇒Planner連動は即時だが、Planner編集⇒Power Apps連動はPlannerコネクタの限られたタイミングしかないのでそこは我慢。

作り方

SharePointリストの設定

image.png
上から順にタイトルからDescriptionまでがPlannerと連動する項目。
PercentCompleteはPlannerの進捗率と連動しており"0","50","100"の3択選択肢。

Approver以降は任意で拡張したい列を設定。承認機能つけてみたり、関連ファイル保存フォルダ設定してみたり、完了日を入力させてみたり。

Power Appsの設定

完成イメージはこんな感じ
image.png
ギャラリーとフォームのシンプルな構成

1. データ接続

image.png
最小構成はPlannerとSharePointのみ

2. App.Formulas

ここで連携させるPlannerの基本情報(グループID、プランID、バケットリスト)を定義する。

_GroupId="グループID";
_PlanId="プランID";
_BucketList=Planner.ListBucketsV3(_PlanId,_GroupId).value;

グループIDとプランIDは下記のようにPlannerのURLで分かる。

https://planner.cloud.microsoft/webui/plan/プランID/view/grid?tid=グループID

3. ギャラリーの設定

データソースにSharePointリストを設定
image.png
注意点はバケットIDからバケット名を取得して表示させる
image.png

4. フォームの設定

image.png
BucketIDは"一行テキスト"だが、ID入力は大変なのでコンボボックスに置換してApp.Formulasで定義した_BucketListをコンボボックスのItemsに設定しバケット名で選択できるようにする。コントロールの置換方法はこちら参照。

OnSuccessにPlannerとの連動させる数式を記述しておく。

With(
    {_rec: Form1.LastSubmit},
    If( 
        //TaskIDが空=新規保存、TaskIDが空じゃない=編集保存で場合分け
        IsBlank(_rec.TaskID),
        
        //【新規保存の時】
        UpdateContext( //Plannerタスクを新規作成しTaskIDを取得
            {
                _newTaskId: Planner.CreateTaskV4(
                    _GroupId,
                    _PlanId,
                    _rec.タイトル,
                    {
                        bucketId: _rec.BucketID,
                        dueDateTime: _rec.DueDate,
                        startDateTime: _rec.StartDate,
                        assignments: Concat(_rec.Assignments,Email,";")
                    }
                ).id
            }
        );
        //連動するSharePointへTaskID記録
        Patch(PlannerPlus,_rec,{TaskID: _newTaskId}); 
        //Plannerの"Notes"(=description)を保存
        Planner.UpdateTaskDetailsV2(_newTaskId,{description: _rec.Description});
        //Plannerの"進捗"(=percentComplete)を保存
        Planner.UpdateTaskV3(_newTaskId,{percentComplete:Value(_rec.PercentComplete.Value)}),
        
        //【編集保存の時】
        Planner.UpdateTaskV3(
            _rec.TaskID,
            {
                bucketId: _rec.BucketID,
                dueDateTime: _rec.DueDate,
                startDateTime: _rec.StartDate,
                percentComplete: Value(_rec.PercentComplete.Value),
                title: _rec.タイトル
            }
        );
        Planner.UpdateTaskDetailsV2(_rec.TaskID,{description: _rec.Description});
        //編集保存の時は一度アサインユーザーを全削除してから更新
        Planner.UnassignUsers(_rec.TaskID,Concat(Planner.GetTaskV2(_rec.TaskID)._assignments,userId,";"));
        Planner.AssignUsers(_rec.TaskID,Concat(_rec.Assignments,Email,";"))
    )
);
ResetForm(Form1)

結言

Power Apps ⇒ Plannerの即時連動は上述で問題ないが、Planner ⇒ Power Appsの連動はPower Automateのスケジュールトリガー等で即時性は無いが別途担保しておくと良いかも。Planner直接は確認程度に留め、変更必要な場合は基本Appsを使ってもらうように利用者に周知しておくと良いかも。Plannerの制限をチェックしつつこれからもお世話になります!

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?