2012-11-21 103 views
2

我在VS 2010中創建了一個簡單的工作流程。它爲人員創建任務,當人員將任務狀態更改爲「完成」時,它將消息記錄到工作流程歷史。Visual Studio 2010/SharePoint 2010工作流程錯誤

當我將狀態更改爲完成時,它會顯示:「xxxx(工作流名稱)發生錯誤」。

代碼:

using System; 
using System.ComponentModel; 
using System.ComponentModel.Design; 
using System.Collections; 
using System.Drawing; 
using System.Linq; 
using System.Workflow.ComponentModel.Compiler; 
using System.Workflow.ComponentModel.Serialization; 
using System.Workflow.ComponentModel; 
using System.Workflow.ComponentModel.Design; 
using System.Workflow.Runtime; 
using System.Workflow.Activities; 
using System.Workflow.Activities.Rules; 
using Microsoft.SharePoint; 
using Microsoft.SharePoint.Workflow; 
using Microsoft.SharePoint.WorkflowActions; 

namespace WorkflowProject2.Workflow1 
{ 
public sealed partial class Workflow1 : SequentialWorkflowActivity 
{ 
    public Workflow1() 
    { 
     InitializeComponent(); 
    } 

    public Guid workflowId = default(System.Guid); 
    public SPWorkflowActivationProperties workflowProperties = new SPWorkflowActivationProperties(); 

    private void onWorkflowActived(object sender, ExternalDataEventArgs e) 
    { 

    } 

    public Guid taskID = default(System.Guid); 
    public SPWorkflowTaskProperties taskProperties = new Microsoft.SharePoint.Workflow.SPWorkflowTaskProperties(); 
    private bool taskHasCompleted = false; 

    public SPWorkflowTaskProperties taskAfterProperties = new Microsoft.SharePoint.Workflow.SPWorkflowTaskProperties(); 
    public SPWorkflowTaskProperties taskBeforeProperties = new Microsoft.SharePoint.Workflow.SPWorkflowTaskProperties(); 
    public String taskOutcome = default(System.String); 
    public Guid TaskStatusFieldID = new Guid("c15b34c3-ce7d-490a-b133-3f4de8801b76"); 

    private void createTask1_MethodInvoking(object sender, EventArgs e) 
    { 

     taskID = Guid.NewGuid(); 
     taskProperties.AssignedTo = "spdev\\lzhang"; 
     taskProperties.Description = "Please review"; 
     taskProperties.Title = "Leave application"; 

    } 

    private void completeTask1_MethodInvoking(object sender, EventArgs e) 
    { 
     // Finalize the task: 
     taskAfterProperties.PercentComplete = 100; 
     taskOutcome = "Completed"; 
    } 

    private void notComplete(object sender, ConditionalEventArgs e) 
    { 
     e.Result = !taskHasCompleted; // **(A)** 
    } 
    private void onTaskChanged1_Invoked(object sender, ExternalDataEventArgs e) 
    { 
     string taskStatus = taskAfterProperties.ExtendedProperties[TaskStatusFieldID].ToString(); 

     if (taskStatus == "Completed") 
     { 
      taskHasCompleted = true;  // **(B)** 

     } 

    } 

} 
} 

我有一種感覺,必須有一些問題(A)或(B),但我不知道如何解決它。我在14/LOGS文件夾的日誌文件中沒有發現任何錯誤...

我感謝任何幫助!謝謝!

回答

1

我對Visual Studio和Workflows的問題很少,其中大部分是由於未分配正確的任務ID或忘記爲更改的任務或相關令牌或其他小事情創建後續屬性。

所以你面臨的問題似乎屬於這個類別,而不是背後的代碼有問題。

嘗試使用本指南,並確保每一個步驟完成:http://dotnetadil.wordpress.com/2012/05/29/sharepoint-foundation-2010-visual-studio-approval-workflow/

甚至更​​好的微軟一步一步的指導:

http://msdn.microsoft.com/en-us/library/hh824675.aspx

另一件事我會嘗試是創建工作流程並確保退出條件設置爲true,因此您可以檢查結構是否正確完成

+0

感謝您的答覆!我會查看鏈接,看看能否找到任何東西......關心,Lin –

1

我發現問題了!這是因爲在「Workflow1.cs [design]」(設計視圖)中,我沒有在「屬性框」中爲「completeTask1」指定TaskID。默認情況下它是「00000000-0000-0000-000000000000」,我應該將它改爲「taskID」。

1

是的,你需要用一個GUID填充它,在Visual Studio中選擇Tools,Create Guid並在新窗口中選擇註冊表格式,選擇複製並粘貼所有的0。

或者選擇[...]並在新框中選擇綁定到新成員並創建字段。 它可以被稱爲像createTask1_TaskId1,終於在代碼背後的createTask1method _invoking內確保您分配一個新的GUID,就像這樣:

createTask1_TaskId1 = Guid.NewGuid(); 

第二個選項可確保通過相同的工作流程中創建多個任務做不凍結。

相關問題