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

Visual Studio 2012 ワークフロー デザイナーにおける SharePoint ワークフローの相互運用機能の使用について説明します。ワークフローの相互運用機能を使用すると、SharePoint 2010 のワークフローを SharePoint ワークフロー内から呼び出すことができます。既存のワークフローの機能を再利用できるだけでなく、SharePoint に統合されていないワークフロー アクティビティを呼び出せる重要な機能です。Provides a discussion of using SharePoint workflow Interop in the Visual Studio 2012 workflow designer. Workflow interop allows you to invoke a SharePoint 2010 workflow from within a SharePoint workflow. This is an important feature that allows you to reuse existing workflow features, and to call on workflow activities that are not integrated into SharePoint.

重要: SharePoint Designer 2013 における SharePoint のワークフローの相互運用機能の使用については、「SharePoint Designer 2013 での連携アクションを理解する」を参照してください。Important: To learn about using SharePoint workflow interop functionality in SharePoint Designer 2013, see Understanding Coordination actions in SharePoint Designer 2013.

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

次のような問題があります。SharePoint プラットフォームで再利用する従来の SharePoint 2010 のワークフローがあります。または、さらに悪いことに、新しい SharePoint のワークフローを作成中で、SharePoint 2010 プラットフォームでのみ使用可能なアクティビティを呼び出す必要があり、どうすれば良いか分かりません。実際、解決策は単純です。SharePoint ワークフローの相互運用機能を使用します。Here's the problem. You have legacy SharePoint 2010 workflows that you wish to reuse on your SharePoint platform. Or, worse, you are creating new SharePoint workflows and you need to invoke activities that are only available in the SharePoint 2010 platform. And you don't know what to do. Actually, the solution is simple: use SharePoint workflow Interop.

SharePoint ワークフローの相互運用機能を使用すると、SharePoint 2010 のワークフロー (Windows Workflow Foundation 3 で作成) が、Windows Workflow Foundation 4 を基にした SharePoint ワークフロー エンジンでスムーズに機能します。一方、新しい Windows Workflow Foundation 4 実行エンジンは ワークフロー マネージャー にホストされ、外部サービスとして実行します。SharePoint には、SharePoint 2010 のワークフローを処理するために使用される従来の SharePoint ワークフローのホストが含まれています。図 1 に示すように、SharePoint ワークフローの相互運用機能は、2 つの実行環境とネゴシエートします。SharePoint workflow interop enables SharePoint 2010 workflows (built on Windows Workflow Foundation 3) to work smoothly with the SharePoint workflow engine, which is based on Windows Workflow Foundation 4. While the new Windows Workflow Foundation 4 execution engine is hosted in Workflow Manager, which runs as an external service, SharePoint still contains the legacy SharePoint workflow host which it uses to process SharePoint 2010 workflows. SharePoint workflow interop negotiates the two execution environments, as depicted in Figure 1.

図 1. 操作中の SharePoint ワークフローの相互運用機能Figure 1. SharePoint workflow interop in action

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

図 1 に示す処理を順を追って説明します。図中の文字は強調する参照点を示しています。Let's walk through the process depicted in Figure 1. Use the letters to reference points of emphasis in the illustration:

( A ) SharePoint ワークフローのインスタンス。Windows Workflow Foundation 4 ベースのワークフロー マネージャーで実行を開始します。ワークフロー マネージャーは SharePoint の内部にあるのではなく、外部サービスとして実行することに注意してください。( A ) An instance of a SharePoint workflow starts to run in then Windows Workflow Foundation 4-based Workflow Manager. Note that the Workflow Manager is not in SharePoint, but instead runs as an external service.

( B ) SharePoint ワークフローの、ワークフロー マネージャーの手順番号 3 まで来ました。ここでは SharePoint 2010 ワークフローを呼び出します。これを行うには、Visual Studio 2012 のワークフロー デザイナーで、図 2 に示すように、 Start 2010 WF アクティビティを実行します。( B ) You reach a point in the SharePoint workflow - step number 3 in the Workflow Manager - where you wish to invoke a SharePoint 2010 workflow. In the Visual Studio 2012 workflow designer, you do this by implementing the Start 2010 WF activity, as shown in Figure 2.

図 2. SharePoint 2010 ワークフローを開始するためのステージ タイル。Figure 2. Stage tile for starting a SharePoint 2010 workflow.

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

