【Power Automate】多段階承認フローの担当者を動的に設定する

# 【Power Automate】多段階承認フローの担当者を動的に設定する

:::note
Power Automate の**承認**コネクタで、『連続した承認』(多段階承認) が実装されました。※2024/06
:::

『開始して承認を待機』アクションの [承認の種類] プロパティで『連続した承認』を指定すると、多段階での承認フローが作成できます。
[承認ステップ] プロパティで [＋新しい項目の追加] をクリックすると担当者を増やしていけるような UI になっています。しかし、この設定方法だと固定の人数でしか設定することができません。
![image-20241119221850862.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/d66dd7eb-8a1b-6bdd-17bf-47e37be3aad9.png)

[承認ステップ] プロパティの右上にある [アレイ全体の入力に切り替える] をクリックすると、設定されている JSON 形式の文字列が確認できます。
![image-20241119221946726.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/1f230ca1-d156-e73f-1547-b291a4cb6ab0.png)

上記の様に３名の担当者を設定した場合は、以下のような JSON 形式の文字列になっています。
![image-20241119222006140.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/6812b97f-50a5-10a3-5314-7a909a4760bc.png)

メールアドレスの配列を上記のような JSON 形式の文字列に変換することができれば、動的に多段階の承認ルートを設定できるということです。

## 変換方法

例として、今回はインスタント クラウドフローを構築します。

### 複数ユーザーを設定できる UI の準備

『フローを手動でトリガーする』トリガーに [＋入力の追加] から『電子メール』を追加します。
![image-20241119213910940.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/e014591b-ffb8-39a8-5e3b-82f248a2f688.png)

この入力ボックスには複数のユーザーを設定できます(可変)。
![image-20241119213727637.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/5162f445-4aed-711e-d78a-7fb39b4eafc8.png)

### メールアドレスが格納された配列の作成

『フローを手動でトリガーする』トリガーの『電子メール』には、指定したユーザーメールアドレスがセミコロン区切りで格納されています。『作成』アクションで split 関数を使用して配列に変換します。※ここではアクションの名前を『作成：セミコロン区切りを配列に変換』に変更しています。
![image-20241119214352677.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/013cb712-5dd1-0cdb-8f07-61e6777ec32a.png)

```javascript
split(triggerBody()?['email'], ';')
```

### 配列の各アイテムを加工する

『選択』アクションを使って配列のアイテムを JSON 形式に加工します。
※作成した配列を Apply to each アクションの繰り返し処理で変換してもよいです。
![image-20241120111742719.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/1c7ee29c-eddb-4553-b14b-13faec18ad20.png)


```powershell:From
range(0, length(outputs('作成：セミコロン区切りを配列に変換')))
```

```powershell:Map
concat('{"assignedTo":"', outputs('作成：セミコロン区切りを配列に変換')[item()], '"}')
```

### 変換した配列をカンマ区切りで結合して JSON 形式の配列にする

変換した配列をカンマ区切りでつなげた文字列を作成ます。
![image-20241119220527380.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/99750dac-eaf1-8b77-073c-4b356cd339d5.png)

JSON の配列になるように前後を`[`と`]`で括ります。
![image-20241119220732942.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/105b1ae5-24f9-486f-e8de-3c169ee0421b.png)

```powershell
concat('[',body('結合：カンマ区切りでつなげる'),']')
```

### 作成した文字列を JSON データに変換する

『JSON の解析』で作成した文字列を JSON データに変換します
![image-20241119221253836.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/90397a39-fcc2-a808-21de-fe446ea83ad7.png)

```json
{
    "type": "array",
    "items": {
        "type": "object",
        "properties": {
            "assignedTo": {
                "type": "string"
            }
        },
        "required": [
            "assignedTo"
        ]
    }
}
```

これで完成です。この処理を子フロー化しておくと汎用的に使えます。

## 承認ステップに設定

[承認ステップ] に生成した JSON データを指定します。
![image-20241119221639214.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/35cd78aa-4454-126c-61ca-625693033cd3.png)

# 参考サイト

https://koruneko.hatenablog.com/entry/2024/06/18/085328

https://qiita.com/mizukyf/items/0adc892bce337d5f9222