2

我在 VS 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 文件夹的日志文件中没有发现任何错误...

我很感激任何帮助!谢谢!

4

4 回答 4

1

我在使用 Visual Studio 和 Workflows 时遇到的问题很少,其中大部分是由于没有分配正确的任务 ID,或者忘记为任务更改或关联令牌或其他小东西创建后属性。

所以你面临的问题似乎属于这一类,而不是背后的代码有问题。

尝试使用本指南并确保完成每个步骤:http: //dotnetadil.wordpress.com/2012/05/29/sharepoint-foundation-2010-visual-studio-approval-workflow/

甚至更好的 Microsoft 分步指南:

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

我会尝试的另一件事是创建您的工作流程并确保退出条件设置为 true,以便您可以检查结构是否正确完成

于 2012-11-21T09:13:48.287 回答
1

是的,您需要使用 GUID 填充它,在 Visual Studio 中选择工具,创建 Guid,然后在新窗口中选择注册表格式,选择复制并粘贴所有 0 的位置。

或者选择 […] 并在新框中选择绑定到新成员并创建字段。它可能被称为 createTask1_TaskId1 之类的东西,最后在 createTask1method _invoking 后面的代码中确保您分配一个新的 Guid,如下所示:

 createTask1_TaskId1 = Guid.NewGuid();

第二个选项确保由同一工作流创建的多个任务不会冻结。

于 2012-11-22T08:52:39.460 回答
1

我发现了问题!这是因为在“Workflow1.cs[design]”(设计视图)中,我没有在“属性框”中为“completeTask1”指定 TaskID。默认情况下它是“00000000-0000-0000-000000000000”,我应该把它改成“taskID”。

于 2012-11-21T23:56:59.807 回答
0

要获取工作流中的当前任务 id,我建议阅读帖子 http://blog.technovert.com/2013/12/solved-taskid-without-using-ontaskcreated/

于 2013-12-17T06:59:45.540 回答