Запуск рабочего процесса SharePoint путем обновления элемента списка с помощью веб-службы списка - PullRequest
16 голосов
/ 25 сентября 2008

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

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

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

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

Даже при копировании нового элемента в библиотеку с помощью веб-службы 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.

Кто-нибудь может подтвердить это поведение? Или какое-либо решение намекает?


Я держу вас в курсе любых событий на эту тему.

Ответы [ 4 ]

11 голосов
/ 15 декабря 2008

Наконец, мы прошли через службы поддержки в 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 поможет разработчикам в такой же ситуации.

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

3 голосов
/ 08 октября 2008

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

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

0 голосов
/ 19 ноября 2008

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

0 голосов
/ 28 сентября 2008

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

...