0

sharepoint 2010 の visualstudio 2010 で承認ワークフローを作成しています。ワークフローは最初にタスクを作成し、タスクの承認を待ちます。しかし、タスクが承認されているかどうかを確認する方法は?

おそらく、私のセバリオをもう少し詳しく説明します。

  • 追加後にレビューが必要な項目のリストがあります。
  • 彼らが承認されるか拒否されるかは絶対的な決定であり、決して変更されるべきではありません
  • アイテムが承認されると、いくつかの機能が起動されます
  • 拒否された場合は、メールを送信する必要があります。

私のアイデア:

アイデア - ワークフロー:

私の最初のアイデアは、ListItemd が追加された後に起動されるワークフローを作成することでした。WF は、レビュー可能なタスクを作成する必要があります。正の場合、いくつかの機能を起動し、それ自体を削除する必要があります。

アイデア - ワークフローの設計: ここに画像の説明を入力

アイデア - ワークフロー コード:

       public Guid workflowId = default(System.Guid);
            public SPWorkflowActivationProperties workflowProperties = new SPWorkflowActivationProperties();
            // these properties are for the workflow task that will be created.
            public SPWorkflowTaskProperties CreateTaskApproval_TaskProperties = new SPWorkflowTaskProperties();
            public SPWorkflowTaskProperties CreateTaskApproval_AffterTaskProperties = new SPWorkflowTaskProperties();
            public SPWorkflowTaskProperties CreateTaskApproval_BeforeTaskProperties = new SPWorkflowTaskProperties();
            public String CreateTaskApproval_ContentTypeId = default(System.String);
            public Int32 CreateTaskApproval_ListItemId = default(System.Int32);
            public Guid CreateTaskApproval_TaskId = default(System.Guid);

       private void createTask1_MethodInvoking(object sender, EventArgs e)
            {
                createTask1.TaskId = new Guid();
                // Now create the approval task.
                // Set up some of the properties.
                CreateTaskApproval_TaskId = Guid.NewGuid();
                //Setting the task properties
                CreateTaskApproval_TaskProperties.Title = "TestTitle"
                CreateTaskApproval_TaskProperties.Description = "Description";
                CreateTaskApproval_TaskProperties.AssignedTo = @"testemail\testuser";
                CreateTaskApproval_TaskProperties.SendEmailNotification = false;
                CreateTaskApproval_TaskProperties.TaskType = 1;
                LogComment("Request Task Created.");
            }
         private void onTaskChanged1_Invoked(object sender, ExternalDataEventArgs e)
            {
                try
                {
//!!!! The Problem is here at Status
                    // Check to make sure the field is there on the item.
                    if (CreateTaskApproval_TaskProperties.ExtendedProperties["Status"] != null)
                    {
                        // Evaluate the value of the field.
                        if (CreateTaskApproval_TaskProperties.ExtendedProperties["Status"].ToString() == "Approved" || CreateTaskApproval_TaskProperties.ExtendedProperties["Status"].ToString() == "Declined")
                        {

                            TaskApproval_ApproveComplete = true;

                        }
                        else
                        {
                            TaskApproval_ApproveComplete = false;
                        }
                    }
                    else
                    {
                        // This should never happen because there is a default, but always good just in case.
                        TaskApproval_ApproveComplete = false;
                    }
                }
                catch (Exception ex)
                {
                    TaskApproval_ApproveComplete = false;

                    LogComment(ex.ToString());
                }
            }
            private void completeTask1_MethodInvoking(object sender, EventArgs e)
            {
                workflowProperties.Item.ModerationInformation.Status = SPModerationStatusType.Approved;
    //Fire some code

            }

アイデア - ワークフロー - 問題: タスクのモデレーション ステータスをまったく取得できません。(「承認済み」など)

CreateTaskApproval_TaskProperties.ExtendedProperties["Status"]

方法を知っている人はいますか?

4

1 に答える 1

1

変更後のタスク ステータスを取得できます - タスクの AfterProperties (デザイナーで作成) から。次に、onTaskChanged1 のハンドラー「Invoked」を使用して AfterProperties オブジェクトを取得し、ExtendedProperties["isApproved"] を取得してタスクの承認を確認する必要があります。

方法の例:

    private void Invoke_Task1_TaskChanged(object sender, ExternalDataEventArgs e)
    {
        Task1_IsCompleted = bool.Parse(task1_AfterProperties.ExtendedProperties["isFinished"].ToString());
        Task1_IsApproved = bool.Parse(task1_AfterProperties.ExtendedProperties["isApproved"].ToString());

        if (Task1_IsCompleted)
        {
            ManagerReason = task1_AfterProperties.ExtendedProperties["ManagerReason"].ToString();
        }
    }

それが役に立てば幸い。

于 2012-07-10T18:25:17.727 に答える