【Power Automate】カスタムリストのリストアイテムにコメントを追加する子フローを作成する

**親フロー**から汎用的に呼び出せる、リストアイテムにコメントを追加する**子フロー**を作成する方法を呼び出し方を説明します。

# [ソリューションの作成](https://docs.microsoft.com/ja-jp/power-automate/overview-solution-flows#create-a-solution)

**Power Automate** で作成した**子フロー**を**親フロー**から呼び出すには、**親フロー**、**子フロー**ともに同じソリューション内に作成する必要があります。

1. **Power Automate** のサイドメニューから [ソリューション] を選択します。  
   ![pacm_001_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/338b9b76-1c67-26d7-d7a8-f2b7d886792b.png)
1. [新しいソリューション] をクリックします。  
   ![pacm_001_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/0d1775ab-6f24-2bd1-5deb-e55586f46658.png)
1. [表示名], [名前], [公開元] を入力して [作成]  ボタンをクリックします。  
   ![pacm_001_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/7b0c5f5b-c8d0-1d2f-b04c-bf2ff5919d36.png)
1. ソリューションが作成されます。  
   ![pacm_001_04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/c6319ac5-b465-2671-400f-b76eca341ce8.png)

---

# 環境変数にサイトを登録

**SharePoint** のサイトを環境変数に登録しておきます。
※必須ではありませんがソリューションのエクスポート＆インポートを考慮しています。

1. 作成した**ソリューション**を選択します。  
   ![pacm_002_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/6f2167c6-3568-cb21-30ba-538059e1f0cc.png)
1. [＋新規] から [その他] > [環境変数] を選択します。   
   ![pacm_002_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/477f052a-6daf-69f5-6c0e-009b953c39b7.png)
1. [表示名] を入力します。[名前] は自動入力されます。  
   ![pacm_002_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/18e9dab4-41d5-cbbd-9338-4a59fd9c09fd.png)
1. [データ型] は [データソース] を選択し、[コネクタ] で [SharePoint] を選択します。  
   ![pacm_002_04](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/20928035-e8b8-f865-347b-f61401cadbcd.png)
1. [接続] で管理者権限の接続を選択し、[パラメータの種類] は [サイト] を選択します。
1. [現在のサイト] に環境変数として登録するサイトを選択します。  
   ![pacm_002_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/b3e6d488-8c6e-df61-b95e-3b99b730bc00.png)

# 子フローの作成

作成した**ソリューション**内に、リストアイテムにコメントを追加する子フローを作成します。  
![pacm_003_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/e8f59296-d783-9a08-8d2d-e8854623136c.png)

## 手動トリガーのフローを作成する

1. 作成した**ソリューション**を選択します。  
   ![pacm_002_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/6f2167c6-3568-cb21-30ba-538059e1f0cc.png)
1. [＋新規] から [自動化] > [クラウドフロー] > [すぐに] を選択します。 
   ![pacm_003_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/89f2d99a-a5ba-733e-467b-21f5fc00b442.png)
1. [フロー名] を入力し、[手動でフローをトリガーします] を選択し、[作成] ボタンをクリックします。 
   ![pacm_003_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/85800995-0bbe-6029-3839-2f899b1c9c43.png)

## JSON 形式でデータを受け取る

1. JSON 形式でデータを受け取れるように [＋入力の追加] で [テキスト] を追加します。  
   ![pacm_003_01_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/00d4d39c-49d0-75a0-05a8-e7cbea1df6f1.png)
1. [＋新しいステップ] で [JSON の解析] を追加します。  
   ![pacm_003_01_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/533e06ee-0b5a-b22f-ea9f-3a55302f9867.png)
1. [JSON の解析] の [コンテンツ] に [＋入力の追加] で追加した JSON データを指定します。  
   ![pacm_003_01_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/5eb4de3c-e03a-e981-a602-239b96bd52c0.png)
1. [JSON の解析] の [スキーマ] を設定するために [サンプルから作成] をクリックします。  
   ![pacm_003_01_04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/8973bb1f-1e7b-394a-81d7-7f3d6989aa2c.png)
