コード例 #1
0
        static ActivityDefinitionService()
        {
            var workflowDefinition = new WorkflowDefinition
            {
                Name = "流程1"
            };
            var definition2 = new ActivityDefinition
            {
                Name = "Task2",
                Start = false,
                //                State = null,
                WorkflowDefinition = workflowDefinition
            };
            var definition = new ActivityDefinition
            {
                Name = "Task1",
                Start = true,
                //                State = null,
                WorkflowDefinition = workflowDefinition
            };
            workflowDefinition.Activitys = new[] { definition, definition2 };
            workflowDefinition.Transitions = new List<TransitionDefinition>
            {
                new TransitionDefinition
                {
                    SourceActivity = definition,
                    DestinationActivity = definition2,
                    WorkflowDefinition = workflowDefinition
                }
            };

            WorkflowDefinitions.Add(workflowDefinition);
        }
コード例 #2
0
ファイル: WorkflowManager.cs プロジェクト: at0717/Workflow
        private void StartWorkflow(WorkflowContext workflowContext, ActivityDefinition activityDefinition, IDictionary<string, object> environment)
        {
            var cancellationToken = new CancellationToken();
            InvokeActivities(activity => activity.OnWorkflowStarting(workflowContext, cancellationToken));

            if (cancellationToken.IsCancelled)
                return;

            InvokeActivities(activity => activity.OnWorkflowStarted(workflowContext));

            var blockedOn = ExecuteWorkflow(workflowContext, activityDefinition, environment).ToList();

            if (blockedOn.Any())
            {
                foreach (var blocking in blockedOn)
                {
                    workflowContext.WorkflowInstance.AwaitingActivities.Add(new AwaitingActivityDefinition
                    {
                        ActivityDefinition = blocking,
                        WorkflowInstance = workflowContext.WorkflowInstance
                    });
                }
            }
        }
コード例 #3
0
ファイル: WorkflowManager.cs プロジェクト: at0717/Workflow
        public IEnumerable<ActivityDefinition> ExecuteWorkflow(WorkflowContext workflowContext,
            ActivityDefinition activityDefinition, IDictionary<string, object> environment)
        {
            var scheduled = new Stack<ActivityDefinition>();

            scheduled.Push(activityDefinition);

            while (scheduled.Any())
            {
                activityDefinition = scheduled.Pop();

                var activityContext = CreateActivityContext(activityDefinition, environment);

                var cancellationToken = new CancellationToken();
                InvokeActivities(activity => activity.OnActivityExecuting(workflowContext, activityContext, cancellationToken));

                if (cancellationToken.IsCancelled)
                    continue;

                var outcomes = activityContext.Activity.Execute(workflowContext, activityContext).ToList();

                InvokeActivities(activity => activity.OnActivityExecuted(workflowContext, activityContext));

                foreach (var outcome in outcomes)
                {
                    var transition = workflowContext.WorkflowInstance.WorkflowDefinition.Transitions.FirstOrDefault(x => x.SourceActivity == activityDefinition && x.DestinationActivity.Name == outcome);

                    if (transition != null)
                    {
                        scheduled.Push(transition.DestinationActivity);
                    }
                }
            }
            return new ActivityDefinition[0];
        }
コード例 #4
0
ファイル: WorkflowManager.cs プロジェクト: at0717/Workflow
 private ActivityContext CreateActivityContext(ActivityDefinition activityDefinition, IDictionary<string, object> environment)
 {
     return new ActivityContext
     {
         Activity = _activitiesManager.GetActivityByName(activityDefinition.Name),
         Environment = environment
     };
 }