記事公開日
最終更新日
【Power Apps モデル駆動型アプリ】ビジネスプロセスフローとステージ

こんにちは。DXソリューション営業本部の吾妻です。
Power Appsのモデル駆動型アプリには ビジネスプロセスフロー (BPF)と呼ばれる機能が用意されています。
BPFを利用すると、モデル駆動型アプリの利用者が誰であっても、データ入力手順の一貫性を保ち、漏れなくタスクを実行するように誘導することができます。
ビジネスプロセスフローのUI
BPFを作成し、アクティブ化すると、モデル駆動型アプリのフォーム(レコードの詳細画面)に、 プロセスバー というコンポーネントが自動的に追加されます。プロセスバーにはタスク入力の進捗状況を示す ステージ が並んでおり、各々のステージには、 ステップ が含まれるような階層構造になっています。
モデル駆動型アプリの利用者は、ボトムアップに各ステップの入力欄を埋めていき、ステージを先に進めていくことで、最終的にはレコードのすべての属性に対してデータ入力を完了することができます。
アクティブなステージの更新
BPFをモデル駆動型アプリに組み込む際に、ステージをモデル駆動型アプリ上で手動更新するのではなく、 自動的に更新させたい という要望が出ることがあります。Power Automateと組み合わせて承認ワークフローを実装する場合や、複数の役割をもつ登場人物が想定される場合、Dataverseレコードの値がシステム側で自動的に書き換えられる場合に要件として挙がりがちです。
このような機能を実装する際に注意しなければならないポイントがいくつかあるので、ご紹介します。
アクティブなステージを格納するテーブル
BPFを作成したあと、初めてアクティブ化した際に、BPFと同じ名前のDataverseテーブルが作成されます。
そして、この中にBPFのステージの進捗状況がレコードとして格納されていきます。
ここで注意が必要なのが、この自動生成されたテーブルは、BPF自体が含まれるソリューションには追加されないという点です。
そのため、このテーブルの構成や中身のレコードを確認する際には、メーカーポータルの「ソリューション」ページからではなく、「テーブル」ページからアクセスする必要があります。
このテーブルをBPFと同じソリューションに追加する際には、「すべてのオブジェクトを含める」設定を有効化しておきます。
ステージのマスタを格納するテーブル
ステージ名やGUIDといった BPFの各ステージ自体の情報 は、 アクティブなステージを格納するテーブル (BPFと同じ名前のテーブル)には格納されておらず、システムテーブルである ProcessStageテーブル に格納されています。
このため、 現在いるステージのステージ名 を取得したり、ステージを自動で進めるために 変更先のステージのGUID を取得したりしたい場合には、このProcessStageテーブルから情報を持ってくる必要があります。
ところが、これも注意が必要なポイントですが、ProcessStageテーブルは、モデル駆動型アプリの標準的なUIからはアクセスできず、無理やりURLを指定しても、メインフォームが用意されていないことを示すエラーが返されます。
このため、ProcessStageテーブルからステージのマスタ情報を取得するためには、メーカーポータルやモデル駆動型アプリのUIを使用するのではなく、Dataverse Web API経由でのアクセスを行う必要があります。
PowerShellコマンドや RESTED のようなツールを利用してDataverse Web APIを呼び出して応答を確認しても良いのですが、 XRMToolBox や Level up for Dynamics 365/Power Apps といったツールを利用すると、GUIで確認できるのでおすすめです。
Level up for Dynamics 365/Power Appsで テーブルのメタデータの一覧を取得した例 |
XRMToolBoxでProcessStageテーブルの レコードの一覧を取得した例 |
![]() |
![]() |
このようにしてProcessStageテーブルからステージのGUIDなどの情報を取得したら、それを用いて BPFと同じ名前のテーブル のレコードを更新することで、ユーザーにモデル駆動型アプリのプロセスバーを操作させることなく、アクティブなステージをアプリケーション側で変更することができます。
モデル駆動型アプリではProcessStageテーブルから情報を取得することができませんでしたが、Power Automateクラウドフローのアクションを実行すれば取得することができます。
そのため、承認アクションの結果をもとにステージを進める場合はもちろん、モデル駆動型アプリでステータス列の値を変更した結果に応じてステージを移動させる機能を実装する場合でも、アプリ画面としてはモデル駆動型アプリを前提としつつ、ロジックはPower Automateクラウドフローで実装する必要があります(要件によっては、クラウドフロー以外の、Dataverseアクションやプラグインなどを利用することも検討します)。
クラウドフローの実行
BPFのステージの進み具合に応じて、Teamsにメッセージを投稿したり、OneDrive for Businessにファイルをアップロードしたりといったロジックを実行したい場合には、BPFのステップとして フローステップ を追加して、クラウドフローを選択しておくことで、利用者がステージに到達した場合にそのクラウドフローを実行できるようになります。
ただし、ステージがアクティブになったからといって自動的にクラウドフローが起動するわけではなく、あくまでも利用者がボタンを押すことでクラウドフローを起動するような機能・UIとなっています。
また、ボタンを1クリックしただけではクラウドフローが起動せず、表示されたダイアログで再度ボタンをクリックしないといけないというのも、少し引っかかるポイントです。
そのため、利用者に対してボタンを何度も押させることが難しい要件の場合には、BPFに対してフローステップを追加する方法ではなく、 BPFと同じ名前のテーブル のレコードの変化をトリガーにして起動するようなクラウドフローを実装する方法をとる必要があります。
他にも、Dataverse Web APIでステージ変更イベントを拾う方法や、リアルタイムワークフローを利用する方法があるので、(要件次第にはなりますが)活用できるかもしれません。
まとめ
今回は、モデル駆動型アプリに組み込んだビジネスプロセスフロー(BPF)に特有の、分かりにくい仕様や注意を要するポイントについてご紹介しました。細かな仕様の話ではあるのですが、これらの制限を受け入れられるか、回避できるかによって、モデル駆動型アプリを導入するのかしないのか、キャンバスアプリやスクラッチ開発で追加の工数を掛けるのか左右される場合もあり、しっかり掴んでおく必要があることだと思います。QESの Power Platform サポート&アプリカタログサービス は、キャンバスアプリやモデル駆動型アプリといった各種Power Platform製品群の導入、環境構築、弊社で開発したカタログアプリのご提供などを行うサービスです。まずはお気軽にお問い合わせください。
このブログで参照されている、Microsoft、Windows、その他のマイクロソフト製品およびサービスは、米国およびその他の国におけるマイクロソフトの商標または登録商標です。