選択したTeamメンバーの一覧をAutomateで作る with SharePoint Rest API

# 何のために？
- チーム内の管理用Listを作るときに、メンバー全員を入れるのが手作業だと面倒なので
    - Automateを使わないTeamとかもあるけれど、メンバー一覧があると提出記録なんかも記録しやすいよね、と

# Source

[Zip で共有](https://drive.google.com/file/d/1WurGsiZJ5eekoeLKnLQ7O_ngRUZov0QX/view?usp=sharing)

# 動作概要
1. 起動
    1. Instantなんで、Run Flowか、Flow Editorから
    1. Select for message とかで起動するのもありなんだけど、しょっちゅう使うものでもないしねぇ・・
1. Automateからチャットが飛んでくる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/65980102-5292-aeb3-2694-a57823fd5942.png)
    1. 新規作成するリスト名を入れる（一応日本語でもOK）
    1. 実行者が所属 or 保有しているTeamの一覧から、追加するTeamを選択
    1. 「これで生成する」を押して生成開始
1. 後は待つのみ<br>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/0fa644ba-5ba5-e882-f358-e7515481e97b.png)
1. 完了したら、リンクがあるので踏む
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/a9a312c1-2bfa-7165-285b-bbf791cb8f43.png)
1. こんな感じでListが出来て、中にはメンバーが入ってます<br>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/f64ed6f1-7c55-a8d1-2811-75f4baeef080.png) 

# Automate のDefault Actionだけでやらなかった理由
- Team 選んで既存のListに突っ込むとなると、既存のItemとの競合を考える必要があるので面倒。で、Listを新規作成して突っ込もうとしたら・・Default Action だけじゃダメだったのです。今後Rest APIを網羅してくればとは思いますが、どうなんでしょうね。

# で、フロー：後日Zipで公開するかも？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/6cc3774b-f85d-e1b2-6412-bc765f21e54e.png)
肝っぽいとこだけ一応紹介
## 追加するTeamの選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/adda074f-8541-5462-8742-aa9cce66c39e.png)

```json:SelectTeam
{
    "type": "AdaptiveCard",
    "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
    "msteams": {
        "width": "full"
    },
    "version": "1.2",
    "body": [
        {
            "type": "Container",
            "items": [
                {
                    "type": "TextBlock",
                    "text": "追加する Lists の名前を入力してください",
                    "wrap": true,
                    "color": "Accent"
                },
                {
                    "type": "Input.Text",
                    "placeholder": "リストの名前",
                    "id": "ListName",
                    "value": "UserNames"
                },
                {
                    "type": "TextBlock",
                    "text": "同一名称があった場合、末尾に数字付加",
                    "wrap": true,
                    "color": "Warning",
                    "spacing": "None",
                    "horizontalAlignment": "Right",
                    "size": "Small",
                    "weight": "Lighter"
                }
            ]
        },
        {
            "type": "Container",
            "separator": true,
            "items": [
                {
                    "type": "TextBlock",
                    "text": "ユーザー一覧を追加したいTeamを選択してください。",
                    "wrap": true,
                    "color": "Accent"
                },
                {
                    "type": "Input.ChoiceSet",
                    "choices": @{outputs('Compose_TeamList')},
                    "placeholder": "Placeholder text",
                    "id": "TeamSelection",
                    "spacing": "None"
                },
                {
                    "type": "TextBlock",
                    "text": "選んだTeams内のListsに追加します。",
                    "wrap": true,
                    "spacing": "None",
                    "horizontalAlignment": "Right",
                    "size": "Small",
                    "weight": "Lighter",
                    "color": "Warning"
                }
            ]
        },
        {
            "type": "ActionSet",
            "actions": [
                {
                    "type": "Action.Submit",
                    "title": "これで生成する",
                    "wrap": true,
                    "style": "positive"
                }
            ]
        }
    ]
}
```
## List新規作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/550603ac-f3f6-ef82-c40c-76cd791f947d.png)

