PowerAutomate: Planner の バケット名を取得する方法

# 背景
Planner を自動化している人からの質問で、バケット名が取れない！って話があったので調べてみた記録

# 概要
- Planner のコネクターを調べると、バケット名が取れるのは [バケットの一覧表示](https://docs.microsoft.com/ja-jp/connectors/planner/#%E3%83%90%E3%82%B1%E3%83%83%E3%83%88%E3%81%AE%E4%B8%80%E8%A6%A7%E8%A1%A8%E7%A4%BA) のみ

で、その [取得結果](https://docs.microsoft.com/ja-jp/connectors/planner/#definitions) はこんな感じ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/1b91ee55-ba0f-ddd3-58cf-7ea8c43df98f.png)

ということで、方針は
1. バケットID と バケット名　の一覧を用意
1. 取得したいバケットID に該当するバケット名を取得する

ってことだけど・・
バケット一覧を取得しようとするとある課題が・・

- グループID
- プランID

の二つが必要

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/ac2d1923-9a6a-d8e0-8daa-3a72f36635f3.png)

で、グループ、プラン、バケットの関係は以下なので、

- グループ
    - プラン
        - バケット

方針としては
1. グループ一覧取得
1. プラン一覧取得
1. バケット一覧取得
1. ようやく、バケットID/名前　一覧を作成
1. 一覧を利用して、バケットIDから名前を取得

# 詳細
## フロー全景
こんな感じで、バケット名が取れます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/dac2bc9a-ab59-6c27-b6bd-01ca9cae8114.png)


それぞれの説明をしていくと・・
## バケットID と バケット名　の一覧 の変数初期化
一覧作るので、まずは配列として初期化しておく
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/d4b0c106-b973-c02c-d7f6-65b4d6ee2431.png)

## バケットID と バケット名　の一覧 の変数一覧作成
1. グループ一覧取得
1. プラン一覧取得
1. バケット一覧取得
1. バケットID/名前　一覧を作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/b15c40e8-5161-26eb-b359-25022d3766bc.png)

### プラン一覧取得の設定
動的コンテンツで、グループID を渡すだけ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/b7022ffd-eddb-8397-afa7-cd3da3289f90.png)

### バケット一覧の取得
こちらも動的コンテンツで、グループID　と　プランID を渡すだけ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/b39e36c4-d10d-095c-6431-7c276dfc83b7.png)

### 一覧に、それぞれのバケットID/名前 を紐づけたオブジェクトを追加していく
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/87df9c77-c0cc-d853-85d5-5aa22810608b.png)

これで、あとは、BucketID で拾うだけ

```json:一覧オブジェクト作成
{
  "BucketID": @{items('Apply_to_each_Bucket')?['id']},
  "BucketName": @{items('Apply_to_each_Bucket')?['name']}
}
```

## バケット名取得
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/a26869f6-f57d-1b35-20fb-26e02f65a154.png)

### バケットID でのフィルター方法
単純にバケットIDで一致 (equal) するものだけにフィルター
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/b7e0c077-b8bc-8c46-8f6a-795b819c813e.png)

```json:フィルター条件
@equals(items('Apply_to_each_Task')?['bucketId'], item()['BucketID'])
```

https://qiita.com/baku2san/items/39e7a40c1a1fb327362a#%E3%83%95%E3%82%A3%E3%83%AB%E3%82%BF%E3%83%BC%E9%85%8D%E5%88%97filter-array

### バケット名を一点だけ取得
最初の一点を取得するだけ
こうしておかないと、参照した際に、リストの展開が勝手に走るので、その予防。
あとは使うだけですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/0181ea11-db7c-c760-239a-375549c795a3.png)

```json:最初の一点取得
@{first(body('Filter_array')).BucketName}
```

:::note warn
自分で作成した変数である為、動的コンテンツには出てきません。
動的コンテンツで使いたい場合は、JSON解析(Parse JSON) で解析させてやれば、使えます。
:::

