ワークフローの開始処理の動作変更について

みなさん、こんにちは。

今回は 2011 年 12 月にリリースされた更新プログラムで、ワークフローの開始処理が変更された点についてご案内します。(2011 年 12 月にリリースされた更新プログラム についてはこちらをご参照ください。)

- これまでのワークフローの動作変更について

これまでに SharePoint Server 2007 で行われたワークフローに関する大きな動作変更として下のようなものがありました。

サービスパック 1

サービスパック 1 を適用した後の環境では、"アイテムの作成" および "アイテムの更新" をトリガとして自動起動するように設定されたワークフローが設定されたリストやライブラリに対して、"システム アカウント" でアイテムの操作を行った際にワークフローが自動起動しないように変更されました。

こちらの動作については、以下の資料もご参照ください。

タイトル : Windows SharePoint Services 3.0 Service Pack 1 をインストールした後は、宣言型ワークフローを自動的に起動しません。

アドレス : https://support.microsoft.com/kb/947284/ja

サービスパック 2

サービスパック 2 より前の環境では、アイテムの更新をトリガとして自動起動するワークフローの中で、対象のアイテムの列の値などを変更した場合に、再び "更新" イベントが発生してワークフロー処理が無限ループする現象が発生していましたが、サービスパック 2 で修正されました。

こちらの動作については、弊社エンジニアのブログになりますが以下の資料もご参照ください。

タイトル : Service Pack 2 prevents an on-change workflow from starting itself

アドレス : https://blogs.msdn.com/sharepointdesigner/archive/2009/07/13/service-pack-2-prevents-an-on-change-workflow-from-starting-itself.aspx

- 今回ワークフローの動作が変更された経緯

上記のサービスパック 2 での処理変更はインパクトの大きいものでしたが、この動作変更によって以下の副作用的な現象が発生するようになりました。

現象 1

SharePoint Designer で "アイテムのコピー" アクションを使用した際に、コピーされたアイテムに対して、自動起動するはずのワークフローが起動しない。

現象 2

ドキュメント ライブラリ上で、すでにワークフローが実行された Office ファイルをローカルにコピーし、編集した後に別のアイテムとして同じドキュメント ライブラリにアップロードしても、自動起動するはずのワークフローが起動しない。

上記の現象はいずれも同じ要因で発生します。

ワークフローが自動起動する際の無限ループを防ぐために、各アイテムはどのワークフローによって作成および更新されたかという情報を、 "WorkflowCreationPath" というプロパティを使用して保持しています。ワークフローが開始される際に、この "WorkflowCreationPath" プロパティの値を確認し、"今実行しようとしている" ワークフローの情報が含まれる場合は、ワークフローの起動を行わないように処理されていました。

上記の現象 1 は "アイテムのコピー" アクションで、この "WorkflowCreationPath" プロパティの情報もコピーされるために発生します。

上記の現象 2 は SharePoint のドキュメント ライブラリと、Office ドキュメントのプロパティが同期する機能を持っているために発生します。ドキュメント ライブラリから Office ドキュメントをダウンロードすると、SharePoint のアイテムとして保持していたプロパティ情報が埋め込まれた状態でダウンロードされます。このドキュメントをアップロードすると、プロパティ情報を保持したままアップロードされるため、ワークフローの重複起動のチェックによって自動起動しなくなります。

弊社サポート部門にも、このロジックでは使いづらいとのフィードバックを多数いただき、開発部門と協議を重ねた結果、今回 (2011 年 12 月) リリースされた更新プログラムによってこの動作が変更されました。

- 今回ワークフローの動作変更の詳細について

上記の現象を回避するために、今回の更新プログラムで変更された動作は大きく以下の 2 点になります。

1. ワークフロー情報を管理するプロパティの追加

これまでは、アイテムを変更したワークフローの情報を管理する際に、"WorkflowCreationPath" プロパティが使用してされていましたが、新たに "WorkflowChangePath" プロパティが追加され、以下のようにアイテムとワークフローの情報は 2 つのプロパティで紐づけて管理されるようになりました。

 "WorkflowCreationPath" プロパティ : アイテムを作成したワークフローの情報を保存

 "WorkflowChangePath" プロパティ : アイテムを更新したワークフローの情報を保存

これに伴って、ワークフローを起動する際のチェック処理も変更されました。

2. "アイテムのコピー" アクションでワークフロー情報を管理するプロパティをコピーしない

SharePoint Designer の "アイテムのコピー" アクションで、アイテムをコピーする際に、上記の "WorkflowCreationPath" プロパティと "WorkflowChangePath" プロパティの値はコピーしないように変更されました。

上記のような処理を追加することで、自動起動ワークフローの無限ループを防ぎつつ、コピーしたアイテムに対してもワークフローが自動起動する動作になりました。

- 現在ご使用いただいている環境について

今回のワークフローの動作変更を含む更新プログラムを適用することによって、現在使用されている SharePoint 環境に対してワークフローに関連する特別な対処や設定変更は必要ありません。

今回の更新プログラムが作成される前に作成されたアイテムには、"WorkflowChangePath" は存在しないため、このアイテムをコピーした際に、ワークフローの重複起動のチェックによってはじかれることなくワークフローは問題なく起動します。

ワークフローの処理が完了した後に "WorkflowChangePath" プロパティが付与されるので、そのワークフローによってアイテムが更新されても、無限ループが発生することもありません。