MS365サービスだけで申請のワークフローを作る

# はじめに
世の中には様々なワークフロー製品がありますが、それらのものをMS365で実装できないかと考えました。

# 要件
- 申請するユーザから予め作成されたFormsで申請をしてもらう
- 申請の内容が申請を受ける部門のPlannerタスクとして登録される
    - 受けた申請を忘れずに管理をできるようにするため
- 申請の内容が申請を受ける部門のSharePointリストに登録される
    - 受けた申請を後から確認できるようにするため
- 申請内容を処理した後Plannerタスクを完了にすると、SharePointリストの内容に完了者と完了日が追加される

# 利用するサービス
- Forms
- PowerAutomate
- Planner
- Teams
- SharePointOnline

# 作業内容
## Formsで申請に必要な項目を作成する
例えば、以下。
- 期日
- 部署
- 作業内容
- 期限
- その他

![screencapture-forms-office-Pages-ResponsePage-aspx-2020-08-22-22_41_58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75072/8edc5ae9-52f8-8c6f-8e6a-1e5a87890836.png)


## SharePointOnlineのリストを作成する
Formsの内容に加えて、あとで監査などをすることを考えて以下を追加する。
- タイトル
- 対応者
- 対応日

![スクリーンショット 2020-08-22 22.45.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75072/38ca52e4-1690-7d61-ca4c-05e3154a280a.png)

## Plannerのプランを作る
なんでもOK。とりあえず作る。

![スクリーンショット 2020-08-22 22.47.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75072/0371c284-0c1e-9271-badb-c67b4dd746bd.png)

## PowerAutomateでフローを作る
ここからはやや複雑なので、少し詳細に説明。
まずは、申請した時にSharepointリストに情報を入れて、 Plannerタスクを作る処理を作成する。

### PowerAutomate画面で自動フローの作成を選択
トリガーはFormsの新しい応答が送信される時、にする。

![スクリーンショット 2020-08-22 22.52.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75072/e3f8d251-7aa7-6338-cd2a-d003163c8661.png)

### フォームIDに先ほど作成したフォームの内容を入れる

![スクリーンショット 2020-08-22 22.53.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75072/c17a8e2f-02bf-6636-d0f8-20fa144fa2e7.png)

### Formsの応答の詳細を取得するステップを追加する

![スクリーンショット 2020-08-22 22.55.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75072/b39be56d-7c18-75b7-5aa5-bb950b755533.png)

フォームIDには先ほどと同じフォームを選択、応答IDには応答IDを選択

![スクリーンショット 2020-08-22 22.56.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75072/6e2121ac-b16a-3736-24c1-7dfcccf78482.png)


### タスクを作成するステップを追加する

![スクリーンショット 2020-08-22 22.58.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75072/d601e13b-63e8-7a84-4f30-ca9fccff358e.png)

パラメータを入力する。

- グループIDは、プランの存在するグループ。プランIDは先ほど作成したプラン。
- タイトルは、単純に「作業内容」だけでも問題ないのだが、せっかくなので部署と期限も入れておき、わかりやすくしておいた。
- 開始日時が入っていないが、これを入れると終了日時との整合性がないと（開始日時＜期限日時）でないとエラーになるので、いったんエラー可能性を下げるため入れないことにした。
- バケットIDはプランの中のカテゴリのようなもの。デフォルトはTodoのみ。

![スクリーンショット 2020-08-22 23.02.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75072/bf935915-44ba-ecdf-4585-a71005eba17d.png)

※　期限日時にFormsの内容を入れようとしてもデフォルトでは出てこない。選択肢の上にある「もっと見る」を押すと出てくる。（非常にわかりにくい）

![スクリーンショット 2020-08-22 23.08.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75072/0c6091d7-1899-fbbd-8ffc-dc761f5b15cb.png)



### SharePointの項目作成のステップを追加する

![スクリーンショット 2020-08-22 23.06.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75072/0025ac71-a5f4-f121-a4ad-711d0c7414b4.png)

項目を入力する。

- 対応者と対応日は、申請後作業したあとに入力するものにするので、空白のまま。
- その他はFormsの内容をそのまま流用している

![スクリーンショット 2020-08-22 23.17.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75072/86d139e8-4978-8000-fd6b-d9310df54b77.png)

### Plannerのタスクの詳細更新のステップを追加する

![スクリーンショット 2020-08-22 23.19.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75072/c2f8547f-4662-9809-99cb-6ac5f752f3ef.png)

ここが少しテクニカルな部分になるが、申請を受けて作業したあとに、自動でSharePointリストを更新するためには、SharePointリストに追加したリストのIDが必要となる。
そのため、リストIDの情報をタスクの詳細に入れておくというもの。

