2012-01-25 18 views
0

Visual Studio 2010(SharePoint 2010サイト用)でカスタムワークフローを実行しました。グループに割り当てられたタスクがあります。すべてのユーザーは、タスクの割り当て通知電子メールを問題なく受信します。デフォルトでは、承認したユーザーのいずれかが完了したタスクを表示します。グループ内のすべてのユーザーがワークフロータスクを承認する必要があります - カスタムVisual Studioワークフロー - SharePoint 2010

私のタスクは、グループのすべてのメンバーが承認した場合にのみ承認されたとみなされます。これをどうやって実現しますか?

ご協力いただければ幸いです。

おかげ

答えて

0

私はマルチ承認ワークフローを見てきましたたびに、それは常に複数のタスクが含まれています。私は、1つのタスクが何パーセントか承認されるとは思わない。保留中か承認済み(または拒否済みなど)のいずれかです。

私は二つの可能性を考えることができます:カスタムワークフローで

  1. 、タスクではなくグループに単一のタスクを割り当てるよりも、割り当てられている時間で、の各メンバーに1つのタスクを割り当てますグループ。
  2. イベントレシーバーをタスクリスト項目に追加します(別のリスト、データベースなど)ユーザーがタスクを承認したリストを維持します。グループ内のすべてのユーザーがタスクを承認したら、更新を許可します。さもなければ、ステータスを保留中のままにします。
0

割り当てられた個々のタスクの数と個々のタスクが完了したことを確認してください。完了したら、すべてのタスクが承認されたことを確認し、そこから必要なアクションを実行します。

0

技術的には、異なるフィールドを使用するカスタムタスクタイプを作成し、その中にすべてのユーザー名を格納し、カスタムタスクフォームで1つずつチェックすることができます。実際はもっと簡単です複数のタスクを並行して作成します。

これはどのようにするのですか?http://msdn.microsoft.com/en-us/library/hh128696.aspx(ビデオも見てください)しかし、彼の例の一部は悪い習慣です:InitialChildData IListをReplicatorアクティビティのInitialzedイベントの中で初期化します...それで、最初の子を初期化し、ChildInitializedイベントの残りの部分を初期化する必要があります...正しい方法は、リプリケータに到達してIListを設定する直前にコードアクティビティを実行することです。その後、実際の初期化コードをすべてchildInitializedハンドラに残すことができます。私の実際の生活の中では、レプリケータを初期化したハンドラはまったくありません。

私は、上記のリンク先のScot Hilierと一緒になって、正誤表型のような例に入るつもりです。このコードがソリューション全体ではないことに気がついたら、気にならないでください。

たとえば、複数の承認者リストが、割り当て済みのワークフローのカンマ区切りの文字列プロパティを使用している場合(多分私はワークフローの初期化データから多分以前のタスクフォームを取得します...それは、あなた自身のビジネスだ)氏ヒリアーでわずか小さな見落とし

private void prepareCodeActivity_Invoked(object sender, EventArgs e) { 
     Assignees = DesignatedApprovers.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).ToList(); 
    } 

譲受人が、この場合は一覧<文字列>ある、と私は

private void replicateTasks_ChildInitialized(object sender, ReplicatorChildEventArgs e) { 
     // do all of your task setup here (e.InstanceData is the single string for this child) 
     // note I'm setting properties of my custom activity, not the task itself 
     // each child instance of the replicator gets it's own instance of it. 

     generalApprovalTask.TaskAssignedTo = e.InstanceData.ToString(); 
     generalApprovalTask.TaskTitle = string.Format(MyStrings.GeneralApprovalTaskTitle, 
        workflowProperties.Item.File.Name) 

     // log something! 
    } 

それにレプリケータのInitialChildDataプロパティをバインドしていますそれは一般的に良い例なので、私たちは彼を許します。

結果を調べる場合は、リプリケータのChildCompletedハンドラで行います。 (ヒラリー氏もこの部分をカバーしていません)

public int FailedApprovals { get; set; } 

    /// <summary> 
    /// This is called upon the completion of the child tasks. Here is where we check the outcome. 
    /// </summary> 
    /// <param name="sender"></param> 
    /// <param name="e"></param> 
    private void replicateTasks_ChildCompleted(object sender, ReplicatorChildEventArgs e) { 
     if (e.Activity is MyGeneralApprovalTaskActivity) { 
      var act = e.Activity as MyGeneralApprovalTaskActivity; 
      if (act.TheTaskOutcome != MyStrings.ApprovedString) { 
       FailedApprovals++; 
      } 

      // log something! 
     } 
    } 
関連する問題