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

Я разрабатываю простой последовательный рабочий процесс 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 \ web server extensions \ 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.

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


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


person Johannes Hädrich    schedule 25.09.2008    source источник
comment
Мы наблюдали такое поведение с веб-службой Lists.asmx и рабочими процессами на прошлой неделе с очень похожим сценарием. На данный момент мы работаем над этим с помощью дополнительных вызовов веб-служб, которые дублируют функциональность рабочего процесса. Я хотел бы услышать о любых разработках, с которыми вы столкнетесь!   -  person cascadianista    schedule 27.09.2008
comment
@barryd: Как вы думаете, ваш рабочий проект будет использовать его в производственной среде? И вы нашли способ запускать рабочие процессы извне? Я открыла дело в службе поддержки клиентов Microsoft. Я надеюсь, что они помогут нам разобраться в этом вопросе. Конечно, я буду размещать здесь любые новости!   -  person Johannes Hädrich    schedule 27.09.2008


Ответы (4)


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

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 поможет разработчикам в такой же ситуации.

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

person Johannes Hädrich    schedule 15.12.2008

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

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

person SharePoint Newbie    schedule 08.10.2008
comment
это звучит хорошо. Мы связываемся со службой поддержки Microsoft и ждем рекомендаций. Но это, кажется, путь. - person Johannes Hädrich; 12.10.2008

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

person Kyle Trauberman    schedule 28.09.2008

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

person Community    schedule 18.11.2008