SP2 の重大更新 ワークフローのサイクル起動を抑制
インストールすると勝手に試用版にされちゃったりと、今ひとつ良い印象のない SharePoint SP2 ですが、SharePoint Designer Blog で大変な(?)事実が報告されていました。
Microsoft SharePoint Designer Team Blog
Service Pack 2 prevents an on-change workflow from starting itself
SharePoint Designer で作成したワークフローは、自分自身で行った更新も「変更」と看做して [変更時に起動] してしまう─つまり簡単に無限ループしてしまうという難儀な仕様(という名のバグ)だった訳ですが。SharePoint に SP2 を適応(Designer の SP2 ではない点に注意)することで、この問題が改善されるそうです。
SP2 の適応により、ワークフローは自分自身で行った変更を「変更」とは看做さず、そのまま終了するようになります。
これは非常に大きな改善点だと思うのですが、一方で問題もあります。それは、このループ仕様を前提に組まれたワークフローが既に存在する、ということです。例えば、ユーザにタスクをアサインして、そのタスクが「完了」ステータスになるまで定期的にアラートメールを送信するワークフローです。
Designer には If Then はあっても Return がありません。サイクリックな挙動が指定できないのです。そこで「自分自身の更新も更新と拾う」という仕様を逆手にとります。メールを送信する都度、隠し列(なんでもよい)を更新させるのです。すると、再度ワークフローが走り、待機→ステータス判定→メール送信→更新 という動作を繰り返してくれます。
このような設計をしているワークフローは、SP2 の適応で、逆に「正常」に動かなくなる訳です。
しかし、Microsoft もこの問題は承知しているようで、一応の解決策を用意してくれています。それは「ワークフロー自身による更新は更新として認識しない」しかし「違うワークフローによる更新なら、更新として認識する」という新仕様です。
殆ど同じ挙動をするワークフロー A と B を設定します。
まず A が動き(A は「新規作成時」および「更新時」に動作)指定された動作を行ったあと、最後に自分自身を更新させます(隠し列を用意して 1 を入力させる等)すると、B (「更新時」のみ動作)はこれを更新と認識して起動。所定の動作の後、アイテムを更新します。すると、今度は A が更新を検知して─(以下略)
なるほど、これなら確かになんとかならなくはないですね。
難点は、1つ1つ手作業で修正しないといけないことでしょうか。
こればかりはどうしようもありませんね。
どちらが本当?─SharePoint Designer SP2
Microsoft SharePoint Designer Team Blog
login