2

我正在使用 SharePoint Foundation (Sharepoint 2010) 在 Visual Studio 中使用 ASP.NET 工作流启动表单开发工作流。

我使用此表单在正在启动工作流实例的共享点列表项上设置一些属性。有时我会在浏览器窗口中收到一条错误消息,例如:

Error 

Failed%20to%20Start%20Workflow 

Troubleshoot issues with Microsoft SharePoint Foundation. 

Correlation ID: 0b8e0b67-f824-4aa5-8316-424ada134f8d 

Date and Time: 6/25/2010 10:59:17 AM 

Go back to site

这种行为似乎是间歇性的。这是怎么回事?

4

2 回答 2

2

问题是 SharePoint 工作流启动表单缓存了 PageLoad 上的工作流列表项,并且当您在页面加载和调用 HandleStartWorkflow 之间对项目进行更改(即单击“启动工作流”按钮)时,SharePoint 会吓坏您的项目'正在谈论的(缓存的项目)与 Share Point 中存在的项目(包含您刚刚所做的更改)不同。

重现问题的一般步骤是:

  1. 启动工作流,以便显示启动表单。
  2. 更改 WorkflowProperties.Item 上的某些属性
  3. 调用 WorkflowProperties.Item.Update 以将更改保存到 SharePoint
  4. 调用 HandleStartWorkflow。

你会得到错误。

如果有时在单击“启动工作流”按钮的会话的单独页面加载“会话”中对工作流项属性进行更改,则该错误可能看起来是间歇性的。例如,如果您 PostBack 一些表单数据,然后单击 Start workflow 按钮,那么一切正常,因为 PostBack 发生了,然后页面被加载。

但是,如果您使用 ASP TextBox OnTextChanged 事件,更改文本然后单击 Start Workflow 按钮,则在页面加载旧数据后触发 OnChanged 事件,将数据更改为新数据并在之前启动工作流从 SharePoint 重新加载项目数据。


修复很简单:在启动工作流之前重新加载工作流项数据。这将导致您缓存的工作流项目和项目的共享点版本相同,共享点会很高兴。

在“工作流启动代码”区域中,更改:

Private Sub StartListWorkflow()

    Dim association As SPWorkflowAssociation = workflowList.WorkflowAssociations.Item(New Guid(associationGuid))
    Web.Site.WorkflowManager.StartWorkflow(workflowListItem, association, GetInitiationData)
    SPUtility.Redirect(workflowList.DefaultViewUrl, SPRedirectFlags.UseSource, System.Web.HttpContext.Current)
End Sub

Private Sub StartListWorkflow()

    'Re-initialize the workflow parameters, particularly the workflowListItem, in case it has been changed since page load.'
     InitializeParams()

    Dim association As SPWorkflowAssociation = workflowList.WorkflowAssociations.Item(New Guid(associationGuid))
    Web.Site.WorkflowManager.StartWorkflow(workflowListItem, association, GetInitiationData)
    SPUtility.Redirect(workflowList.DefaultViewUrl, SPRedirectFlags.UseSource, System.Web.HttpContext.Current)
End Sub

一切都应该重新开始工作。

于 2010-06-25T01:52:57.410 回答
0

如果您尝试启动已经在项目上运行的工作流(通过自定义初始化表单),您将收到相同的消息。此处的解决方案是检查项目的工作流状态。

于 2012-09-05T10:59:22.313 回答