Почему мой рабочий процесс SharePoint не работает, когда клиент работает под управлением Vista или Windows 7? - PullRequest
0 голосов
/ 11 января 2010

У меня похожая ситуация с этим вопросом .

У меня есть настраиваемый последовательный рабочий процесс SharePoint, удаленный из Visual Studio 2008. Он связан с формой InfoPath, переданной в библиотеку форм. Он настроен на автоматический запуск при создании элемента.

Иногда работает. Иногда он просто не запускается.

Так же, как и вопрос, связанный выше, я зарегистрировался в отладчике, и проблема в том, что поля InfoPath, опубликованные в виде столбцов в библиотеке, пусты при запуске рабочего процесса. (Я получаю доступ к полям с помощью workflowProperties.Item["fieldName"].) Но, похоже, существует условие гонки, поскольку эти поля действительно отображаются в представлении библиотеки, и если я прекращаю сбойный рабочий процесс и перезапускаю его вручную, работает нормально!

После многих головных уборов и испытаний я определил, что рабочий процесс будет успешно запущен, если пользователь запускает любую версию IE в Windows XP, но он завершится неудачно, если тот же пользователь отправит те же данные формы из Клиентский компьютер с Vista или Windows 7.

Кто-нибудь знает, почему это происходит?

Ответы [ 2 ]

2 голосов
/ 19 октября 2012

Я использовал другое решение, которое будет только ждать, пока свойство InfoPath не станет доступным (или не более 60 секунд):

public SPWorkflowActivationProperties workflowProperties =
   new SPWorkflowActivationProperties();

private void onOrderFormWorkflowActivated_Invoked(object sender, ExternalDataEventArgs e)
{
   SPListItem workflowItem;
   workflowItem = workflowProperties.List.GetItemById(workflowProperties.ItemId);

   int waited = 0;
   int maxWait = 60000; // Max wait time in ms
   while (workflowItem["fieldName"] == null && (waited < maxWait))
   {
      System.Threading.Thread.Sleep(1);
      waited ++;
      workflowItem = workflowProperties.List.GetItemById(workflowProperties.ItemId);
   }

   // For testing: Write delay time in Workflow History Event
   SPWorkflow.CreateHistoryEvent(
      workflowProperties.Web,
      workflowProperties.WorkflowId, 
      (int)SPWorkflowHistoryEventType.WorkflowComment,
      workflowProperties.OriginatorUser, TimeSpan.Zero, 
      waited.ToString() + " ms", "Waiting time", "");
}

workflowProperties.Item никогда не получит свойство InfoPath в коде выше. workflowProperties.List.GetItemById(workflowProperties.ItemId) будет после некоторой задержки.

1 голос
/ 11 января 2010

Это происходит из-за того, что Vista / 7 сохраняет формы InfoPath через WebDAV, однако XP использует другой протокол (извините, в данный момент не могу вспомнить). SharePoint ловит событие «ItemAdded» до того, как файл действительно загружен (т. Е. Элемент уже создан, но в данный момент идет загрузка файла).

То, что вы можете сделать для обходного пути, - это добавить действие сделки и подождать 10 секунд в качестве первого шага в вашем рабочем процессе (на самом деле это будет дольше, чем десять секунд из-за того, как рабочие процессы встроены в SPPS). Таким образом, загрузка будет завершена, когда вы выполните чтение элемента. Чтобы проинформировать пользователей о том, что происходит, вы можете добавить действие «logToHistoryList» до задержки.

...