From the perspective of the SharePoint object model, this is accomplished using the  [StartWorkflow](https://msdn.microsoft.com/library/Microsoft.SharePoint.WorkflowServices.WorkflowInteropService.StartWorkflow.aspx) method on the [WorkflowInteropService](https://msdn.microsoft.com/library/Microsoft.SharePoint.WorkflowServices.WorkflowInteropService.aspx) class.

( C ) この時点で、SharePoint 2010 のワークフローは、SharePoint 内の Windows Workflow Foundation 3.5 ワークフロー ホストで実行を開始します。ただし、ここで重要な考慮事項があります。シナリオによっては、2010 のワークフローの実行が完了する (さらに場合によってはデータを返す) まで、2013 のワークフローの実行を続行するのを待つ必要があります。他のシナリオでは、これが必要でないことがありますが、いずれのワークフローも並行して独立して実行することができます。( C ) At this point, the SharePoint 2010 workflow begins executing in the Windows Workflow Foundation 3.5 workflow host inside of SharePoint. But an important consideration comes up. In some scenarios you may want the 2013 workflow to wait for the 2010 workflow to complete running (and perhaps return some data) before continuing to execute the 2013 workflow. In other scenarios, this may not be necessary and both workflows may run independently, in parallel.

To control this behavior, the  [WorkflowInterop](https://msdn.microsoft.com/library/Microsoft.SharePoint.WorkflowServices.Activities.WorkflowInterop.aspx) class, which controls executing workflows in the Windows Workflow Foundation 3.5 workflow host, provides a [Wait](https://msdn.microsoft.com/library/Microsoft.SharePoint.WorkflowServices.Activities.WorkflowInterop.Wait.aspx) property. Setting this Boolean property to " **Yes**" (in the designer dialog box) or to **true** in the on the **Wait** property, causes the 2013 workflow to pause until the 2010 finished executing and returns a **completed** message.

図 3. [ワークフローの開始] プロパティ ダイアログ ボックス。Figure 3. Start a Workflow properties dialog box.

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

( D ) Wait プロパティで true または false を選択する (あるいは [プロパティ] ダイアログ ボックスで [ はい] または [ いいえ] を選択する) 実用的な効果について示しています。 Waittrue の場合、2010 ワークフローは WorkflowCompleted イベントを渡します (さらに、必要に応じて、データを DynamicValue プロパティとして返します)。動的な値の詳細については、「 Understanding Dynamic Value」を参照してください。( D ) The practical effect of selecting true or false on the Wait property (or Yes or No in the properties dialog box) is depicted here. If Wait is true, then the 2010 workflow passes a WorkflowCompleted event (and, optionally, returns data as a DynamicValue property). For more information about dynamic values, see Understanding Dynamic Value.

Of course, if **Wait** is set to **false**, then your 2010 workflow executes, then terminates normally.

( E ) この手順は、2010 ワークフローの呼び出しで Wait=true が指定されている場合にのみ該当します。この場合、2013 ワークフローは、 WorkflowCompleted イベントを受信すると、中断された時点で 2013 ワークフローの実行を再開します。( E ) This step is only relevant if your invocation of the 2010 workflow specified Wait=true. In that case, your 2013 workflow received the WorkflowCompleted event and restarts the workflow 2013 execution at the point it left off.

( F ) 2013 ワークフローは実行を完了し、通常どおりに終了します。 Wait=false の場合、2013 ワークフローの実行と終了は、2010 ワークフローとは独立して行われます。( F ) Your 2013 workflow then completes execution and terminates normally. If Wait=false, then your 2013 workflow executes and terminates independently of the 2010 workflow.

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

SharePoint ワークフロー相互運用機能は、WF 3 と WF 4 のワークフロー アクティビティ間で 1 対 1 のインスタンスのマッピングをサポートするメッセージング フレームワークです。WF 3 および WF 4 は、 WorkflowInteropService における一連の WF 4 アクティビティによってラップされたメッセージのやり取りを通して相互運用します。SharePoint workflow interop is a messaging framework that supports a one-to-one instance mapping between WF 3 and WF 4 workflow activities. WF 3 and WF 4 interoperate through message exchanges that are wrapped by a set of WF 4 activities on WorkflowInteropService .

ワークフローの相互運用機能をサポートするには、SharePoint Designer のワークフロー デザイン領域から [ 2010 WF の開始] という新しいワークフロー アクティビティにアクセスできるようになります。このアクティビティは、 StartWorkflow メソッドのラッパーです。このアクティビティを使用すると、リスト ワークフローまたはサイト ワークフローのいずれかを開始できます。To support workflow interop, the workflow design surface in SharePoint Designer provides access to a new workflow activity, Start 2010 WF, which is a wrapper on the StartWorkflow method. This activity allows you to start either a list workflow or a site workflow.

実際、このアクティビティは、ワークフロー マネージャーと SharePoint 内で実行する SharePoint 2010 ワークフロー ホストの間で発生する一連のメッセージです。図 4 に示すように、この 2 つはメッセージング層によって仲介されます。シーケンスは、SharePoint ワークフロー マネージャーで StartWorkflow メソッドを呼び出すことで開始します。"start" メッセージは、SharePoint 内のワークフロー サービスに移動し、ここから SharePoint 2010 ワークフロー ホスト内のワークフローが開始されます。2010 ワークフローが完了すると、"completed" メッセージがイベント パブリッシャーを経由して 2013 ワークフロー マネージャーに送信されるイベントが発生します。The activity is in fact a sequence of messages that take place between the Workflow Manager and the SharePoint 2010 Workflow Host that is running inside SharePoint. These two are mediated by a messaging layer, as shown in Figure 4. The sequence begins in the SharePoint workflow manager with an invocation of the StartWorkflow method. The "start" message goes to the workflow service inside of SharePoint, where in turn it launches the workflow inside the SharePoint 2010 workflow host. When execution of the 2010 workflow is complete, an event is fired that sends a "completed" message through the event publisher back to the 2013 workflow manager.

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

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

関連項目See also