2010-06-25 57 views
2

我正在使用SharePoint Foundation(Sharepoint 2010)在Visual Studio中使用ASP.NET工作流啓動窗體開發工作流。Share Point Foundation 2010 - 無法啓動工作流

我使用此表單在啓動工作流實例的共享點列表項上設置一些屬性。有時我在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 

此行爲似乎是間歇性的。這是怎麼回事?

回答

2

問題是SharePoint工作流啓動表單緩存PageLoad上的工作流列表項,並且當您在頁面加載和調用HandleStartWorkflow(即單擊「開始工作流」按鈕)之間對項進行更改時,SharePoint會發現您談論的項目與共享點中存在的項目(緩存項目)不同(它包含您剛纔所做的更改)。

的一般步驟來重現問題是:

  1. 啓動工作流,以便啓動形式顯示。
  2. 變化的WorkflowProperties.Item
  3. 呼叫WorkflowProperties.Item.Update一些屬性來更改保存到SharePoint
  4. 呼叫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 

,一切都應該重新開始工作。

0

如果您嘗試啓動已在項目上運行的工作流程(通過自定義初始窗體),您將得到相同的消息。這裏的解決方案是檢查項目上工作流程的狀態。

相關問題