SharePoint でワークフローの相互運用を使用する

Visual Studio 2012 ワークフロー デザイナーにおける SharePoint ワークフローの相互運用機能の使用について説明します。 ワークフローの相互運用機能を使用すると、SharePoint 2010 のワークフローを SharePoint ワークフロー内から呼び出すことができます。 既存のワークフローの機能を再利用できるだけでなく、SharePoint に統合されていないワークフロー アクティビティを呼び出せる重要な機能です。

注:

SharePoint 2010 ワークフローは、2020 年 8 月 1 日以降、新しいテナント用に廃止され、2020 年 11 月 1 日に既存のテナントから削除されました。 SharePoint 2010 ワークフローを使用している場合は、Power Automate またはその他のサポートされているソリューションに移行することをお勧めします。 詳細については、「SharePoint 2010 ワークフローの廃止」を参照してください。

重要

SharePoint Designer 2013 での SharePoint ワークフロー相互運用機能の使用については、「 SharePoint Designer 2013 の調整アクションについて」を参照してください。

SharePoint ワークフロー相互運用機能

次のような問題があります。 SharePoint プラットフォームで再利用する従来の SharePoint 2010 のワークフローがあります。 または、さらに悪いことに、新しい SharePoint のワークフローを作成中で、SharePoint 2010 プラットフォームでのみ使用可能なアクティビティを呼び出す必要があり、どうすれば良いか分かりません。 実際、解決策は単純です。 SharePoint ワークフローの相互運用機能を使用します。

SharePoint ワークフロー相互運用機能を使用すると、SharePoint 2010 ワークフロー (Windows Workflow Foundation 3 上に構築) が、Windows Workflow Foundation 4 に基づく SharePoint ワークフロー エンジンとスムーズに連携できます。 新しい Windows Workflow Foundation 4 実行エンジンは、外部サービスとして実行されるワークフロー マネージャーでホストされますが、SharePoint には、SharePoint 2010 ワークフローの処理に使用する従来の SharePoint ワークフロー ホストがまだ含まれています。 SharePoint ワークフロー相互運用機能は、図 1 に示すように、2 つの実行環境をネゴシエートします。

図 1. 操作中の SharePoint ワークフローの相互運用機能

ワークフロー相互運用ブリッジ

図 1 に示す処理を順を追って説明します。 図中の文字は強調する参照点を示しています。

( A ) SharePoint ワークフローのインスタンスは、Windows Workflow Foundation 4 ベースのワークフロー マネージャーで実行を開始します。 ワークフロー マネージャーは SharePoint ではなく、外部サービスとして実行されることに注意してください。

( B ) SharePoint ワークフロー内のポイントに到達します 。ワークフロー マネージャーの手順 3 では、SharePoint 2010 ワークフローを呼び出します。 Visual Studio 2012 ワークフロー デザイナーでは、図 2 に示すように 、Start 2010 WF アクティビティを実装することでこれを行います。

図 2. SharePoint 2010 ワークフローを開始するためのステージ タイル。

2010 のワークフローを開始する

SharePoint オブジェクト モデルの観点から、これは WorkflowInteropService クラスの StartWorkflow メソッドを使用して実現されます。

( C ) この時点で、SharePoint 2010 のワークフローは、SharePoint 内の Windows Workflow Foundation 3.5 ワークフロー ホストで実行を開始します。 ただし、ここで重要な考慮事項があります。 シナリオによっては、2010 のワークフローの実行が完了する (さらに場合によってはデータを返す) まで、2013 のワークフローの実行を続行するのを待つ必要があります。 他のシナリオでは、これが必要でないことがありますが、いずれのワークフローも並行して独立して実行することができます。

この動作を制御するために、Windows Workflow Foundation 3.5 ワークフロー ホストでワークフローを実行する WorkflowInterop クラスに Wait プロパティが用意されています。 Boolean プロパティを (デザイナーのダイアログ ボックスで) " Yes" に設定するか、 Wait プロパティで " true" に設定すると、2010 の実行が完了して " completed" メッセージが返されるまで 2013 のワークフローが一時停止します。

図 3. [ワークフローのプロパティ] ダイアログ ボックスの開始。

[ワークフローの開始] アクティビティのプロパティを設定

( D ) Wait プロパティで true または false を選択する (あるいは [プロパティ] ダイアログ ボックスで [ はい] または [ いいえ] を選択する) 実用的な効果について示しています。 Waittrue の場合、2010 ワークフローは WorkflowCompleted イベントを渡します (必要に応じて、データは DynamicValue プロパティとして返されます)。 動的な値の詳細については、「 Understanding Dynamic Value」を参照してください。

もちろん、 Waitfalse に設定されている場合、2010 ワークフローは実行し、通常どおりに終了します。

( E ) この手順は、2010 ワークフローの呼び出しで Wait=true が指定されている場合にのみ該当します。 この場合、2013 ワークフローは、 WorkflowCompleted イベントを受信すると、中断された時点で 2013 ワークフローの実行を再開します。

( F ) 2013 ワークフローは実行を完了し、通常どおりに終了します。 Wait=false の場合、2013 ワークフローの実行と終了は、2010 ワークフローとは独立して行われます。

ワークフロー相互運用機能の設計

SharePoint ワークフロー相互運用機能は、WF 3 と WF 4 のワークフロー アクティビティ間で 1 対 1 のインスタンスのマッピングをサポートするメッセージング フレームワークです。 WF 3 と WF 4 は、 WorkflowInteropService 上の WF 4 アクティビティのセットによってラップされるメッセージ交換を介して相互運用されます。

ワークフローの相互運用をサポートするために、SharePoint Designer のワークフロー デザイン サーフェイスは、StartWorkflow メソッドのラッパーである新しいワークフロー アクティビティである Start 2010 WF へのアクセスを提供します。 このアクティビティを使用すると、リスト ワークフローまたはサイト ワークフローを開始できます。

実際、このアクティビティは、ワークフロー マネージャーと SharePoint 内で実行する SharePoint 2010 ワークフロー ホストの間で発生する一連のメッセージです。 図 4 に示すように、この 2 つはメッセージング層によって仲介されます。 シーケンスは、SharePoint ワークフロー マネージャーで StartWorkflow メソッドを呼び出すことで開始します。 "start" メッセージは、SharePoint 内のワークフロー サービスに移動し、ここから SharePoint 2010 ワークフロー ホスト内のワークフローが開始されます。 2010 ワークフローが完了すると、"completed" メッセージがイベント パブリッシャーを経由して 2013 ワークフロー マネージャーに送信されるイベントが発生します。

図 4. SharePoint ワークフローの相互運用機能のメッセージング プロトコル

ワークフロー相互運用メッセージング

関連項目