Запуск рабочего процесса SharePoint путем обновления элемента списка с помощью веб-сервиса List
-
02-07-2019 - |
Вопрос
Я разрабатываю простой последовательный рабочий процесс 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 поможет разработчикам в такой же ситуации.
Спасибо за чтение!
Другие советы
Мы столкнулись с аналогичной проблемой при выполнении рабочего процесса утверждения.Чтобы решить эту проблему, мы написали наш собственный приемник событий и прикрепили его к списку.В зависимости от того, был ли элемент обновлен или отредактирован, мы затем запустили рабочий процесс утверждения.
Надеюсь, это поможет...
Я также столкнулся с этой проблемой и обнаружил, что после запуска рабочего процесса его нельзя перезапустить автоматически, независимо от того, как вы обновляете элемент.Однако вы можете вручную запускать рабочий процесс снова столько раз, сколько захотите.
Я видел такое же поведение.Но тогда вы получаете сообщения, подобные этому, показывая людям, как создавать по одному напоминанию в день для настройки напоминаний по электронной почте.