1. [サンプルデータ](#サンプルデータ) を入力して [完了] ボタンをクリックします。  
   ![pacm_003_01_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/05f5d3d1-a340-b1a5-3e67-da5e173cddf0.png)
1. [JSON の解析] の [スキーマ] が自動設定されます。  
   ![pacm_003_01_06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/2d0c105f-0a68-26c2-c201-e3ce74177c99.png)

### サンプルデータ

```json
{
  "ListTitle": "Announcements",
  "ID": 1,
  "Message": "申請を承認しますよ。",
  "Mail": "admin@xxxxxxxx.onmicrosoft.com",
  "Name": "管理者"
}
```

## HTTP 要求を送信する

リストアイテムのコメントを追加するために、**REST API** を使用します。

1. [＋新しいステップ] で [SharePoint に HTTP 要求を送信します] を追加します。
2. 解析した JSON の値を設定します。※下記参照  
   ![pacm_003_02_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/5e3eb0a1-2841-d6eb-9d31-65a8d0a9c110.png)

### サイトのアドレス

環境変数に登録したサイトを指定します。

### 方法

『POST』を設定します。

### URL

リストアイテムのコメントにアクセスする **REST API** を設定します。

```url
_api/web/lists/GetByTitle('@{body('JSON_の解析')?['ListTitle']}')/items(@{body('JSON_の解析')?['ID']})/Comments()
```

### ヘッダー

ヘッダーに設定するキーと値です。

| No.  | キー         | 値                             |
| :--: | ------------ | ------------------------------ |
|  1   | Accept       | application/json;odata=verbose |
|  2   | Content-Type | application/json;charset=UTF-8 |

### ボディ

ボディに JSON 形式でコメントに追加するメッセージを設定します。

```json
{
  "text": "@mention{0} @{body('JSON_の解析')?['Message']}",
  "mentions": [
    {
      "email": "@{body('JSON_の解析')?['Mail']}",
      "name": "@{body('JSON_の解析')?['Name']}"
    }
  ]
}
```

## 子フローとして呼び出すための設定

### PowerApp または Flow に応答する

子フローとして呼び出せるようにするために、応答を返すようにします。

1. [＋新しいステップ] で [PowerApp または Flow に応答する] を追加します。  
   ![pacm_003_03_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/80c91253-ff24-c106-8f6e-3639eb132a37.png)
1. 特に [出力追加] をする必要はありません。  
   ![pacm_003_03_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/6b31cb2b-f1b1-5448-cd19-41c1034767ac.png)

#### 注意

条件分岐して終了するような子フローを作成する際は、終了アクションの前に [PowerApp または Flow に応答する] アクションを追加するのを忘れないこと！
子フローからの応答が返ってこないと、タイムアウトエラーになります。

### 実行専用アクセス許可を管理

使用する接続の設定が**実行専用ユーザー**の場合、親フローから呼び出した際に以下のようなエラーになります。  
![pacm_003_04_00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/fa33f2eb-2682-7a2b-06ae-7efe20346d01.png)

接続の設定に管理者の権限のユーザを使用します。


1. [実行のみのユーザー] の [編集] をクリックします。  
   ![pacm_003_04_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/3d76693d-3f29-6d73-a83d-763c7bc33ef4.png)
1. [実行専用アクセス許可を管理] の [使用する接続] > **SharePoint** に『実行専用のユーザーによって提供されました』が設定されています。  
   ![pacm_003_04_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/636bc8ea-5e50-ac6a-2965-747ddaf9354e.png)
1. 実行するユーザーを選択して OK ボタンをクリックします。  
   ![pacm_003_04_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/f934482d-fd98-7564-14af-2b19a495f105.png)1. 実行するユーザーが設定されたら、[保存] ボタンをクリックします。  
   ![pacm_003_04_04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/82335aa8-9b4e-99c2-c641-f8c92c96e47e.png)

---

# 親フローからの呼び出し

親フローから呼び出す方法です。

1. 子フロー呼び出し時に指定する JSON 文字列を変数に格納します。  
   ![pacm_003_05_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/7b3f08e0-6d59-1a93-cd5c-1a64e8175f40.png)
1. [＋新しいステップ] で [子フローの実行] を追加します。  
   ![pacm_003_05_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/08da69f0-1a73-1ce0-470d-28bd6048093b.png)
1. 作成した子フローを指定して、JSON データに変数を指定します。  
   ![pacm_003_05_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/d2b123bb-c82f-e026-5460-2e714d956673.png)

---

# 参考サイト

- [Power Automate から SharePoint リスト のコメントを追加する - MoreBeerMorePower (hatenablog.com)](https://mofumofupower.hatenablog.com/entry/splist_comment_automate)
- [ソリューションに対応したフローの概要 - Power Automate | Microsoft Docs](https://docs.microsoft.com/ja-jp/power-automate/overview-solution-flows)
- [Power Apps + Power Automate + Sharepoint で管理者のみ更新可能なリストとアプリを作成する - Qiita](https://qiita.com/miu200521358/items/39381a41c73210200b15)
- [PowerAutomate PowerAutomateは共通機能を関数化できるのか？？ | 仕事のあれこれ (ippu-biz.com)](https://ippu-biz.com/development/powerplatform/powerautomate/common-logic/)
- [Power Automate で「終了」「スコープ」を活用し、見た目をすっきりさせよう - Qiita](https://qiita.com/kojisaiki/items/aeecd7f20c224e77c665)