2012-07-10 63 views
0

我在visualstudio 2010中爲SharePoint創建審批工作流程。 工作流在開始時創建任務,然後等待審批任務。但是如何檢查任務是否被批准?獲得審批狀態

Perhabs我形容我szebario有點更詳細:

  • 我得有加入後得到reviewd項目列表。
  • 如果他們獲得批准或拒絕它是一個絕對decission如果該項目得到批准的一些功能應該被解僱
  • 如果被拒郵件應發送應該保持不變

我的想法:

理念 - 工作流

我最初的想法是創建一個ListItemd加入之後被解僱的工作流。 WF應該創建一個可以審查的任務。如果是肯定的,它應該啓動一些功能並自行刪除它。

Idea-流設計: enter image description here

Idea-工作流代碼:

 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"] 

有沒有關於知道如何?

+0

我建議你堅持-one- stackexchange網站,在這種情況下sharepoint.stackexchange.com。 http://meta.stackexchange.com/questions/64068/is-cross-posting-a-question-on-multiple-stack-exchange-sites-permitted-if-the-qu – 2012-07-11 08:23:01

+0

「重複」的http:// sharepoint.stackexchange.com/questions/40678/diasable-approvement-for-a-single-listitem – 2012-07-11 08:25:47

+0

對不起,但我昨天有點類似的問題沒有結果!這就是爲什麼我試圖尋找其他解決方案(如我在我的問題上寫在sharepoint.stackexchange上)!在用戶的回答後,我更詳細地描述了我的問題。所以我也在這裏添加了細節,因爲這裏也可能有用。 – HW90 2012-07-11 08:33:28

回答

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(); 
     } 
    } 

希望它能幫助。

+0

感謝您的回答!如果試過你的想法!但是我總是得到一個「沒有設置對象實例的對象引用」。例外! – HW90 2012-07-11 06:23:15

+0

然後查看它發生的位置,然後檢查null,並根據該值應用適當的邏輯流來解析IsCompleted或IsApproved。 – 2012-07-11 08:20:37

+0

對於什麼對象,你有這個例外?您是否在設計器中指定了After和Before Properties? – Redzio 2012-07-11 08:27:59

相關問題