問題是SharePoint工作流啓動表單緩存PageLoad上的工作流列表項,並且當您在頁面加載和調用HandleStartWorkflow(即單擊「開始工作流」按鈕)之間對項進行更改時,SharePoint會發現您談論的項目與共享點中存在的項目(緩存項目)不同(它包含您剛纔所做的更改)。
的一般步驟來重現問題是:
- 啓動工作流,以便啓動形式顯示。
- 變化的WorkflowProperties.Item
- 呼叫WorkflowProperties.Item.Update一些屬性來更改保存到SharePoint
- 呼叫HandleStartWorkflow。
您將收到錯誤消息。
如果某個時間對工作流程項目屬性所做的更改在單獨的頁面中加載「會話」到單擊「開始工作流程」按鈕的會話中,則錯誤可能看起來是間歇性的。例如,如果您PostBack某些表單數據,然後單擊開始工作流程按鈕,則一切正常,因爲回發發生,然後加載頁面。
但是,如果您使用ASP TextBox OnTextChanged事件,更改文本,然後單擊開始工作流按鈕,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
,一切都應該重新開始工作。