Sharepoint Workflow - ожидание, когда изменение поля не запускается, когда другой рабочий процесс меняет статус - PullRequest
2 голосов
/ 13 сентября 2009

Я пытаюсь создать рабочий процесс в Sharepoint Designer. Рабочий процесс должен ждать, пока не будет завершен рабочий процесс утверждения «из коробки». Это делается путем запуска моего рабочего процесса с созданием элемента и назначения действия wait:

Ожидание изменения поля в текущем элементе:
Подождите, пока InternalApproval станет равным 16

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

Есть ли простой способ обойти эту проблему? Я думал о реализации ожидания ожидания, но как (есть активность wait 5 minutes, но нет goto)? Могу ли я загрузить действие, которое может ожидать завершения другого рабочего процесса, или занято, ожидая выполнения условия?
Другой способ решить мою проблему - это если рабочий процесс InternalApproval изменил поле, но я тоже не могу этого достичь ...

Ответы [ 4 ]

1 голос
/ 17 сентября 2009

Я закончил писать пользовательское действие рабочего процесса, которое ждет, пока изменение не будет сделано, и возобновляет рабочий процесс. Это действие можно использовать двумя способами - в основном рабочем процессе или во втором рабочем процессе, где оно ожидает не вызывающего изменения изменения и вносит инициирующее изменение (поэтому основной рабочий процесс возобновляется). Писать это было очень весело - я использовал Reflector, чтобы скопировать некоторый код из операции OOTB (обычное ожидание изменения поля), и скопировал ее действие xml. Это работает очень хорошо после некоторых попыток, давая список полей, операторов и значений.

Custom Sharepoint Workflow Activity - I'm blogging this

Проверка условия также довольно проста с использованием класса Helper. Все свойства и их привязка были скопированы с помощью Reflector:

public void CheckStopCondition(object sender, ConditionalEventArgs e)
{
    bool checkAgainLater = Helper.TestListItem(Context, ListId, ListItem, 
                                               FieldName, Operator, Value);
    e.Result = checkAgainLater;
}
1 голос
/ 28 ноября 2009

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

В статье объясняется, как настроить рабочий процесс, использующий стандартные действия (OOB) и разработанный с использованием SharePoint Designer. Вместо использования действия «Ожидание изменения поля в текущем элементе» компоненты рабочего процесса, которые завершаются после завершения ожидания, добавляются в отдельный рабочий процесс «При изменении», который использует стандартные условия на первом этапе, чтобы определить, это может продолжаться. Если условия для поля в текущем элементе не выполняются, рабочий процесс останавливается. Если запущен другой экземпляр рабочего процесса, новые экземпляры также будут остановлены, если для поля «Workflow_running» установить значение «да» во время работы экземпляра.

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

См. Как дождаться изменения в любом списке, дождаться, когда несколько полей изменят текущий элемент (рабочий процесс SharePoint) для получения более подробной информации.

1 голос
/ 13 сентября 2009

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

-Oisin

0 голосов
/ 24 августа 2011

При использовании одного рабочего процесса для утверждения и другого рабочего процесса для обновления поля можно использовать «Ожидание изменения поля в текущем элементе», чтобы обновить поле после получения подтверждения (любой утвержденный код 16, отклоненный код 17, Выполняется код 2) вот пример:

Подождите, пока MomoApproval станет равным 16, затем установите для параметра Уведомление значение Окончательный

Этот код не будет срабатывать при утверждении, поскольку SharePoint изменяет поле, связанное с рабочим процессом; это поле не относится к схеме списка. Следовательно, изменение статуса рабочего процесса не вызывает событие изменения элемента. Без события изменения элемента второй рабочий процесс останется бездействующим, и действие «Ожидание изменения поля в текущем элементе» покажется бесполезным. Чтобы обойти это поведение рабочего процесса утверждения SharePoint 2010, выполните следующие действия:

  1. Open SharePoint Designer 2010
  2. Перейти на сайт, над которым вы работаете
  3. Нажмите на рабочие процессы
  4. Щелкните правой кнопкой мыши рабочий процесс утверждения
  5. Нажмите, скопируйте и измените
  6. Перейти к соответствующему списку
  7. Нажмите, чтобы связать существующий рабочий процесс
  8. Теперь в этом рабочем процессе нажмите «Изменить рабочий процесс», нажмите «Задача рабочего процесса утверждения»
  9. Нажмите, чтобы изменить поведение одной задачи
  10. Перейти к полному разделу и добавить это действие "установить заголовок для текущего элемента: заголовок"

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

После создания рабочий процесс можно импортировать в Visual Studio 2010 и стать частью решения. Для этого перейдите по этой ссылке: http://msdn.microsoft.com/en-us/library/ee231580.aspx

Приятного обновления рабочего процесса

Примечание: Рабочий процесс, который обновляет поле, должен начинаться при изменении элемента в списке.

Мохамед Хашем

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...