データを格納する SharePoint リストに設定も持たせ、Power Automate で利用する

## 経緯

以前、SharePoint リストの説明に簡単な設定を入れ込んだことがあり、
それを Power Automate でも利用するとしたらできるのかな？っとやってみたメモ

## 今回のお題(仕様)

* あるユーザーがチャネルに投稿したら、SharePoint リストにログを残す

## 前準備

* MS Teams にて、「お試し用チーム」を作成
* 一般チャネルにリストを作成
  - 「ListWithSettings」を作成して、その後「投稿があったらログを取る」に名前を変更
  - 列の設定
    - タイトル: 1行テキスト
    - ログ: 複数行テキスト  
    - ユーザー名: 1行テキスト  
      ![20220101_1_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118961/89db53e2-245c-e01d-e414-66bf7b902516.png)
* リスト「投稿があったらログを取る」の説明に設定を登録
1. リストを SharePoint で開く  
  ![20220101_1_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118961/8e780036-eb58-e574-ff26-6330a4ef951f.png)
2. リストの設定を開く  
  ![20220101_1_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118961/16f0370e-9611-15ea-58bf-739c4949a4ad.png)
3. [リスト名、説明、ナビゲーションの列挙] をクリック  
  ![20220101_1_04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118961/483160d0-df54-820f-28fe-00e0ffb39fd8.png)
4. 設定を登録  
  ここで登録されているアカウントが投稿したらログを取るようにする  
  ![20220101_1_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118961/e8fcd3e0-dae1-3d6c-b4ce-6859c7781413.png)

```json
{
    "TargetUser": ["テストユーザー 01", "テストユーザー 02"]
}
```

## Power Automate での実装

フロー全体は下図のようになります
![20220101_1_10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118961/a4fd1afe-7f19-a440-a119-f97080f74041.png)

今回は追加したステップの名前は変更しないで説明してみます

トリガーは「チャネルに新しいメッセージが追加された時」としています
![20220101_1_11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118961/2cb6eadb-5121-49b4-1791-99743767c3e8.png)

次のステップでは、「SharePoint に HTTP 要求を送信します」を使い、
リストの説明部分だけ取得します
![20220101_1_12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118961/bd873d32-0ac5-d4f9-50dd-da43cc0cd3ad.png)

次のステップでは、説明にセットした文字を JSON オブジェクトに変換して、
変数にセットします
![20220101_1_13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118961/1d6c492c-da92-778d-5cf6-c4b3236f606a.png)

式の内容は下記のようにしています

```bash
json(outputs('SharePoint_に_HTTP_要求を送信します')?['body']['d']['Description'])
```

次のステップでは、JSON オブジェクトの値を扱いやすくするために、
JSON の解析を行っています

![20220101_1_14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118961/75447595-3cef-ef62-a248-07213cb7d1de.png)

スキーマはサンプルから生成していますが、下記のようになっています

```json
{
    "type": "object",
    "properties": {
        "TargetUser": {
            "type": "array",
            "items": {
                "type": "string"
            }
        }
    }
}
```

ここまでが今回の主旨なので、ここからは特に載せる必要はないのですが... ｗ
次のステップでは、投稿したユーザー名と設定されているユーザー名がマッチしているかを
チェックしています
![20220101_1_15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118961/5b6bd217-97cd-5daa-1a11-011fcc3d6503.png)

左辺の式は下記のようにしています

```bash
contains(body('JSON_の解析')?['TargetUser'], triggerOutputs()?['body/from/user/displayName'])
```

最後のステップは先のステップの条件にマッチした時、SharePoint にアイテムを
登録するようにしています
![20220101_1_16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118961/37bd059b-784b-abdd-6706-7ad7abcb53a1.png)

## 結果

まぁフローの結果はどうでもいいんですが、
1 つ目の投稿がログ対象外のユーザー、2 つ目の投稿がログ対象ユーザー
![20220101_1_20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118961/b9e8fb76-b0a1-44a5-ed2c-a5487621aa2e.png)

「投稿があったらログを取る」リストの状態
![20220101_1_21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118961/f3af1914-a0d2-20bc-8a48-0d37c379ea6f.png)


## 考察

以前、リスト単体にデータと設定を入れる必要があってやったことがあるのですが、
当時は JavaScript か PowerShell で CSOM 使ってガリゴリしていたと記憶です

Power Automate で同じことするとこんな感じかーということだけの自己満足記事です