```json:CreateList
{
  "__metadata": {
    "type": "SP.List"
  },
  "AllowContentTypes": true,
  "BaseTemplate": 100 ,
  "ContentTypesEnabled": true,
  "Description": "Users List Created By Automate",
  "Title": "@{variables('ListName')}"
}
```
:::note info
BaseTemplate の番号は、Site の設定から。お知らせ=104 とか
:::
## 選択したTeamのメンバー取得
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/de97c523-92fd-4925-5e71-a12114715ff5.png)

## Listにメンバーを追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/1c3ec0da-b275-49c0-d853-677ea3c2c8a5.png)

# あとがき
勢いで作ってみたけど、Qiitaじゃ公開しにくいことに気付いた・・GitHub久しぶりに使うかのぉ :thinking: 

# 今回利用した Share Rest API まとめ
https://docs.microsoft.com/ja-jp/sharepoint/dev/sp-add-ins/sharepoint-net-server-csom-jsom-and-rest-api-index#sharepoint-api-index

<table>
    <thead>
        <tr>
            <th>目的</th>
            <th>api</th>
            <th>MS Doc</th>
            <th>補足</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>Lists 一覧</td>
            <td>_api/web/lists</td>
            <td rowspan=3><a href="https://docs.microsoft.com/ja-jp/sharepoint/dev/sp-add-ins/working-with-lists-and-list-items-with-rest">REST を使用してリストとリスト アイテムを操作する</a></td>
            <td></td>
        </tr>
        <tr>
            <td>List 取得 by <b>Title</b></td>
            <td>_api/web/lists<br/>/getByTitle('{Title}')</td>
            <td></td>
        </tr>
        <tr>
            <td>対象List の items 一覧</td>
            <td>_api/web/lists<br/>/getByTitle('{Title}')/items</td>
            <td></td>
        </tr>
        <tr>
            <td>対象List の View 一覧</td>
            <td>_api/web/lists<br/>/getByTitle('{Title}')/views</td>
            <td rowspan=3><a href="https://docs.microsoft.com/en-us/previous-versions/office/sharepoint-visio/jj245986%28v%3doffice.15%29#properties">View Properties（古い？）</a></td>
            <td></td>
        </tr>
        <tr>
            <td>対象List の View 取得 by <b>Title</b></td>
            <td>_api/web/lists<br/>/getByTitle('{Title}')/views<br/>/getByTitle('{Title}')</td>
            <td></td>
        </tr>
        <tr>
            <td>対象List の View の Fileds 一覧</td>
            <td>_api/web/lists<br/>/getByTitle('{Title}')/views<br/>/getByTitle('{Title}')/ViewFields</td>
            <td></td>
        </tr>
        <tr>
            <td>対象List の View の Fileds に Field 追加</td>
            <td>_api/web/lists<br/>/getByTitle('{Title}')/views<br/>/getByTitle('{Title}')/ViewFields<br/>/AddViewField</td>
            <td><a href="https://docs.microsoft.com/en-us/previous-versions/office/developer/sharepoint-rest-reference/dn531433(v=office.15)#viewfieldcollection-methods">ViewFieldCollection methods</a></td>
            <td></td>
        </tr>
        <tr>
            <td>Site の user 一覧</td>
            <td>_api/Web/SiteUsers</td>
            <td><a href="https://docs.microsoft.com/en-us/dotnet/api/microsoft.sharepoint.spweb.siteusers?view=sharepoint-server">SPWeb.SiteUsers Property</a></td>
            <td>UserのGUIDではなく、サイトに紐づいたIDが取得可能。というか、Actionで取る方法は無いのかな？あってもサイト指定になるから面倒かなぁ・・</td>
        </tr>
        <tr>
            <td>自分の情報</td>
            <td>_api/SP.UserProfiles.PeopleManager<br/>/GetMyProperties</td>
        <td><a href="https://docs.microsoft.com/ja-jp/previous-versions/office/developer/sharepoint-rest-reference/dn790354(v=office.15)?redirectedfrom=MSDN#peoplemanager-%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89">PeopleManager メソッド</a></td>
            <td><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1645569/3f7b104c-7881-365e-4929-a1db2f0e8db2.png">これで取れない事があれば？</img></td>
        </tr>
    </tbody>
</table>