Merge pull request #6604 from infofromca/timerNull

Fixed Timer activity throws NRE

Fixes 6240
Fixes 6445
This commit is contained in:
Sébastien Ros
2016-03-24 13:06:10 -07:00

View File

@@ -4,9 +4,11 @@ using System.Linq;
using Orchard.ContentManagement; using Orchard.ContentManagement;
using Orchard.Data; using Orchard.Data;
using Orchard.Environment.Extensions; using Orchard.Environment.Extensions;
using Orchard.Exceptions;
using Orchard.Forms.Services; using Orchard.Forms.Services;
using Orchard.Localization; using Orchard.Localization;
using Orchard.Localization.Services; using Orchard.Localization.Services;
using Orchard.Logging;
using Orchard.Services; using Orchard.Services;
using Orchard.Tasks; using Orchard.Tasks;
using Orchard.Workflows.Models; using Orchard.Workflows.Models;
@@ -122,19 +124,29 @@ namespace Orchard.Workflows.Activities {
_contentManager = contentManager; _contentManager = contentManager;
_workflowManager = workflowManager; _workflowManager = workflowManager;
_awaitingActivityRepository = awaitingActivityRepository; _awaitingActivityRepository = awaitingActivityRepository;
Logger = NullLogger.Instance;
} }
public ILogger Logger { get; set; }
public void Sweep() { public void Sweep() {
var awaiting = _awaitingActivityRepository.Table.Where(x => x.ActivityRecord.Name == "Timer").ToList(); var awaiting = _awaitingActivityRepository.Table.Where(x => x.ActivityRecord.Name == "Timer").ToList();
foreach (var action in awaiting) { foreach (var action in awaiting) {
var contentItem = _contentManager.Get(action.WorkflowRecord.ContentItemRecord.Id, VersionOptions.Latest); try {
var tokens = new Dictionary<string, object> { { "Content", contentItem } }; var contentItem = action.WorkflowRecord.ContentItemRecord != null ? _contentManager.Get(action.WorkflowRecord.ContentItemRecord.Id, VersionOptions.Latest) : null;
var workflowState = FormParametersHelper.FromJsonString(action.WorkflowRecord.State); var tokens = new Dictionary<string, object> { { "Content", contentItem } };
workflowState.TimerActivity_StartedUtc = null; var workflowState = FormParametersHelper.FromJsonString(action.WorkflowRecord.State);
action.WorkflowRecord.State = FormParametersHelper.ToJsonString(workflowState); workflowState.TimerActivity_StartedUtc = null;
_workflowManager.TriggerEvent("Timer", contentItem, () => tokens); action.WorkflowRecord.State = FormParametersHelper.ToJsonString(workflowState);
_workflowManager.TriggerEvent("Timer", contentItem, () => tokens);
}
catch (Exception ex) {
if (ex.IsFatal()) {
throw;
}
Logger.Error(ex, "TimerBackgroundTask: Error while processing background task \"{0}\".", action.ActivityRecord.Name);
}
} }
} }
} }