Share Point Foundation 2010 - не удалось запустить рабочий процесс
Я использую 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
Такое поведение кажется прерывистым. В чем дело?
2 ответа
Проблема заключается в том, что форма запуска рабочего процесса SharePoint кэширует элемент списка рабочего процесса в PageLoad, и когда вы вносите изменения в элемент между загрузкой страницы и вызовом HandleStartWorkflow (т. Е. Нажатием кнопки "Начать рабочий процесс"), SharePoint начинает волноваться, что элемент, который вы речь идет о том, что отличается (кэшированный элемент) от элемента, который существует в Share Point (который включает только что сделанные вами изменения).
Основные шаги по воспроизведению проблемы:
- Запустите рабочий процесс, чтобы появилась форма инициации.
- Измените некоторые свойства в WorkflowProperties.Item
- Вызовите WorkflowProperties.Item.Update, чтобы сохранить изменения в SharePoint.
- Вызовите HandleStartWorkflow.
Вы получите ошибку.
Ошибка может показаться прерывистой, если в течение некоторого времени изменение свойств элемента рабочего процесса выполняется в отдельном сеансе загрузки страницы для сеанса, когда нажата кнопка "Начать рабочий процесс". Например, если вы отправляете PostBack некоторые данные формы, а затем нажимаете кнопку "Начать рабочий процесс", все работает, потому что произошел PostBack, а затем страница была загружена.
Но если вы используете событие ASP TextBox OnTextChanged, измените текст и затем нажмите кнопку "Запустить рабочий процесс", событие 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
И все должно начать работать снова.
То же сообщение вы получите, если попытаетесь запустить рабочий процесс (через пользовательскую форму инициализации), который уже запущен на элементе. Решением здесь будет проверка состояния рабочего процесса на элементе.