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 ワークフローの相互運用機能のメッセージング プロトコル

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

関連項目