none
ワークフローのサイクル起動について RRS feed

  • 質問

  • WSS3.0 SP2 (on Windows Server 2008 SP2) にてワークフローを作成しています。

    ワークフローは listitem の作成時と更新時に動作する様にしています。

    開発環境では listitem の作成によりワークフローが開始した後に
    listitem の更新を行っても、新たなワークフローが開始される事も無く、
    上手く動作していました。

    listitem の更新は SharePoint 上のフォームで更新した場合でも、
    ワークフローの処理で更新しても両方とも問題ありませんでした。

    完成したワークフローを公開サーバーにインストールして動作させたところ
    開発環境と違い、ワークフローの処理で listitem を更新した際に
    新たなワークフローが開始され、永久ループ状態になってしまいました。

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

    にて SharePoint SP2 にて同様の問題を解決したと書いてあるのですが、
    現状では解決されていないかの様に思われます...

    なにかしら解決策をご存じの方はいらっしゃいますでしょうか?

    2009年8月7日 5:08

すべての返信

  • 直接解決にはつながらなそうなので恐縮ですが...

    >ワークフローは listitem の作成時と更新時に動作する様にしています。
    >開発環境では listitem の作成によりワークフローが開始した後に
    >listitem の更新を行っても、新たなワークフローが開始される事も無く、
    >上手く動作していました。
    >listitem の更新は SharePoint 上のフォームで更新した場合でも、
    >ワークフローの処理で更新しても両方とも問題ありませんでした。

    これが既におかしい気がします。
    ワークフローの起動オプションを「作成」と「更新」に設定したなら、

    ・ワークフローの処理で更新 → ワークフロー起動せず
    ・リストの[編集]から手で更新 → ワークフロー起動

    とならないと変です。
    まずそこを確認してみてください。

    >完成したワークフローを公開サーバーにインストールして動作させたところ
    >開発環境と違い、ワークフローの処理で listitem を更新した際に
    >新たなワークフローが開始され、永久ループ状態になってしまいました。

    この点については…

    1.そもそも公開サーバが SP2 未適応、なんてことはありませんか?
     一応、確認しておく必要はあると思います。

    2.WFを複数適応していませんか?
     SP2でも「異なるWFによる編集」なら、変更のトリガとして認識する仕様の筈です。

    まだ手元に SP2 環境がないので検証できないのですが…
    (私もソースは上記リンク先のブログだけです)
    少しでもお役に立てれば幸いです。


    saruhiko
    2009年8月7日 15:37
  • ご回答ありがとうございます!

    > これが既におかしい気がします。
    > ワークフローの起動オプションを「作成」と「更新」に設定したなら、
    > ・ワークフローの処理で更新 → ワークフロー起動せず
    > ・リストの[編集]から手で更新 → ワークフロー起動
    > とならないと変です。
    > まずそこを確認してみてください。

    すみません。
    質問内容を改めて読み返してみたら、言葉足らずでした。

    「listitem 作成時に開始されたワークフローがまだ実行中の場合は」 が
    抜けておりました。

    本番環境では listitem 作成時に開始されたワークフローが処理している
    にも関わらず、listitem を更新すると新たなワークフローが開始されて
    しまっている状態でした。

    その後いろいろと試して、少し解ったのですが、どうも環境によって
    以下の様に動作しているのでは無いかと思われる感じでした。

    開発環境
    ①listitem 登録によるワークフロー開始.
    ②ワークフローから listitem 更新.
    ③listitem 更新によるワークフロー開始がトリガされるものの①のワークフローが
      実行中である為,起動せず.
    ④①のワークフローが終了.

    本番環境
    ①listitem 登録によるワークフロー開始.
    ②ワークフローからの listitem 更新.
    ③①のワークフローが終了.
    ④listitem 更新によるトリガで新たなワークフローが開始される.

    つまり②の listitem 更新によるワークフロー開始トリガが処理されるタイミングが
    違っているらしいのです。

    それで推測なのですが、開発環境は 2 CPU、本番環境は 1 CPU 構成であるので
    開発環境は更新トリガは並列処理/本番環境は順次処理されているのでは無いかと
    思われます。

    試しにワークフローの終端に Thread.Sleep で数秒の Delay を入れたら
    本番環境でも開発環境と同様の処理結果となる様になりました。

    こういうものなのでしょうか...。

    2009年8月10日 8:12