2012-11-21 58 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(); 

第二个选项可确保通过相同的工作流程中创建多个任务做不冻结。