public void OnEvent(object sender, string eventName, object[] args) { var name = ((Type)sender).FullName + "." + eventName; Log.Debug(string.Format("Got event {0}", name)); if (!_registeredEvents.Contains(name)) { return; } Log.Debug(string.Format("Checking instantiation criteria for {0}", name)); var criterias = TheWorkflowInstantiationCriteriaService.GetCriteriaForEvents(name); foreach (var criteria in criterias) { if (!criteria.Active) { continue; } if (!ValidateCriteria(criteria)) { continue; } Log.Debug(string.Format("Found valid criteria '{0}' for event '{1}'", criteria.Name, name)); var inst = TheWorkflowInstanceService.Instantiate(criteria.WorkflowConfiguration); if (OtherInstancesRunning(inst, args[0])) { TheWorkflowInstanceService.DeleteWorkflowInstance(inst.Id); if (criteria.CancelEvent) { SetCancelPropertyInEventArgs(args); } continue; } AddInstantiatingObjectsToInstance(args[0], inst); TheWorkflowInstanceService.Update(inst); NotifyInstantiation(inst); if (criteria.CancelEvent) { SetCancelPropertyInEventArgs(args); } TheWorkflowInstanceService.Start(inst.Id); TheWorkflowRuntime.RunWorkflows(); } }
public void Transition(IWorkflowInstance workflowInstance, string transiton, string comment) { var task = workflowInstance.CurrentTask; if (!task.Transitions.ContainsKey(transiton)) { Log.Warn(string.Format("Transition '{0}' not found for task '{1}' - '{2}'", transiton, task.Name, task.Id)); return; } Log.Info(string.Format("Performing transition '{0}' for task '{1}' - '{2}'", transiton, task.Name, task.Id)); TheWorkflowRuntime.Transition(workflowInstance, task, transiton, comment); TheWorkflowRuntime.RunWorkflows(); }