Подтвердить что ты не робот

Запуск SharePoint Workflow путем обновления элемента списка через List Webservice

Я разрабатываю простой рабочий процесс SharePoint Sequential, который должен быть привязан к библиотеке документов. При сопоставлении небольшого рабочего процесса с библиотекой документов я проверил эти параметры

  • Разрешить этот рабочий процесс вручную запускается аутентифицированным пользователем с правами на редактирование элементов.
  • Start этот рабочий процесс, когда новый элемент создан.
  • Запустите этот рабочий процесс, когда элемент изменен.

Теперь я загружаю документ в эту библиотеку и запускает рабочий процесс и, например, отправляет почту. Это завершено, и все в порядке.

Когда я выбираю "Редактировать свойства" нового элемента и сохраняю изменения, рабочий процесс запускается снова. Абсолютно то, что мы ожидали.

Даже при копировании нового элемента в библиотеку с помощью Web-службы Copy.asmx рабочий процесс запускается нормально.

Но сейчас Я хочу обновить элемент с помощью SharePoint WebService Lists.asmx.

Мой CAML идет здесь:

<Method ID='1' Cmd='Update'>
  <Field Name='ID'>1</Field>
  <Field Name='myDummyPropertyField'>NewValue</Field>
</Method>

Элемент обновляется (временная метка изменена и свойство фиктивного объекта тоже), но рабочий процесс НЕ запускается снова.

Это поведение воспроизводится в нашей тестовой системе и.

Проверка журналов ошибок (C:\Program Files\Common Files\Microsoft Shared\расширения веб-сервера\12\LOGS) Я обнаружил странное сообщение об ошибке:

09/25/2008 16:51:40.17  w3wp.exe (0x1D94)                           0x1D60  Windows SharePoint Services     General                         6875    Critical    Error loading and running event receiver Microsoft.SharePoint.Workflow.SPWorkflowAutostartEventReceiver in Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c. Additional information is below.  : The object specified does not belong to a list.

Кто может подтвердить это поведение? Или любые подсказки для решения?


Я информирую вас о любых событиях по этой теме.

4b9b3361

Ответ 1

Наконец, мы прошли через службы поддержки в Microsoft и получили решение!

Во-первых, Microsoft заявила, что это ошибка. Это небольшая ошибка, потому что есть хороший способ обхода, поэтому может потребоваться некоторое время, пока эта ошибка не будет исправлена ​​(технический специалист сказал что-то со следующим пакетом обновлений следующей версии (!)).

Но теперь для проблемы.

Реазон

Посмотрим на код CAML из моего вопроса:

<Method ID='1' Cmd='Update'>
  <Field Name='ID'>1</Field>
  <Field Name='myDummyPropertyField'>NewValue</Field>
</Method>

По какой-либо причине Workflow Manager не работает с идентификатором, мы ввели во вторую строку. Странно, все другие команды SharePoint работают с идентификатором, но не с Workflow Manager. Workflow Manager работает с полным именем документа. Таким образом, поскольку мы не имели понятия и не вводили полное имя документа, Workflow Manager по умолчанию имеет имя текущей библиотеки документов. И теперь сообщение об ошибке начинает иметь смысл:

The object specified does not belong to a list.

Конечно, объект (библиотека документов) не принадлежит списку, это список.

Решение

Мы должны добавить еще одну строку в наш запрос CAML:

<Field Name='FileRef'>/sites/mySite/myDocLib/myFolder/myDocument.txt</Field>

FileRef передает полное имя документа в Workflow Manager, который теперь полностью счастлив - запускает рабочий процесс элемента.

Будьте осторожны, вы должны включить полный абсолютный путь к серверу, опустив имя вашего сервера (найденное, например, в свойстве ServerRelativePath вашего SPItem).

Полный рабочий запрос CAML:

 <Method ID='1' Cmd='Update'>
    <Field Name='ID'>1</Field>
    <Field Name='FileRef'>/sites/mySite/myDocLib/myFolder/myDocument.txt</Field>
    <Field Name='myDummyPropertyField'>NewValue</Field>
  </Method>

Будущее

Возможно, это недокументированное поведение будет исправлено в одном из следующих пакетов обновления, возможно, нет. Служба Microsoft извинилась и собирается опубликовать статью MSDN по этой теме. В следующем месяце я надеюсь, что эта статья о stackoverflow поможет разработчикам в той же ситуации.

Спасибо за чтение!

Ответ 2

Мы столкнулись с аналогичной проблемой с документом одобрения. Чтобы решить эту проблему, мы написали свой собственный Event Receiver и привязали его к списку. В зависимости от того, был ли элемент обновлен или отредактирован, мы затем активировали рабочий процесс утверждения.

Надеюсь, что это поможет...

Ответ 3

Я тоже столкнулся с этой проблемой и узнал, что как только рабочий процесс запущен, он не может быть перезапущен автоматически, независимо от того, как вы обновляете элемент. Однако вы можете снова запустить рабочий процесс вручную столько раз, сколько хотите.

Ответ 4

Я видел такое же поведение. Но тогда вы получаете сообщения вроде этого, показывая людям, как создать один в день для настройки напоминаний по электронной почте.