ADVERTISEMENT

【Power Automate】社内申請の差し戻しを作りたい場合の承認設計

【Power Automate】社内申請の差し戻しを作りたい場合の承認設計
🛡️ 超解決

Power Automateを使用して社内申請のワークフローを構築する際、差し戻し機能の実装は多くの管理者が直面する課題です。差し戻しは承認者から申請者へ修正を促す重要な機能ですが、誤った設計はフローの複雑化や予期しない動作を引き起こします。本記事では、Power Automateで差し戻しを組み込むための承認設計の考え方と具体的な実装手順を解説します。

【要点】この記事で確認すること

  • 最初に見る場所: 承認アクションの「カスタム応答」設定と、差し戻しループを制御する変数(最大ループ回数、現在のループ回数)です。
  • 切り分けの軸: 差し戻しが無限ループになる問題は、ループカウンターのチェック不足が原因です。また、承認者が差し戻し操作をしても申請が終了してしまう場合は、承認アクションの応答設定を「カスタム応答」に変更していない可能性があります。
  • 注意点: 会社PCでフローを編集する際、共有環境で変数スコープや同時実行による競合が発生する場合があります。管理者に確認のうえ、変数の初期化やフローのバージョン管理を行ってください。

ADVERTISEMENT

1. 差し戻し機能の基本設計と必要なアクション

差し戻しとは、承認申請を却下するのではなく、申請者に修正を求めて再申請させる仕組みです。Power Automateでは、標準の承認アクションが提供する「承認」「却下」「拒否」に加えて、「カスタム応答」を設定することで差し戻しを実装できます。カスタム応答を有効にすると、承認者が「承認」または「差し戻し」などの選択肢から選べるようになります。このとき、承認アクションの出力として「応答」項目が取得でき、その値をもとにフローを分岐させます。

差し戻しのフローは、申請者への通知・修正待ち・再申請・再承認のループになります。ループが無限に続くのを防ぐために、ループ回数の上限を設定する変数と現在のループ回数をカウントする変数が必要です。また、承認リクエストを再送信する方法として、承認アクションをループ内に配置し、前回の承認インスタンスを終了してから新しい承認リクエストを作成する設計が一般的です。

差し戻し実装に必要なアクション一覧

実装に使用する主なアクションは以下の通りです。

  • 承認アクション(承認 – 承認の開始と待機): カスタム応答を有効にし、選択肢を定義します。例:「承認」「差し戻し」。
  • 条件アクション: 承認アクションの応答を確認し、「差し戻し」の場合にループ処理へ分岐します。
  • 変数の初期化・更新アクション: 最大ループ回数(例:5)と現在のループ回数を管理します。
  • ループ終了条件のチェック: ループ回数が上限に達した場合、自動的に却下扱いにするなど終了処理を行います。
  • 通知アクション: 申請者に差し戻し内容と修正依頼をメールまたはTeamsで通知します。

2. 承認アクションの設定と戻り値の活用

承認アクションの設定で最も重要なのは、カスタム応答を有効にすることです。既定では「承認」「却下」「拒否」のみですが、カスタム応答をオンにすると任意の応答オプションを追加できます。差し戻し用の選択肢(例:「差し戻し」「修正必要」)を追加し、承認者が選べるようにします。

承認アクションの出力は、動的コンテンツとして他のアクションで利用できます。特に「応答」項目の値を使って条件分岐を行います。たとえば、条件式「応答 が ‘差し戻し’ に等しい」と設定し、その場合にループ処理へ進むようにします。ループ内では、同じ承認アクションを再度使用するのではなく、新しい承認リクエストを作成する必要があります。承認アクションは1回の実行で1つのリクエストを管理するため、ループごとに別の承認インスタンスを生成する設計が求められます。

設定項目 値の例 説明
カスタム応答 オン 承認者に表示される選択肢をカスタマイズ可能にする
応答オプション [“承認”,”差し戻し”] JSON配列形式で指定。スペルや大文字小文字に注意
通知チャネル メールとTeams 承認リクエストの通知方法

戻り値を利用した条件分岐の例

承認アクションの後に条件アクションを配置し、動的コンテンツ「応答」と「差し戻し」文字列を比較します。一致した場合、ループ処理(変数更新+新しい承認アクション)を実行します。また、応答が「承認」の場合はそのまま処理を終了し、次のステップに進みます。

3. 差し戻しループを防ぐための条件分岐と変数設計

差し戻しのループが無限に行われるのを防ぐために、ループ回数の上限を設定する必要があります。具体的には、フローの開始時に整数型変数「MaxIterations」(例:5)と「IterationCount」(初期値0)を初期化します。承認アクションの応答が「差し戻し」の場合、まずIterationCountがMaxIterations未満かチェックします。未満であればIterationCountを1増やしてから新しい承認リクエストを作成します。上限に達した場合、申請を自動却下するか管理者に通知してフローを強制終了します。

また、ループ内で同じ承認アクションを再実行する際、前回の承認リクエストが未完了だと混乱を招くため、ループの前に「すべての承認をキャンセル」アクションを使って古い承認インスタンスをクローズすることを検討してください。ただし、キャンセルアクションは承認者に通知が届かない場合があるため、設計時には注意が必要です。

設計パターン 利点 欠点
ループ内で新規承認アクションを実行 フローが1つのインスタンスで完結する 承認アクションの重複管理が煩雑になる可能性
子フローとして差し戻し処理を分離 メインフローの見通しが良くなる 子フローの実行コストと設定の手間
並列分岐で複数の承認を管理 複数承認者の同時承認などに柔軟 差し戻しのループ制御が複雑化

4. 実際のフロー作成手順

