I have a Workflow I have created and deployed to a Sharepoint 2007 farm. When it runs against an item two delay activities I have created fire immediately.
I have setup a callback on the InitializeTimeoutDuration event. Through logs and debug output I can see that it is setting the delay to one hour. However, at the next SP timer job cycle (less than 5 minutes) the events proceeding the Delay activity fire off.
I’m lost here. Any help is greatly appreciated.
Update
Through some digging I was able to determine why this was firing off. Once the workflow started a record gets added to the ScheduledWorkItems table in the SP Content database. However, the “DeliveryDate” on the record is set to the current time while the “Created” date is set to one hour previous. However, the delay I’m using is 2 hours, so neither of these times make sense to me at all. Going to try hardcoding it….
Update 2
Even with a hardcoded duration the times are off. I hardcoded a 2 hour delay in and the “DeliveryDate” is now one hour in the future while the “Created” date is one hour in the past. So at least the difference between them is good.
Update
Well, that’s embarrassing… found the problem. I’m posting it in here for others that may make mistakes like I do. First off, I was not correct in my UTC->local conversion. The times on the database were correct. What was not correct was how I was setting the TimeoutDuration:
// WRONG!
delayActivity.TimeoutDuration = new TimeSpan("1:00:00"); // one hour
what I should have been doing:
// RIGHT!
((DelayActivity)sender).TimeoutDuration = new TimeSpan("1:00:00"); // one hour
once I made that change everything else seems to be fine.
Well, that’s embarassing… found the problem. I’m posting it in here for others that may make mistakes like I do. First off, I was not correct in my UTC->local conversion. The times on the database were correct. What was not correct was how I was setting the TimeoutDuration:
// WRONG!
delayActivity.TimeoutDuration = new TimeSpan(“1:00:00”); // one hour
what I should have been doing:
// RIGHT!
((DelayActivity)sender).TimeoutDuration = new TimeSpan(“1:00:00”); // one hour
once I made that change everything else seems to be fine.