我正在使用SharePoint Foundation(Sharepoint 2010)在Visual Studio中使用ASP.NET工作流启动表单开发工作流。
我使用此表单在正在启动工作流实例的共享点列表项上设置一些属性。有时我会在brwoser窗口中收到错误消息,例如:
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
这种行为似乎是间歇性的。发生了什么事?
答案 0 :(得分:2)
问题是SharePoint工作流程启动表单在PageLoad上缓存工作流列表项,当您在页面加载和调用HandleStartWorkflow之间对项目进行更改(即单击“启动工作流程”按钮)时,SharePoint会发现您正在谈论的项目与共享点中存在的项目(包含您刚刚进行的更改)不同(缓存项目)。
重现问题的一般步骤是:
您将收到错误。
如果某些时候在单独的页面中加载“会话”到单击“启动工作流程”按钮的会话,则可能会出现间歇性错误。例如,如果你发布了一些表单数据,然后单击“启动工作流程”按钮,那么一切正常,因为发生了PostBack,然后页面被加载。
但是如果你使用ASP TextBox OnTextChanged事件,更改文本然后单击Start Workflow按钮,在页面加载旧数据后触发OnChanged事件,数据将更改为新数据和工作流程在从SharePoint重新加载项目数据之前启动。
修复很简单:在开始工作流程之前重新加载工作流程项数据。这将导致您的缓存工作流项目和项目的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
一切都应该重新开始了。
答案 1 :(得分:0)
如果您尝试启动已在项目上运行的工作流程(通过自定义初始化表单),您将获得相同的消息。这里的解决方案是检查项目工作流的状态。