(MOSS 2007 32bit SP2)
У меня есть рабочий процесс, который был разработан в Visual Studio и развернут как функция и связан с моим списком. Элементы в этом списке создаются программно, и последний шаг процесса - просмотреть коллекцию SPWorkflowAssociation в списке и запустить WF, который соответствует определенному имени:
// code to create the list item & get the new item's index (itemIndex)...
foreach (Microsoft.SharePoint.Workflow.SPWorkflowAssociation flowAssoc in SPContext.Current.Web.Lists["{listname}"].WorkflowAssociations) {
if (flowAssoc.Enabled && flowAssoc.AllowManual && (flowAssoc.Name.Trim() == workflowNameToLookFor.Trim()))
SPContext.Current.Site.WorkflowManager.StartWorkflow(SPContext.Current.Web.Lists["{listname}"].Items[itemIndex], flowAssoc, flowAssoc.AssociationData, true);
}
(пожалуйста, простите за уродливые полностью уточненные имена и постоянное повторное извлечение SPListItem, если только вы не думаете, что это как-то виновато)
Это использовалось в течение нескольких месяцев, когда рабочим процессом был рабочий процесс SharePoint Designer. Теперь, когда я развернул свой пользовательский WF (который имеет другое имя), я получаю «странное поведение»:
Все работает на 100%, если я (не системная учетная запись, а администратор семейства сайтов) запускаю код, чтобы создать элемент и запустить рабочий процесс. Но если любой другой пользователь (даже кто-то с полным доступом на сайте и всеми задействованными списками) делает то же самое, он получает общую страницу «Ошибка, произошла непредвиденная ошибка» из SharePoint, но элемент создан правильно, ошибки WF нет связан с ним (история WF для элемента полностью пуста), и они могут затем без проблем запустить указанный рабочий процесс.
Единственная ошибка, генерируемая в ULS, когда это происходит:
Engine RunWorkflow: System.NullReferenceException: ссылка на объект не установлена для экземпляра объекта. в Microsoft.SharePoint.Workflow.SPWorkflowHostServiceBase.LoadInstanceData (Guid instanceId, Boolean & обжатые данные) в Microsoft.SharePoint.Workflow.SPWinOePersistenceService.LoadWorkflowInstanceState (Guid instanceId) , WorkflowInstance workflowInstance) в System.Workflow.Runtime.WorkflowRuntime.Load (ключ Guid, контекст CreationContext, WorkflowInstance workflowInstance) в System.Workflow.Runtime.WorkflowRuntime.GetWorkflow (Guid instanceId) в Microsoft.SharePoint.We.We.SeWWW.SeWWW.SeWWW.SeWWW.SeOWWeSeWWE winoeworkflow, SPWorkflowEvent e) в Microsoft.SharePoint.Workflow.SPWinOeEngine.RunWorkflow (идентификатор отслеживания Guid, хост SPWorkflowHostService, рабочий процесс SPWorkflow, события Collection1, события TimeSpan timeOut)
Если я изменю имя нужного рабочего процесса на что-то, чего не существует, то вообще не будет ошибки (так как мой оператор IF в FOREACH никогда не найдет совпадение), поэтому он определенно находит мой рабочий процесс и пытается его запустить.
Но (опять же), если я посмотрю на страницу Состояние / история рабочего процесса на элементе, который сгенерировал ошибку, там не будет ни ошибки, ни записи о том, что WF когда-либо пытался начать там, и с этой страницы пользователь может запустить вручную рабочий процесс без проблем.
I , я использую форму ассоциации InfoPath для WF, но если это было в ее основе (например, если мне нужно передать что-то с его данными / схемой в WorkflowManager.StartWorkflow), я ' Я ожидаю увидеть ту же ошибку для моего администратора семейства сайтов. Я не использую какую-либо форму инициации WF.
Я схожу с ума, пытаясь найти источник этого. Надеясь, что кто-то видел эту ошибку ULS или такого рода поведение раньше ...