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


Author

中村 和彦(シンプレッソ・コンサルティング株式会社 代表)が「ユーザ視点の SharePoint 情報」を発信します。元大手製造業 SharePoint 運用担当。現SharePoint コンサルタント。お仕事のお問い合わせはこちらまでお願いします。当ブログにおける発信内容は個人に帰属し所属組織の公式発信/見解ではありません。
FB : 中村 和彦
blog: Be・Better!
MS MVP SharePoint 2009/10-2011/9
MS MVP Office 365 2012/10-2014/9