ここでは、差し戻し機能を含むシンプルな承認フローを作成する手順を説明します。手順の番号は実装の順序を示します。

  1. トリガーを設定する。例として「新しい申請が作成されたとき」(SharePointリストやフォームなど)を選択します。
  2. 「変数を初期化」アクションで、整数型の変数「IterationCount」と「MaxIterations」を作成します。MaxIterationsは定数値(例:5)を代入します。
  3. 「承認 – 承認の開始と待機」アクションを追加し、カスタム応答をオンにして応答オプションに「承認」「差し戻し」を設定します。承認者や詳細を動的に指定します。
  4. 「条件」アクションを追加し、承認アクションの出力「応答」が「差し戻し」と等しいか判定します。条件が真の場合、さらにループ回数チェックの条件を入れ子にします。
  5. ループ回数チェックの条件で、「IterationCount が MaxIterations 未満」であるか確認します。真の場合、IterationCountを1増やし、申請者に差し戻し通知(メール送信など)を行います。その後、手順3の承認アクション(または別の承認アクション)にループバックするために「終了」アクションは使わず、フローの記述上は「Apply to each」などのループ構造を利用するか、承認アクションを再度配置してコネクトします。
  6. ループ回数が上限に達した場合、「申請を却下」アクションや管理者通知アクションを実行し、フローを終了します。

注意:Power Automateのグラフィカルデザイナーではループを視覚的に表現しにくいため、Apply to each を使用してコレクション(例:ダミーの配列)をループさせる技法が一般的です。ただし、承認アクションをApply to eachの内部に配置する際は、Apply to eachの同時実行制御に注意してください。

5. よくある失敗パターンと対処法

失敗パターン 原因 対処法
承認者が差し戻しを選択しても申請が却下扱いになる カスタム応答が有効になっていない 承認アクションの設定でカスタム応答をオンにし、応答オプションに「差し戻し」を追加し直す
差し戻しループが無限に続く ループ回数の上限チェックが実装されていない、または変数が正しく更新されていない IterationCount変数を適切にインクリメントし、条件分岐で上限に達した場合の終了処理を追加する
申請者が修正後に再申請できない 承認リクエストがクローズされず、同じリクエストを使い続けようとしている ループの開始前に「すべての承認をキャンセル」アクションを入れるか、新規の承認アクションを毎回生成する
複数の承認者が同時に差し戻しをするとフローが混乱する 並列実行中の変数競合や承認インスタンスの多重管理 コンフリクトを避けるため、承認アクションの応答を1つのみ受け付ける設定にするか、直列処理に変更する

6. 管理者が確認すべき設定項目と注意点

管理者は、フローを共有環境で運用する際に以下のポイントを確認しておく必要があります。まず、フローに使用するコネクタのライセンス(Premiumコネクタが含まれていないか)をチェックしてください。承認アクションは標準コネクタに含まれますが、カスタム応答を利用する場合も特に追加ライセンスは必要ありません。ただし、Teams通知やSharePoint連携など追加のコネクタを使う場合は注意が必要です。

また、フローのバージョン管理と公開設定も重要です。差し戻しロジックを頻繁に修正する場合、フローを編集可能な状態にしておき、テスト環境で十分に検証してから本番適用することを推奨します。さらに、Power Automateの実行履歴を確認し、ループ回数やエラーの有無を監視してください。

7. よくある質問

Q1. 差し戻しのループ回数はどのように設定すればよいですか?

フローの開始時に「変数を初期化」で最大ループ回数(例:3)を設定し、ループ内で現在の回数をカウントして比較します。組織のポリシーに応じて適切な値を決めてください。あまり大きい値を設定すると無限ループのリスクが高まります。

Q2. 承認者が差し戻しを選択した後、申請者にどのように通知されますか?

承認アクションの設定で、差し戻し時に自動通知は行われません。申請者への通知は、フロー内で「メールを送信」や「Teamsメッセージを送信」アクションを追加して手動で実装する必要があります。その際、差し戻し理由を承認者に入力させることで、申請者に具体的な修正内容を伝えられます。

Q3. 差し戻し後に申請者が再申請する方法を教えてください。

再申請の方法はフローの設計によります。新たなフローを起動するトリガーを用意するか、同じフロー内でループを利用して承認リクエストを再送します。申請者には再申請用のボタンやフォームを用意し、それによってフローが再トリガーされるようにするとスムーズです。

Q4. 承認アクションのカスタム応答を設定しても選択肢が表示されません。

カスタム応答オプションはJSON配列で正確に記述する必要があります。ダブルクォーテーションのエスケープや配列の書式が間違っていると、選択肢が正しく表示されません。また、設定後はフローを保存して再度開き、反映されているか確認してください。

Q5. 差し戻し機能を実装するとフローの実行時間が長くなります。対策はありますか?

ループ回数を最小限に抑える、並列処理を避けて直列処理にする、不要なアクションを削減するなどの対策が効果的です。また、承認アクションのタイムアウト設定を見直し、適切な値(例:7日)を設定してください。長期未承認がフローをブロックするのを防げます。

8. まとめ

Power Automateで社内申請の差し戻し機能を実装するには、承認アクションのカスタム応答設定とループ制御の変数設計が鍵となります。標準の承認アクションだけでは差し戻しに対応できないため、応答オプションを追加し、条件分岐でループを管理する必要があります。ループ回数の上限を設けることで無限ループを防止し、申請者への通知や再申請のトリガーを適切に設計することが重要です。また、管理者はライセンスや実行履歴の監視を行い、安定した運用を心がけましょう。本記事で紹介した設計パターンと手順を参考に、貴社の承認フローをより柔軟に改善してください。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。

ADVERTISEMENT