Запуск рабочего процесса SharePoint путем обновления элемента списка с помощью веб-сервиса List

StackOverflow https://stackoverflow.com/questions/133953

Вопрос

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

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

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

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

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

Но сейчас Я хочу обновить элемент через веб-сервис SharePoint Lists.asmx.

Мой CAML идет сюда:

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

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

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

Проверка журналов ошибок (C:\Program Файлы \ Общие файлы \ 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.

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


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

Это было полезно?

Решение

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

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

Но теперь перейдем к проблеме.

Причина в том , что

Давайте взглянем на код CAML из моего вопроса:

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

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

The object specified does not belong to a list.

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

Решение

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

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

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

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

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

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top