2009-09-13 2 views
2

Я пытаюсь создать рабочий процесс в конструкторе Sharepoint. Рабочий процесс должен дождаться завершения рабочего процесса утверждения Out-Of-The-Box. Это делается путем запуска моего рабочего процесса с созданием этого элемента и usign на wait активности:Рабочий процесс Sharepoint - Подождите, пока смена поля не будет сработана при изменении статуса нового рабочего процесса

Дождитесь изменениями поля в текущей позиции:
Wait для InternalApproval равного 16

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

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

ответ

1

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

Custom Sharepoint Workflow Activity - I'm blogging this

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

public void CheckStopCondition(object sender, ConditionalEventArgs e) 
{ 
    bool checkAgainLater = Helper.TestListItem(Context, ListId, ListItem, 
               FieldName, Operator, Value); 
    e.Result = checkAgainLater; 
} 
+0

Насколько сложно мне просить, чтобы вы могли где-то поставить этот код? – Kristopher

+1

@ Кристофер - Спасибо. Это было сделано как часть предыдущей работы. У меня нет доступа к этому коду в течение нескольких лет, и у меня не было бы права публиковать его в любом случае. Извините, что разочаровал. – Kobi

1

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

-Oisin

+0

Thanks Oisin. Наверное, я могу найти рассуждения так или иначе ... Знаете ли вы об этом? Я хотел бы продолжить мой рабочий процесс, когда будет выполнен другой рабочий процесс, или вызвать редактирование. – Kobi

+0

Прочтите это: http://blogs.msdn.com/sharepointdesigner/archive/2009/07/13/service-pack-2-prevents-an-on-change-workflow-from-starting- self.aspx В нем представлены альтернативы. – x0n

+0

Я прочитал статью, спасибо за это.Создание двух рабочих процессов будет работать, но меня это беспокоит - поведение уже изменилось один раз, нарушив множество рабочих процессов (как говорится в статье), и он чувствует себя немного взломанным. Еще раз спасибо! – Kobi

1

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

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

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

Для получения более подробной информации см. How to wait for a change in any list, wait for multiple field changes the current item (SharePoint Workflow).

+0

Интересно, и мне нравится идея ждать на задаче. Однако, по моему сценарию, я должен ждать, когда пользователь запустит рабочий процесс (с уникальными параметрами) и дождитесь его завершения: как я могу ждать нескольких задач, которые еще не созданы? Как я могу сказать, что он завершен? – Kobi

0

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

Дождитесь MomoApproval равного 16 затем установить оповещение в Final

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

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

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

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

Наслаждайтесь обновления рабочего процесса

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

Mohamed Hachem

Смежные вопросы