3

レプリケーター アクティビティを使用して SharePoint ワークフローを開発し、承認者ごとにカスタム アクティビティをレプリケートします。カスタム アクティビティは、特定のユーザーの承認ブランチを実装します。これには、CreateTask、While、OnTaskChanged、および CompleteTask アクティビティを含む従来の形式があります。

1 人の承認者が承認を拒否することを選択し、ワークフローが終了した後に実行をキャンセルするように、レプリケーターで UntilCondition をセットアップします。この問題は、現在の状態で「ハング」する他の未完了のタスクで発生します。タスクを開いたときに、この状態は表示されません。

タスクのステータスを Cancelled に設定するために、Replacator の後に UpdateAllTask​​s を配置しました。ただし、CompleteTask (却下されたタスクの場合) と UpdateAllTask​​s の間にイベント アクティビティがないため、UpdateAllTask​​ アクティビティは却下されたタスクに対しても Canceled を設定します。

質問、UpdateAllTask​​s の前に CompleteTask によって行われた保留中の変更をフラッシュするにはどうすればよいですか?

あるいは、そのようなワークフローを実装する別の方法があるかもしれません。UpdateTask でカスタム アクティビティの Cancel ハンドラを実装する方法を考えていました。しかし、それを実装する方法がわからず、拒否の場合に実行するキャンセルハンドラーに伝えます。

4

4 に答える 4

3

同じ問題に直面し、多くの時間をかけて調査し、さまざまなオプションを試した結果、本当に良い解決策を見つけたと思います. 後世のためにここに投稿します。

  1. ReviewActivity という SequenceActivity を拡張するカスタム アクティビティを作成します。
  2. ReviewActivity には、典型的な CreateTask -> While -> OnTaskChanged -> CompleteTask シナリオが含まれます。
  3. 私のワークフローには、ReviewActivity の多くのインスタンス (したがって、多くのタスク) を作成するレプリケーターがあります。
  4. レプリケーターは、タスクが拒否されたかどうかを確認する UntilCondition を実装します (これは ChildCompleted で設定されます)。
  5. レプリケーターの後、残りのタスクを閉じる UpdateAllTask​​s があります。

このシナリオの経験がある場合は、「CompleteTask」がまだデータベースに永続化されていないため、UpdateAllTask​​s が最初に拒否されたタスクも更新することを教えてください。魔法は、PersistOnClose と呼ばれるカスタム アクティビティ (ReviewActivity) に対して定義できる属性にあります。

[Designer(typeof(ActivityDesigner), typeof(IDesigner))]
[PersistOnClose]
public partial class ReviewActivity : SequenceActivity

この属性により、ReviewActivity が完了すると、すべての変更がデータベースに永続化されます。ReviewActivity の最後のアクティビティは「CompleteTask」であるため、タスクは DB に保存されます。したがって、UpdateAllTask​​s はそれに触れません。

これが誰かに役立つことを願っています。

于 2011-02-23T18:32:39.093 に答える
0

完全なタスクとupdatealltasksアクティビティの間にコードアクティビティを配置しようとしましたか?

于 2009-10-18T22:15:14.993 に答える
0

今日も同様の問題に直面しました。私はそれを解決しました:

  1. タスクがキャンセルされた場合、ontaskchanged メソッド内で変数 taskCancelled を true に設定します (フィールド完了およびパーセンテージ完了に基づく)
  2. taskCancelled 変数が true の場合にのみ、updateAllTask​​s メソッドを実行して、ontaskchanged イベントごとに (レプリケーター内のシーケンスで) すべてのタスクをキャンセルします。
  3. taskCancelled 変数が true の場合、レプリケーターの until 条件を true に設定する
于 2010-11-25T13:26:03.303 に答える
0

アクティビティを次のように構成します: タスクの作成 - > OnTaskChanged -> If/Else アクティビティ (承認者の決定が「却下」の場合に条件を true に設定) -> (If ブランチ内) UpdateAllTask​​s アクティビティ (ステータスをキャンセルに設定アクティビティ プロパティ) -> (If ブランチの外側) CompleteTask アクティビティ。

承認者がタスクの却下を決定すると、WF はすべてのタスクをキャンセルします。却下した人のタスクもキャンセルされますが、その直後に「CompleteTask」アクティビティが起動し、対応するタスクが完了として設定されます。

于 2009-11-24T18:10:36.043 に答える