PowerAutomateを業務の効率化/自動化のために活用する中で、複数のワークフローの間にデータによる依存関係が発生することがあると思います。
フローAの処理で作成したデータを元にしてフローBで別の処理を行うとか、あるいは、フローAの前回処理で作成したデータを元にしてフローAの今回処理を行うとか、そういうケースです。
Problem
このような場合、こうしたフローを結びつける役割をするデータをどのように管理するかで、複数の選択肢があります。
簡単に思いつくのは(私が最初に思いついたのは)ExcelファイルやSharePointリストによるデータ管理です。
元々手作業で行われていた業務を効率化/自動化するという場合、従来手作業で参照更新されていたファイルやリストを元に考えるのは自然なことでしょう。
しかし、ExcelファイルやSharePointリストにデータの読み書きを行う場合、いくつかの課題が発生します:
- 読み書きが遅い。とくに書き込み(項目追加)がものすごく遅い。
- 書き込み中の「中途半端な状態」で参照されるリスクがある。
- 読み取ることのできる 行数に上限 がある。
- 日時データの表現(シリアル vs. ISO8601)の 相互運用に関する難しさ がある。
- マップ(辞書)構造のデータを管理できない。
- レコードを構成するデータをカラム(列)毎にアクションの入力欄に設定するのが手間。
Solution
これらの課題を解決する方法の1つは、Excelファイルやリストが存在するのと同じSharePoint上で、ドキュメントライブラリ内にJSONファイルを配置して、ここにデータを入れるというものです。
ExcelファイルやSharePointリストでデータを管理する方式と比べた時のメリット/デメリットは以下の通り:
項目 | Excel/SPリスト | JSON |
---|---|---|
読み書きの速度 | X | O |
「中途半端な状態」で参照されない | X | O |
読み取り行数に制限がない | X | O |
日時データ相互運用の考慮が不要 | X | O |
マップ構造の管理 | X | O |
アクションの設定が簡素 | X | O |
ファイルの可読性が高い | O | X |
Excelアプリで参照更新 | O | X |
フロー実装方法
①パスに取るファイルメタデータの取得
②ファイルのチェックアウト
③ファイルの更新
保存したいデータを「ファイルコンテンツ」欄にJSON形式で記述します。
この時点ではファイルはチェックアウトされた状態のため、ユーザーや他のワークフローがファイル内容を参照すると、変更前の状態のデータが得られます。
④ファイルのチェックイン
更新したファイルをチェックインします。
チェックインの種類には「Major version (publish)」を選びます。
JSONファイルコンテンツの取得と利用
ちなみにこうして更新したJSONファイルの内容は「ファイルコンテンツの取得」を使って読み取ることができます。
別の記事 でお話した通り、「コンテンツタイプの推測」は「いいえ」にしておくのがオススメです。
取得結果はJSON形式の文字列になるので、 json(...)
関数でデシリアライズして利用します。