WF DelayActivity срабатывает сразу? - PullRequest
1 голос
/ 04 апреля 2011

У меня есть рабочий процесс, который я создал и развернул в ферме Sharepoint 2007. Когда он работает против пункта 2, я немедленно создал огонь.

Я настроил обратный вызов для события InitializeTimeoutDuration. Через журналы и отладочный вывод я вижу, что он устанавливает задержку в один час. Однако при следующем цикле заданий таймера SP (менее 5 минут) события, вызывающие задержку, срабатывают.

Я здесь потерян. Любая помощь с благодарностью.

Обновление

Через некоторое копание я смог определить, почему это происходит. После запуска рабочего процесса запись добавляется в таблицу ScheduledWorkItems в базе данных контента SP. Тем не менее, «DeliveryDate» в записи устанавливается на текущее время, а «Created» - на час раньше. Тем не менее, задержка, которую я использую, составляет 2 часа, поэтому ни один из этих моментов не имеет для меня никакого смысла. Попробую жестко запрограммировать его ...

Обновление 2

Даже с жестко заданной продолжительностью время не работает. Я жестко запрограммировал 2-часовую задержку, и «Дата доставки» теперь составляет один час в будущем, а дата «Создано» - один час в прошлом. Так что, по крайней мере, разница между ними хорошая.

Обновление

Ну, это смущает ... нашел проблему. Я публикую это здесь для других, которые могут совершать ошибки, как я. Во-первых, я не был прав в моем UTC-> локальном преобразовании. Время в базе данных было правильным. Что было не правильно, так это то, как я устанавливал TimeoutDuration:

// WRONG!
delayActivity.TimeoutDuration = new TimeSpan("1:00:00"); // one hour

что я должен был делать:

// RIGHT!
((DelayActivity)sender).TimeoutDuration = new TimeSpan("1:00:00"); // one hour

как только я сделал это изменение, все остальное кажется нормальным.

1 Ответ

0 голосов
/ 06 апреля 2011

Ну, это смущает ... нашел проблему. Я публикую это здесь для других, которые могут совершать ошибки, как я. Во-первых, я не был прав в моем UTC-> локальном преобразовании. Время в базе данных было правильным. Неправильно было то, как я устанавливал TimeoutDuration:

// НЕПРАВИЛЬНО! delayActivity.TimeoutDuration = new TimeSpan ("1:00:00"); // один час

что я должен был делать:

// ПРАВО! ((DelayActivity) отправитель) .TimeoutDuration = new TimeSpan ("1:00:00"); // один час

как только я сделал это изменение, все остальное кажется нормальным.

...