#### プランのタスクIDを入れる
やや見つめるのが難しいので、キャプチャを貼っておく。
![スクリーンショット 2020-08-22 23.22.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75072/ecd05f1e-5302-fd14-039b-86420c2b7445.png)

説明に、SharePointリストアイテムのIDを入れる。

![スクリーンショット 2020-08-22 23.24.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75072/ef7626fe-d199-89a9-0794-2c233958e086.png)

### Teamsのメッセージを投稿ステップを追加
一応、通知はしましょうということで、Teamsメッセージを投稿

![スクリーンショット 2020-08-22 23.26.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75072/ff3dc93c-469f-ed6c-b2ef-fe6ad31539cc.png)

ここまでで、申請したものがSharepoint、Planner、Teamsに連携されることになります。
次からは、申請を受けて作業したあと、完了したことをSharePointに通知する処理です。

## 自動フローの作成で、タスクが完了した時をトリガーにして作成

![スクリーンショット 2020-08-22 23.36.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75072/8b6feec9-c40e-3934-9483-8a09ed53a7ea.png)

グループIDとプランIDはこれまで作成したもの。

![スクリーンショット 2020-08-22 23.34.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75072/a693de73-117c-0e32-b61a-a006e51649ae.png)

## タスクの詳細を取得するステップを追加
SharePointリストアイテムを特定するためのIDが入っているタスクの詳細を取得
引数には、完了したタスクのIDを設定。

![スクリーンショット 2020-08-22 23.35.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75072/e7ee9ed7-06d2-fbf9-c9ae-ca050cc8e349.png)

## 変数を初期化するステップを追加
このあとSharePointリストアイテムを更新しにいくが、SharePointリストアイテムのIDは整数型。
タスクの詳細で取得した文字列は文字列型のため、データ型を変換する必要がある。
本ステップはそのデータ型の変換を行う処理。

アクションで「変数」で検索すると変数を初期化するアクションが出てくるため、選択する。

![スクリーンショット 2020-08-22 23.39.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75072/dad56256-70a0-9787-e6eb-efec2d3be272.png)

- 名前は適当に設定。種類は、整数にする。
- 値は、「式」からint(value)を選択
- そのあとで、動的なコンテンツから「説明」を選択
- すぐしたのOKを押す

![スクリーンショット 2020-08-22 23.42.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75072/0bc99af0-0a53-fd0d-d84e-20b834abdee4.png)

![スクリーンショット 2020-08-22 23.43.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75072/0a72121c-4a7c-7b62-4c8b-d64585dbb06b.png)

## SharePointリストの項目の取得ステップを追加する

![スクリーンショット 2020-08-22 23.45.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75072/e672d427-e38d-f95e-7808-ece1bb21f793.png)

## SharePointの項目の更新ステップを追加する

![スクリーンショット 2020-08-22 23.48.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75072/04aa5205-551c-1618-2ee2-8f195d54d7cb.png)

- IDには、アイテムIDを入れる
- 対応者、対応日以外は取得した内容をそのままセットする
- 対応者は、タスクの割り当てられたユーザを設定する
- 対応日は、タスクの完了日時にする

![スクリーンショット 2020-08-22 23.50.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75072/f468fb07-d584-a153-314a-a18072fec73d.png)

以上で、PowerAutomateの設定は完了。

# 挙動確認
## Formsで申請を提出

![screencapture-forms-office-Pages-ResponsePage-aspx-2020-08-22-23_53_46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75072/f3e23bb3-09fb-5b12-87c4-ebe4fdf14498.png)

## Teamsで通知される

![スクリーンショット 2020-08-22 23.55.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75072/07f99775-73a8-e6d3-3ae9-d4055f507ae9.png)

## Plannerでタスクが作られる
![スクリーンショット 2020-08-22 23.57.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75072/bc7797d6-9e3e-9886-4639-d2fb9f270e4c.png)

ここで、作業者を特定するために、タスクに担当者を割り当てておく。

## SharePointリストにアイテムが追加されている

もちろん、対応者と対応日は入っていない。

![スクリーンショット 2020-08-22 23.58.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75072/d3c2a9b8-9dee-1e49-7752-6cf770d42048.png)

## Plannerのタスクが完了するとSharePointリストアイテムが更新される

![スクリーンショット 2020-08-23 0.22.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75072/e23f5ddf-1e34-c9db-fa93-40763583d5e0.png)

一連の流れが確認できました。

# おわりに
監査の統制という面で言えば、SharePointリストの権限を狭くする必要や、バックアップとしてExcelにも記載しておくなど考えることはありますが、申請→作業→クローズという流れはMS365のみでも十分行けるなぁと思いました。