Exemple #1
0
        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();
            }
        }
Exemple #2
0
        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();
        }