Power Automate で稟議書を実装してみた3 (Power Automate 編1)

## 経緯

[前回](https://qiita.com/miyamiya/items/9d28749ed9bdec8a6cee) は、CUI(PowerShell) を使って SharePoint 作ったサイトとリストの作成を行いました

今回から、試しに組んでみた Power Automate の説明に入っていきます

## マスタリストの登録データ

[![](https://1bed.allright.life/wp-content/uploads/2020/05/2-1-300x119.png)](https://1bed.allright.life/wp-content/uploads/2020/05/2-1.png)

マスタリストはこのようにデータを登録しています

グループマスタに、各グループに属するユーザーを登録しています

承認経路マスタには、承認経路に属するグループを設定し、必要な承認数を設定しています

## 作成したフロー概要

作成したフローは下記のようになりました (肝心な部分は閉じてますが)

[![](https://1bed.allright.life/wp-content/uploads/2020/05/2020-05-05_00h11_39-120x300.png)](https://1bed.allright.life/wp-content/uploads/2020/05/2020-05-05_00h11_39.png)

実際に運用に乗せるフローだと、例外処理とか色々入れないといけないと思いますが、今回はワークフローを実感したいだけでしたのでこんな感じです

1. 承認ワークフローリストにアイテムが登録されたら発火
2. 変数の初期化を行い
3. 作成されたアイテムに設定された承認ルートを取得
4. 承認ルート分、承認処理を繰り返す
5. 終了処理

今回はその中の 「2. 変数の初期化を行い」 について説明していきますが、その前に Power Automate を作る時に知っておきたい制限から書きます

## Power Automate で知っておきたい制限

とりあえず公式は目を通して置いたほうが良いかもしれません

[Power Automate における制限と構成](https://docs.microsoft.com/ja-jp/power-automate/limits-and-config)

恐らくですが、少し複雑なことをやろうとすると、ここに引っかかると思います

* ワークフローごとのアクションは 500 まで
* 入れ子の深さ 8 まで

そのため、まとめられる処理はまとめたり、変数を複数持つのではなく、オブジェクトとして持つなどの工夫も必要だと感じました

続いて、作成したフローの変数の初期化の説明に入ります

## 変数の初期化について

変数の扱いは癖があり、見事に深みにハマってしまい何度も作りやり直しました
雑に言うと `文字列A = 文字列A + 文字列B` とやろうとしたら「循環したらだめですよー」ってエラーがでました...
＃実際はもうちょっと複雑ですが

それでは早速、下図部分の変数の初期化について説明に入っていきますが、すべて **変数コネクタの「変数を初期化する」** を使います

[![](https://1bed.allright.life/wp-content/uploads/2020/05/2020-05-05_21h08_22-222x300.png)](https://1bed.allright.life/wp-content/uploads/2020/05/2020-05-05_21h08_22.png)

### 作成されたアイテムのアイテム ID を変数にセット
[![](https://1bed.allright.life/wp-content/uploads/2020/05/2020-05-04_22h05_43-300x137.png)](https://1bed.allright.life/wp-content/uploads/2020/05/2020-05-04_22h05_43.png)
SharePoint では、データベースで言うところのレコードのことをアイテムと呼びます
その一意の値として使うアイテム ID はあとの処理でよく使うので、変数に格納しておきます

### 承認ルートのループカウンター変数を初期化

[![](https://1bed.allright.life/wp-content/uploads/2020/05/2020-05-04_23h41_51-300x89.png)](https://1bed.allright.life/wp-content/uploads/2020/05/2020-05-04_23h41_51.png)
承認ルートをループで回すときのループカウンター変数を整数で、初期値 1 として定義します

### ループ終了フラグを false で初期化

[![](https://1bed.allright.life/wp-content/uploads/2020/05/2020-05-04_22h12_34-300x84.png)](https://1bed.allright.life/wp-content/uploads/2020/05/2020-05-04_22h12_34.png)
ループを強制的に抜けるための終了フラグをブール値で、初期値を `false` として定義します
`false` は式として設定しています。以後、`true`, `false`, `null` は全て式として設定しています

### その他、内部処理で使う変数を定義します

[![](https://1bed.allright.life/wp-content/uploads/2020/05/2020-05-05_00h13_24-223x300.png)](https://1bed.allright.life/wp-content/uploads/2020/05/2020-05-05_00h13_24.png)
Power Automate では、変数の定義は入れ子の中ではできないので、使用する変数は先に定義しておいた方が無難です

### 登録用データの初期化

[![](https://1bed.allright.life/wp-content/uploads/2020/05/2020-05-05_00h26_21-300x173.png)](https://1bed.allright.life/wp-content/uploads/2020/05/2020-05-05_00h26_21.png)
登録用データは、条件文で値を変えて登録する処理を共通化させるために定義しています

### 動的列名用オブジェクトの初期化

[![](https://1bed.allright.life/wp-content/uploads/2020/05/2020-05-05_00h27_22-300x172.png)](https://1bed.allright.life/wp-content/uploads/2020/05/2020-05-05_00h27_22.png)
動的列名用オブジェクトは、承認ルートの階層毎に変わる列名を保持させるためのものです

承認ルートを順序よく回している時、今確認すべき列名を格納します

### ステータス用オブジェクトを定義

[![](https://1bed.allright.life/wp-content/uploads/2020/05/2020-05-05_00h29_53-300x254.png)](https://1bed.allright.life/wp-content/uploads/2020/05/2020-05-05_00h29_53.png)
ステータスを直で文字列で入れると、変更に弱くなることと、typo でのバグが判りにくくなるので、オブジェクトに定義しています

## 考察

作り終わった今でも、変数部分はもっと別のやり方あったのではないかな... と思っています
プログラムだと「リファクタ！」という気になるんですが、Power Automate だと修正が大変であまりそういう気が起きません

次回からはメインの処理に入っていきますが、とても長いので分割して説明していきます

## 関連記事

自分のためのメモに近い記事なのですが、長いのでインデックスつけます

* [Power Automate で稟議書を実装してみた1 (GUI で環境準備編)](https://qiita.com/miyamiya/items/2f8290fa4541cc3eb953)
* [Power Automate で稟議書を実装してみた2 (CUI で環境準備編)](https://qiita.com/miyamiya/items/9d28749ed9bdec8a6cee)
* Power Automate で稟議書を実装してみた3 (Power Automate 編1)
* [Power Automate で稟議書を実装してみた4 (Power Automate 編2)](https://qiita.com/miyamiya/items/1ef9cab407499a64477e)
* [Power Automate で稟議書を実装してみた5 (Power Automate 編3)](https://qiita.com/miyamiya/items/3b60c57653e20a7a6ff0)
* [Power Automate で稟議書を実装してみた6 (Power Automate 編4)](https://qiita.com/miyamiya/items/5f5a81b16901ed9e61cc)