SharePoint ワークフローの基礎
プラットフォーム アーキテクチャの概要およびワークフロー相互運用機能ブリッジを含む SharePoint のワークフロー インフラストラクチャの概要について説明します。
注:
SharePoint 2013 ワークフローは 2023 年 4 月以降非推奨となり、2024 年 4 月 2 日の時点で新しいテナントでは無効になります。 既存のテナントから削除され、2026 年 4 月 2 日の時点で完全に廃止されます。 SharePoint 2013 ワークフローを使用している場合は、Power Automate またはその他のサポートされているソリューションに移行することをお勧めします。 詳細については、「 Microsoft 365 での SharePoint 2013 ワークフローの廃止」を参照してください。 SharePoint 2010 ワークフローは、2020 年 8 月 1 日以降、新しいテナント用に廃止され、2020 年 11 月 1 日に既存のテナントから削除されました。 SharePoint 2010 ワークフローを使用している場合は、Power Automate またはその他のサポートされているソリューションに移行することをお勧めします。 詳細については、「SharePoint 2010 ワークフローの廃止」を参照してください。
SharePoint でのワークフローの概要
SharePoint のワークフローは、以前のバージョンから大幅に再設計された Windows Workflow Foundation 4 により動作します。 Windows Workflow Foundation (WF) は、 Windows Communication Foundation (WCF) によって提供されるメッセージング機能に基づいて構築されます。
概念的には、ワークフロー モデルはビジネス プロセスの構造をしています。 したがって、Windows Workflow Foundation 4 ワークフローは、各々がビジネス プロセスの機能コンポーネントを示すワークフローの "アクティビティ" のコレクションの構造をしています。
SharePoint のワークフロー プラットフォームは、Windows Workflow Foundation 4 のアクティビティ モデルを使用して SharePoint ベースのビジネス プロセスを表現します。 さらに、SharePoint は、ワークフローを作成する高レベル ステージゲート モデルを導入します。
ワークフロー アクティビティと SharePoint アクションとの間の関係に注意することは重要なことです。 ワークフロー アクティビティは、そのメソッドがワークフローの動作を駆動する基となるマネージ オブジェクトのことです。 一方、ワークフロー アクションは基となるアクティビティをカプセル化し、SharePoint Designer でユーザー フレンドリーなフォームで示すラッパーです。 ワークフロー作成者がワークフロー アクションと対話する一方で、ワークフロー実行エンジンが対応するアクティビティ上で動作します。
アクティビティ クラスの実装であるアクティビティは、XAML を使用して宣言的に実装されます。
ワークフロー アクティビティは、メッセージング API を使用して SharePoint と通信する疎結合された Web サービスを使用して呼び出されます。 これらの API は、 Windows Communication Foundation (WCF) によって提供されるメッセージング機能に基づいて構築されています。
メッセージング フレームワークは非常に柔軟で、実質的に、必要となるあらゆるメッセージング パターンをサポートします。 なお、SharePoint ファーム上では、Windows Workflow Foundation および WCF はワークフロー マネージャー クライアント 1.0 にホストされます。
ワークフロー マネージャー クライアント 1.0、SharePoint、および SharePoint Designer 2013 はそれぞれ、新しいインフラストラクチャの重要な部分を提供します。
ワークフロー マネージャー クライアント 1.0 は、ワークフロー定義の管理機能を提供します。 また、ワークフロー インスタンスの実行プロセスをホストします。
SharePoint には、SharePoint のドキュメント、リスト、ユーザー、タスクを含む SharePoint ベースのビジネス プロセスをモデル化する SharePoint ワークフローのフレームワークが用意されています。 さらに、SharePoint ワークフロー、関連付け、アクティビティ、その他のワークフロー メタデータは SharePoint に格納され、管理されます。
SharePoint Designer 2013 は、以前のバージョンのように、ワークフロー定義を作成し、それらを発行する主要なビジネス ユーザー ツールです。 関連付けられた SharePoint コンポーネントを使用して、または使用せずにワークフロー定義をパッケージ化することもできます。
プラットフォーム アーキテクチャ
図 1 は SharePoint のワークフロー フレームワークの概要を示しています。 最初に、この新しいワークフロー インフラストラクチャで新しいワークフロー実行ホストとしてワークフロー マネージャー クライアント 1.0 を導入する方法に注目してください。 以前のバージョンでは、ワークフロー実行が SharePoint 自体にホストされましたが、SharePoint ではこの点が変更されています。 ワークフロー マネージャー クライアント 1.0 は SharePoint の外部にあり、Microsoft Azure サービス バス上の共通のプロトコルを使用して OAuth 経由で通信します。 それ以外の場合は、SharePoint にコンテンツ アイテム、イベント、アプリなどの必要な機能が含まれています。 ただし、下位互換性のために SharePoint 2010 ワークフロー ホスト (つまり、Windows Workflow Foundation 3 エンジン) も実装されます。 詳細については、「 SharePoint のワークフロー相互運用機能を使用する」を参照してください。
図 1. ワークフロー インフラストラクチャのアーキテクチャの概要
SharePoint では、ワークフロー マネージャー クライアント 1.0 は ワークフロー マネージャー クライアント 1.0 サービス アプリケーション プロキシの形態で表されます。 このコンポーネントを使用すると、SharePoint は ワークフロー マネージャー クライアント 1.0 サーバーと通信および対話できます。 サーバー間の認証は OAuth を使用して提供されます。
ワークフローがリッスンしている itemCreated、 itemUpdated などの SharePoint イベントは、Microsoft Azure サービス バスを使用してワークフロー マネージャー クライアント 1.0 にルーティングされます。 戻る際には、プラットフォームは SharePoint REST (Representational State Transfer) API を使用して SharePoint に呼び戻します。
また、ワークフロー サービス マネージャーをまとめて呼び出す SharePoint ワークフロー オブジェクト モデルも追加されています。これにより、ワークフローとその実行を管理および制御できます。 サービス マネージャーの対話の主なゾーンは、展開、メッセージング、インスタンス制御、および (下位互換性のために) SharePoint 2010 ワークフローとの相互運用性です。
最後にワークフロー作成コンポーネントがあります。 SharePoint Designer は、SharePoint 2010 と SharePoint のワークフローの両方を作成および展開できるようになりました。 Visual Studio 2012 は宣言型のワークフロー作成用のデザイナー画面を提供するだけでなく、ワークフロー マネージャー クライアント 1.0 の機能を完全に統合する SharePoint アドインおよびソリューションを作成できます。
ワークフローのサブスクリプションと関連付け
SharePoint ワークフローの最も重要な変更がワークフロー処理を Microsoft Azure のような外部のワークフロー ホストに移動することであるため、SharePoint メッセージおよびイベントは Microsoft Azure のワークフロー インフラストラクチャに接続することが不可欠でした。 さらに、Microsoft Azure でインフラストラクチャを顧客データに接続する必要もありました。 ワークフローの関連付け (サブスクリプションの WF コンセプトに構築) は、これらの要件に対応する SharePoint インフラストラクチャの一部です。
Microsoft Azure 発行/購読サービス
ワークフローの関連付けおよびサブスクリプションを議論する前に、pub/sub、または単に PubSub と呼ばれる Microsoft Azure発行/購読サービスについて説明します。 PubSub は非同期のメッセージング フレームワークです。 メッセージ送信者 (発行者) は、メッセージ受信者 (購読者) にメッセージを直接送信することはありません。 代わりに、発行者がメッセージ購読者については知らずにクラスとしてメッセージをレンダリングします。 続いて購読者は、発行者に関わらず自身で作成したサブスクリプションに基づいて関心のあるメッセージを識別し、発行されたメッセージを使用します。
このようにメッセージの作成からメッセージの使用を切り離すことによって、スケーラビリティと柔軟性が得られます。 また、発行者側でのマルチキャスト メッセージングが可能で、購読者側では不特定多数のメッセージを使用できます。
注:
PubSub 機能は、Microsoft Azure Service Bus の一部であり、WCF やその他のサービス エンドポイントの接続オプションを提供します。 これには REST エンドポイントが含まれます。このエンドポイントはネットワーク アドレス変換 (NAT) 境界の外側に配置するか、動的に割り当てられて頻繁に変化する IP アドレスにバインドするか、またはその両方にすることができます。 Azure Service Busの詳細については、「Service Bus」を参照してください。
ワークフローの関連付けと関連付けの範囲
ワークフローの関連付けでは、特定の既定値を使用して、ワークフロー定義を特定の SharePoint スコープにバインドします。 関連付け自体は、受信メッセージを処理する Azure パブリケーション/サブスクリプション サービスに格納されている一連のサブスクリプション ルールを表し、適切な (つまり、サブスクライブされた) ワークフロー インスタンスによって使用されるようにします。
既定では、メッセージング インフラストラクチャは次の範囲のワークフローに対応します。
前のバージョンとは異なり、SharePoint はコンテンツ タイプ ( SPContentType ) を範囲にしたワークフローはサポートされていません。 ただし、メッセージング インフラストラクチャは拡張可能なため、任意の範囲に対応できます。 開発者としては、特定の WorkflowSubscription インスタンスにある EventSourceId プロパティを任意の guid に設定できます。 その後、その EventSourceId 値を使用して PublishEvent(Guid、String、IDictionary<String、Object>)を呼び出し、指定した WorkflowSubscription の新しいワークフロー インスタンスをトリガーできます。
Microsoft Azure のワークフロー サービス
SharePoint ワークフローの関連付けは、Microsoft Azure 内のワークフロー サービスによって表されます。 アプリケーションがワークフローの関連付けおよびそのデータを取得する必要がある場合、指定した範囲で使用可能なワークフロー サービスすべてに対して最初に問い合わせをする必要があります。
同様に、ワークフロー インスタンスはポインターをそれぞれのワークフロー サービスに戻します。 これが正しい関連付けが決定される手段となります。
ワークフローの開始
ワークフローは、手動でまたは自動的に開始できます。
手動ワークフロー
手動ワークフローは、PubSub サービスが StartWorkflow メッセージを受信すると開始します。 このメッセージには次の宣言型の情報が含まれます。
関連付け識別子 ( WorkflowSubscription インスタンス)。
発行元のアイテム コンテキストの ID。 これは、PublishEvent メソッド呼び出しで ItemId パラメーターと EventSource プロパティを使用して渡されます。
手動開始用のイベント タイプ ( WorkflowStart)。
必要に応じた、サブスクリプションまたは Init フォームからの追加のワークフロー開始パラメーター。 これは、サブスクリプションでは CorrelationId となり、 Init フォームでは WFInstanceId となります。
自動開始ワークフロー
自動開始ワークフローは、PubSub サービスへの Add メッセージを使用して開始されます。 メッセージには次の宣言型の情報が含まれます。
発行元のアイテム コンテキストの ID。
イベント自体は通常の SharePoint Add イベントです。
ワークフローの開始パラメーター。
注:
繰り返し可能なイベント (たとえば、OnItemChanged イベント) でワークフローが自動的に開始する場合、関連付けのワークフローの既存の実行中のインスタンスの実行が終わるまで、指定した関連付け別のワークフローを開始できません。
ワークフローのサブスクリプション
関連付けを自然に補うものはサブスクリプションで、ワークフローはこれを使って関連付けと対話できます。 ワークフローは、サブスクリプションを Azure サービス バス上で create メソッドと delete メソッドを使用して作成する必要があります。
サブスクリプションを作成し、ワークフローをインスタンス化するメソッドの署名によって、オプションのパラメーターと必須のパラメーターの両方を指定します。 パラメーターのリストはワークフロー作成者によって決定されるため、ワークフロー定義ごとに異なる場合があります。 サブスクリプション パラメーターのリストは、ワークフロー定義のメタデータとして指定されます。 サブスクリプション パラメーターは、サブスクリプションが作成されるときに提供されます。 初期化パラメーターのリストは、ワークフロー定義の一部として XAML で指定されます。 初期化パラメーターは、ワークフローのインスタンス化時に提供されます。
サブスクリプションは、特定の SharePoint オブジェクトの SPList インスタンスまたは SPWeb インスタンスにバインドされます。 サブスクリプション オブジェクトの種類は、サブスクリプションが作成されるときに必須パラメーターの値として渡されます。 オブジェクトの種類は、サブスクリプションが、登録先のオブジェクト上で発生するイベントにのみ応答できるようにサブスクリプションの範囲を定義します。
SharePoint ワークフロー相互運用機能
SharePoint ワークフロー相互運用機能を使用すると、(Windows Workflow Foundation 3 上に構築されている) SharePoint 2010のワークフローをWindows Workflow Foundation 4 に基づいた SharePointのワークフローから呼び出すことができます。 これにより、2010 のワークフローを 2013 のワークフロー内から実行できます。
このことは、再利用のために SharePoint 2010を SharePointのワークフローと組み合わせて使用する場合に重要です。 また、SharePointではまだ実装されていない SharePoint 2010のアクティビティや機能の使用が必要になることもあります。
SharePoint ワークフローの相互運用の詳細については、「SharePoint の ワークフロー相互運用機能を使用する」を参照してください。