# 関連コネクター一覧
[自分が所有および属しているグループを一覧表示する](https://docs.microsoft.com/ja-jp/connectors/office365groups/#%E8%87%AA%E5%88%86%E3%81%8C%E6%89%80%E6%9C%89%E3%81%8A%E3%82%88%E3%81%B3%E5%B1%9E%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E3%82%92%E4%B8%80%E8%A6%A7%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B)
[グループのリストを一覧表示する](https://docs.microsoft.com/ja-jp/connectors/planner/#%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E3%81%AE%E3%83%AA%E3%82%B9%E3%83%88%E3%82%92%E4%B8%80%E8%A6%A7%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B)
[バケットの一覧表示](https://docs.microsoft.com/ja-jp/connectors/planner/#%E3%83%90%E3%82%B1%E3%83%83%E3%83%88%E3%81%AE%E4%B8%80%E8%A6%A7%E8%A1%A8%E7%A4%BA)

[タスクの一覧表示](https://docs.microsoft.com/ja-jp/connectors/planner/#%E3%82%BF%E3%82%B9%E3%82%AF%E3%81%AE%E4%B8%80%E8%A6%A7%E8%A1%A8%E7%A4%BA)

# 再現方法
以下のそれぞれの JSON をコピペ利用することで可能。コピペ方法は以下

https://qiita.com/baku2san/items/ad4f7fa744d104b23f50

## バケットID と バケット名　の一覧 の変数初期化部分
変数初期化を Scope に含ませられないので、分割してます

```json:一覧用変数
{
    "id": "70194cac-722a-410e-928b-e23626136756",
    "brandColor": "#770BD6",
    "connectionReferences": {
        "shared_office365groups": {
            "connection": {
                "id": "/providers/Microsoft.PowerApps/apis/shared_office365groups/connections/shared-office365grou-c08f06b2-071d-44e3-bb02-62fc623e68ed"
            }
        },
        "shared_planner": {
            "connection": {
                "id": "/providers/Microsoft.PowerApps/apis/shared_planner/connections/shared-planner-9e851f83-d92f-4f9a-a2e5-81121d888066"
            }
        }
    },
    "connectorDisplayName": "Variables",
    "icon": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzJweCIgaGVpZ2h0PSIzMnB4IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMzIgMzIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+DQogPHJlY3Qgd2lkdGg9IjMyIiBoZWlnaHQ9IjMyIiBmaWxsPSIjNzcwQkQ2Ii8+DQogPGcgZmlsbD0iI2ZmZiI+DQogIDxwYXRoIGQ9Ik02Ljc2MywxMy42ODV2LTMuMjA4QzYuNzYzLDguNzQ4LDcuNzYyLDgsMTAsOHYxLjA3Yy0xLDAtMiwwLjMyNS0yLDEuNDA3djMuMTg4ICAgIEM4LDE0LjgzNiw2LjUxMiwxNiw1LjUxMiwxNkM2LjUxMiwxNiw4LDE3LjE2NCw4LDE4LjMzNVYyMS41YzAsMS4wODIsMSwxLjQyOSwyLDEuNDI5VjI0Yy0yLjIzOCwwLTMuMjM4LTAuNzcyLTMuMjM4LTIuNXYtMy4xNjUgICAgYzAtMS4xNDktMC44OTMtMS41MjktMS43NjMtMS41ODV2LTEuNUM1Ljg3LDE1LjE5NCw2Ljc2MywxNC44MzQsNi43NjMsMTMuNjg1eiIvPg0KICA8cGF0aCBkPSJtMjUuMjM4IDEzLjY4NXYtMy4yMDhjMC0xLjcyOS0xLTIuNDc3LTMuMjM4LTIuNDc3djEuMDdjMSAwIDIgMC4zMjUgMiAxLjQwN3YzLjE4OGMwIDEuMTcxIDEuNDg4IDIuMzM1IDIuNDg4IDIuMzM1LTEgMC0yLjQ4OCAxLjE2NC0yLjQ4OCAyLjMzNXYzLjE2NWMwIDEuMDgyLTEgMS40MjktMiAxLjQyOXYxLjA3MWMyLjIzOCAwIDMuMjM4LTAuNzcyIDMuMjM4LTIuNXYtMy4xNjVjMC0xLjE0OSAwLjg5My0xLjUyOSAxLjc2Mi0xLjU4NXYtMS41Yy0wLjg3LTAuMDU2LTEuNzYyLTAuNDE2LTEuNzYyLTEuNTY1eiIvPg0KICA8cGF0aCBkPSJtMTUuODE1IDE2LjUxMmwtMC4yNDItMC42NDFjLTAuMTc3LTAuNDUzLTAuMjczLTAuNjk4LTAuMjg5LTAuNzM0bC0wLjM3NS0wLjgzNmMtMC4yNjYtMC41OTktMC41MjEtMC44OTgtMC43NjYtMC44OTgtMC4zNyAwLTAuNjYyIDAuMzQ3LTAuODc1IDEuMDM5LTAuMTU2LTAuMDU3LTAuMjM0LTAuMTQxLTAuMjM0LTAuMjUgMC0wLjMyMyAwLjE4OC0wLjY5MiAwLjU2Mi0xLjEwOSAwLjM3NS0wLjQxNyAwLjcxLTAuNjI1IDEuMDA3LTAuNjI1IDAuNTgzIDAgMS4xODYgMC44MzkgMS44MTEgMi41MTZsMC4xNjEgMC40MTQgMC4xOC0wLjI4OWMxLjEwOC0xLjc2IDIuMDQ0LTIuNjQxIDIuODA0LTIuNjQxIDAuMTk4IDAgMC40MyAwLjA1OCAwLjY5NSAwLjE3MmwtMC45NDYgMC45OTJjLTAuMTI1LTAuMDM2LTAuMjE0LTAuMDU1LTAuMjY2LTAuMDU1LTAuNTczIDAtMS4yNTYgMC42NTktMi4wNDggMS45NzdsLTAuMjI3IDAuMzc5IDAuMTc5IDAuNDhjMC42ODQgMS44OTEgMS4yNDkgMi44MzYgMS42OTQgMi44MzYgMC40MDggMCAwLjcyLTAuMjkyIDAuOTM1LTAuODc1IDAuMTQ2IDAuMDk0IDAuMjE5IDAuMTkgMC4yMTkgMC4yODkgMCAwLjI2MS0wLjIwOCAwLjU3My0wLjYyNSAwLjkzOHMtMC43NzYgMC41NDctMS4wNzggMC41NDdjLTAuNjA0IDAtMS4yMjEtMC44NTItMS44NTEtMi41NTVsLTAuMjE5LTAuNTc4LTAuMjI3IDAuMzk4Yy0xLjA2MiAxLjgyMy0yLjA3OCAyLjczNC0zLjA0NyAyLjczNC0wLjM2NSAwLTAuNjc1LTAuMDkxLTAuOTMtMC4yNzFsMC45MDYtMC44ODVjMC4xNTYgMC4xNTYgMC4zMzggMC4yMzQgMC41NDcgMC4yMzQgMC41ODggMCAxLjI1LTAuNTk2IDEuOTg0LTEuNzg2bDAuNDA2LTAuNjU4IDAuMTU1LTAuMjU5eiIvPg0KICA8ZWxsaXBzZSB0cmFuc2Zvcm09Im1hdHJpeCguMDUzNiAtLjk5ODYgLjk5ODYgLjA1MzYgNS40OTI1IDMyLjI0NSkiIGN4PSIxOS43NTciIGN5PSIxMy4yMjUiIHJ4PSIuNzc4IiByeT0iLjc3OCIvPg0KICA8ZWxsaXBzZSB0cmFuc2Zvcm09Im1hdHJpeCguMDUzNiAtLjk5ODYgLjk5ODYgLjA1MzYgLTcuNTgzOSAzMC42MjkpIiBjeD0iMTIuMzY2IiBjeT0iMTkuMzE1IiByeD0iLjc3OCIgcnk9Ii43NzgiLz4NCiA8L2c+DQo8L3N2Zz4NCg==",
    "isTrigger": false,
    "operationName": "Initialize_variable_Buckets",
    "operationDefinition": {
        "type": "InitializeVariable",
        "inputs": {
            "variables": [
                {
                    "name": "Buckets",
                    "type": "array",
                    "value": []
                }
            ]
        },
        "runAfter": {},
        "metadata": {
            "operationMetadataId": "42d478aa-c3ea-451d-bccd-321304caff6b"
        }
    }
}
```

## 残りの全部
```json:フロー全体
{
    "id": "d03606a6-adbf-447d-bee2-42b4d0eee36b",
    "brandColor": "#8C3900",
    "connectionReferences": {
        "shared_office365groups": {
            "connection": {
                "id": "/providers/Microsoft.PowerApps/apis/shared_office365groups/connections/shared-office365grou-c08f06b2-071d-44e3-bb02-62fc623e68ed"
            }
        },
        "shared_planner": {
            "connection": {
                "id": "/providers/Microsoft.PowerApps/apis/shared_planner/connections/shared-planner-9e851f83-d92f-4f9a-a2e5-81121d888066"
            }
        }
    },
    "connectorDisplayName": "Control",
    "icon": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDMyIDMyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPg0KIDxwYXRoIGQ9Im0wIDBoMzJ2MzJoLTMyeiIgZmlsbD0iIzhDMzkwMCIvPg0KIDxwYXRoIGQ9Im04IDEwaDE2djEyaC0xNnptMTUgMTF2LTEwaC0xNHYxMHptLTItOHY2aC0xMHYtNnptLTEgNXYtNGgtOHY0eiIgZmlsbD0iI2ZmZiIvPg0KPC9zdmc+DQo=",
    "isTrigger": false,
    "operationName": "Scope",
    "operationDefinition": {
        "type": "Scope",
        "actions": {
            "Scope_Create_Buckets_Name_List": {
                "type": "Scope",
                "actions": {
                    "List_groups_that_I_own_and_belong_to": {
                        "type": "OpenApiConnection",
                        "inputs": {
                            "host": {
                                "connectionName": "shared_office365groups",
                                "operationId": "ListOwnedGroups_V3",
                                "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365groups"
                            },
                            "parameters": {},
                            "authentication": {
                                "type": "Raw",
                                "value": "@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']"
                            }
                        },
                        "runAfter": {},
                        "metadata": {
                            "operationMetadataId": "f160977d-37f3-44fc-8d62-a2acec6df09f"
                        }
                    },
                    "Apply_to_each_Group": {
                        "type": "Foreach",
                        "foreach": "@outputs('List_groups_that_I_own_and_belong_to')?['body/value']",
                        "actions": {
                            "List_plans_for_a_group": {
                                "type": "OpenApiConnection",
                                "inputs": {
                                    "host": {
                                        "connectionName": "shared_planner",
                                        "operationId": "ListGroupPlans",
                                        "apiId": "/providers/Microsoft.PowerApps/apis/shared_planner"
                                    },
                                    "parameters": {
                                        "groupId": "@items('Apply_to_each_Group')?['id']"
                                    },
                                    "authentication": {
                                        "type": "Raw",
                                        "value": "@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']"
                                    }
                                },
                                "runAfter": {},
                                "metadata": {
                                    "operationMetadataId": "f6f5e952-fc2d-41bc-9721-576f3d1a8d7b"
                                }
                            },
                            "Apply_to_each_Plan": {
                                "type": "Foreach",
                                "foreach": "@outputs('List_plans_for_a_group')?['body/value']",
                                "actions": {
                                    "List_buckets": {
                                        "type": "OpenApiConnection",
                                        "inputs": {
                                            "host": {
                                                "connectionName": "shared_planner",
                                                "operationId": "ListBuckets_V3",
                                                "apiId": "/providers/Microsoft.PowerApps/apis/shared_planner"
                                            },
                                            "parameters": {
                                                "groupId": "@items('Apply_to_each_Group')?['id']",
                                                "id": "@items('Apply_to_each_Plan')?['id']"
                                            },
                                            "authentication": {
                                                "type": "Raw",
                                                "value": "@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']"
                                            }
                                        },
                                        "runAfter": {},
                                        "metadata": {
                                            "operationMetadataId": "011459fc-89b5-4da1-91d8-4bb21a74fa91"
                                        }
                                    },
                                    "Apply_to_each_Bucket": {
                                        "type": "Foreach",
                                        "foreach": "@outputs('List_buckets')?['body/value']",
                                        "actions": {
                                            "Append_to_array_variable": {
                                                "type": "AppendToArrayVariable",
                                                "inputs": {
                                                    "name": "Buckets",
                                                    "value": {
                                                        "BucketID": "@items('Apply_to_each_Bucket')?['id']",
                                                        "BucketName": "@items('Apply_to_each_Bucket')?['name']"
                                                    }
                                                },
                                                "runAfter": {},
                                                "metadata": {
                                                    "operationMetadataId": "6a6f440a-761a-43f5-9032-6b675a1d3a26"
                                                }
                                            }
                                        },
                                        "runAfter": {
                                            "List_buckets": [
                                                "Succeeded"
                                            ]
                                        },
                                        "metadata": {
                                            "operationMetadataId": "0423a98d-4e3e-4418-a555-b21075cd6619"
                                        }
                                    }
                                },
                                "runAfter": {
                                    "List_plans_for_a_group": [
                                        "Succeeded"
                                    ]
                                },
                                "metadata": {
                                    "operationMetadataId": "a599c042-bd54-4175-a133-b10603c7bf10"
                                }
                            }
                        },
                        "runAfter": {
                            "List_groups_that_I_own_and_belong_to": [
                                "Succeeded"
                            ]
                        },
                        "metadata": {
                            "operationMetadataId": "bb4a0b17-76b7-4beb-bb2f-a1933ad5a258"
                        }
                    }
                },
                "runAfter": {},
                "metadata": {
                    "operationMetadataId": "3bc94144-d2ea-47d4-ae84-7829eabef01f"
                }
            },
            "Scope_Get_Bucket_Name": {
                "type": "Scope",
                "actions": {
                    "List_my_tasks": {
                        "type": "OpenApiConnection",
                        "inputs": {
                            "host": {
                                "connectionName": "shared_planner",
                                "operationId": "ListMyTasks_V2",
                                "apiId": "/providers/Microsoft.PowerApps/apis/shared_planner"
                            },
                            "parameters": {},
                            "authentication": {
                                "type": "Raw",
                                "value": "@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']"
                            }
                        },
                        "runAfter": {},
                        "metadata": {
                            "operationMetadataId": "01bfed00-a150-4beb-8ba7-82f924956ac4"
                        }
                    },
                    "Apply_to_each_Task": {
                        "type": "Foreach",
                        "foreach": "@outputs('List_my_tasks')?['body/value']",
                        "actions": {
                            "Get_a_task": {
                                "type": "OpenApiConnection",
                                "inputs": {
                                    "host": {
                                        "connectionName": "shared_planner",
                                        "operationId": "GetTask_V2",
                                        "apiId": "/providers/Microsoft.PowerApps/apis/shared_planner"
                                    },
                                    "parameters": {
                                        "id": "@items('Apply_to_each_Task')?['id']"
                                    },
                                    "authentication": {
                                        "type": "Raw",
                                        "value": "@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']"
                                    }
                                },
                                "runAfter": {},
                                "metadata": {
                                    "operationMetadataId": "75b1ab60-8a5e-45b8-9b92-de444ce90888"
                                }
                            },
                            "Compose": {
                                "type": "Compose",
                                "inputs": "@first(body('Filter_array')).BucketName",
                                "runAfter": {
                                    "Filter_array": [
                                        "Succeeded"
                                    ]
                                },
                                "metadata": {
                                    "operationMetadataId": "58a0fca4-a11c-4111-85ca-6dac3e80b360"
                                }
                            },
                            "Filter_array": {
                                "type": "Query",
                                "inputs": {
                                    "from": "@variables('Buckets')",
                                    "where": "@equals(outputs('Get_a_task')?['body/bucketId'], item().BucketID)"
                                },
                                "runAfter": {
                                    "Get_a_task": [
                                        "Succeeded"
                                    ]
                                },
                                "metadata": {
                                    "operationMetadataId": "83c63ed1-bb0f-46b9-a146-9cbe433e3ab0"
                                }
                            }
                        },
                        "runAfter": {
                            "List_my_tasks": [
                                "Succeeded"
                            ]
                        },
                        "metadata": {
                            "operationMetadataId": "b3708b9f-e926-402e-b59e-dd955c2af2b7"
                        }
                    }
                },
                "runAfter": {
                    "Scope_Create_Buckets_Name_List": [
                        "Succeeded"
                    ]
                },
                "metadata": {
                    "operationMetadataId": "57ae0ab0-df53-4192-a672-e998e878eb61"
                }
            }
        },
        "runAfter": {
            "Initialize_variable_Buckets": [
                "Succeeded"
            ]
        },
        "metadata": {
            "operationMetadataId": "5fb5226e-360f-4068-9d9a-9b90ff348419"
        }
    }
}
```

# あとがき
Planner のコネクター要望にあげて、対応してもらうようなレベルだなぁとやってみて思いました。
そのうち更新されるんじゃないのかな？

# keyword
how to get Bucket Name of Planner by Power Automate