我正在使用SharePoint基金会(SharePoint2010)在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这种行为似乎是间歇性的。到底怎么回事?
发布于 2010-06-25 09:52:57
问题是,SharePoint工作流启动表单在PageLoad上缓存工作流列表项,当您在页面加载和调用HandleStartWorkflow之间对项进行更改(即单击启动工作流按钮)时,SharePoint会发现您正在讨论的项(缓存的项)与Share Point中存在的项(合并了您刚才所做的更改)不同。
重现问题的一般步骤如下:
您将得到错误。
如果有时对工作流项属性的更改是在单独的页面中进行的,则该错误可能看起来是间歇性的,该页面加载到单击了启动工作流按钮的会话中。例如,如果您启动一些表单数据,然后单击Start PostBack按钮,那么一切都会正常工作,因为PostBack会发生,然后页面就会加载。
但是,如果使用ASP TextBox OnTextChanged事件,请更改文本,然后单击“启动工作流”按钮,则会在页面加载旧数据后激发OnChanged事件,将数据更改为新数据,并在从SharePoint重新加载项目数据之前启动工作流。
修复方法很简单:在启动工作流之前重新加载工作流项数据。这将导致缓存的工作流项目与该项目的sharepoint版本相同,并且共享点将是满意的。
在"Workflow Initiation“区域中,更改:
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一切都应该重新开始工作。
发布于 2012-09-05 18:59:22
如果您尝试启动已经在项目上运行的工作流(通过自定义初始化表单),您将收到相同的消息。这里的解决方案是检查项目的工作流状态。
https://stackoverflow.com/questions/3115061
复制相似问题