コード例 #1
0
        public void SingleTask()
        {
            var builder = new WorkflowDefinitionBuilder();

            var workflowDefinition = builder
                .AddNode()
                    .WithName("myTask")
                    .IsStartNode()                    
                    .AddTransition()
                        .WithName("transition")
                        .To("end")
                    .BuildTransition()
                .BuildUserTask()
                .AddNode()
                    .WithName("end")
                    .IsEndNode()
                .BuildNode()
                .BuildWorkflow();

            var workflowEngine = new WorkflowEngineBuilder().ConfigureServiceLocator().ImportModule(new Neo4jPersistenceModule()).Build();
            var instance = workflowEngine.StartNewInstance(workflowDefinition);

            Assert.False(instance.IsFinished);

            var userTask = workflowEngine.FindTask("myTask", instance.WorkflowInstanceIdentifier);
            workflowEngine.Complete(userTask);

            instance = workflowEngine.Load(instance.Identifier);
            Assert.That(instance.IsFinished);
        }
コード例 #2
0
        public void SingleTask()
        {
            var builder = new WorkflowDefinitionBuilder();
            bool executed = false;

            var workflowDefinition = builder
                .AddNode()
                    .WithName("myTask")
                    .IsStartNode()                    
                    .AddTransition()
                        .WithName("transition")
                        .To("end")
                    .BuildTransition()
                .BuildUserTask()
                .AddNode()
                    .WithName("end")
                    .IsEndNode()
                .BuildMockNode(e => executed = e)
                .BuildWorkflow();

            var workflowEngine = new WorkflowEngineBuilder().Build();
            var instance = workflowEngine.StartNewInstance(workflowDefinition);

            Assert.False(executed);

            var userTask = workflowEngine.FindTask("myTask", instance.WorkflowInstanceIdentifier);
            workflowEngine.Complete(userTask);

            Assert.That(executed);
            Assert.That(instance.IsFinished);
        }
コード例 #3
0
ファイル: LinearWorkflow.cs プロジェクト: dkschlos/PVM.NET
        public void SingleStartAndEndNode()
        {
            var builder = new WorkflowDefinitionBuilder();
            bool executed = false;

            var workflowDefinition = builder
                .AddNode()
                    .WithName("start")
                    .IsStartNode()
                    .AddTransition()
                        .WithName("transition")
                        .To("end")
                    .BuildTransition()
                .BuildMockNode(e => executed = e)
                .AddNode()
                    .WithName("end")
                    .IsEndNode()
                .BuildNode()
                .BuildWorkflow();

            var instance = new WorkflowEngineBuilder().Build().StartNewInstance(workflowDefinition);

            Assert.That(executed);
            Assert.That(instance.IsFinished);
        }
コード例 #4
0
ファイル: ParallelWorkflow.cs プロジェクト: dkschlos/PVM.NET
        public void SingleBranch_ExecutesNodeAfterJoin()
        {
            var builder = new WorkflowDefinitionBuilder();
            bool executed = false;

            var workflowDefinition = builder
                .AddNode()
                    .WithName("split")
                    .IsStartNode()
                 .AddTransition()
                        .WithName("transition1")
                        .To("subNode1")
                    .BuildTransition()
                    .AddTransition()
                        .WithName("transition2")
                        .To("subNode2")
                    .BuildTransition()
                .BuildParallelGateway()
                .AddNode()
                    .WithName("subNode1")
                    .AddTransition()
                        .WithName("subNodeToEnd")
                        .To("join")
                    .BuildTransition()
                .BuildNode()
                .AddNode()
                    .WithName("subNode2")
                    .AddTransition()
                        .WithName("subNode2ToEnd")
                        .To("join")
                    .BuildTransition()
                .BuildNode()
                .AddNode()
                    .WithName("join")
                    .AddTransition()
                        .WithName("joinToEnd")
                        .To("end")
                    .BuildTransition()
                .BuildParallelGateway()
                .AddNode()
                    .WithName("end")
                    .IsEndNode()
                .BuildMockNode(e => executed = e)
                .BuildWorkflow();

            var instance = new WorkflowEngineBuilder().Build().StartNewInstance(workflowDefinition);

            Assert.That(executed);
            Assert.That(instance.IsFinished);
        }
コード例 #5
0
        public void PersistNestedWorkflow()
        {
            var builder = new WorkflowDefinitionBuilder();

            var workflowDefinition = builder
                .WithIdentifier("testWorkflowDefinition")
                .AddNode()
                    .WithName("start")
                    .WithOperation<TestOperation>()
                    .IsStartNode()
                    .AddTransition()
                        .WithName("transition")
                        .To("nested")
                    .BuildTransition()
                .BuildNode()
                .AddNode()
                    .WithName("nested")
                    .AddTransition()
                        .WithName("nestedToEnd")
                        .To("end")
                    .BuildTransition()
                .BuildSubWorkflow(new WorkflowDefinitionBuilder()
                    .WithIdentifier("subWorkflowDefinition")
                    .AddNode()
                        .IsStartNode()
                        .IsEndNode()
                        .WithName("subWorkflowNode")
                        .WithOperation<TestOperation>()
                    .BuildNode()
                    .AsDefinitionBuilder())
                .AddNode()
                    .WithName("end")
                    .IsEndNode()
                .BuildNode()
                .BuildWorkflow();

            var instance =
                new WorkflowEngineBuilder().ConfigureServiceLocator()
                                           .ImportModule(new SqlPersistenceTestModule(SessionFactory))
                                           .Build()
                                           .StartNewInstance(workflowDefinition);


            using(var session = SessionFactory.OpenSession())
                Assert.That(session.QueryOver<WorkflowDefinitionModel>().Where(d => d.Identifier == "nested").SingleOrDefault(), Is.Not.Null);
        }
コード例 #6
0
        public void PersistNestedWorkflow()
        {
            var builder = new WorkflowDefinitionBuilder();

            var workflowDefinition = builder
                .WithIdentifier("testWorkflowDefinition")
                .AddNode()
                    .WithName("start")
                    .WithOperation<TestOperation>()
                    .IsStartNode()
                    .AddTransition()
                        .WithName("transition")
                        .To("nested")
                    .BuildTransition()
                .BuildNode()
                .AddNode()
                    .WithName("nested")
                    .AddTransition()
                        .WithName("nestedToEnd")
                        .To("end")
                    .BuildTransition()
                .BuildSubWorkflow(new WorkflowDefinitionBuilder()
                    .WithIdentifier("subWorkflowDefinition")
                    .AddNode()
                        .IsStartNode()
                        .IsEndNode()
                        .WithName("subWorkflowNode")
                        .WithOperation<TestOperation>()
                    .BuildNode()
                    .AsDefinitionBuilder())
                .AddNode()
                    .WithName("end")
                    .IsEndNode()
                .BuildNode()
                .BuildWorkflow();

            var instance =
                new WorkflowEngineBuilder().ConfigureServiceLocator()
                                           .ImportModule(new Neo4jPersistenceTestModule(GraphClient))
                                           .Build()
                                           .StartNewInstance(workflowDefinition);


        }
コード例 #7
0
        public void JoinWaitsOnNestedTask()
        {
            var builder = new WorkflowDefinitionBuilder();
            bool executed = false;

            var workflowDefinition = builder
                .AddNode()
                    .WithName("start")
                    .IsStartNode()
                    .AddTransition()
                        .To("task1")
                   .BuildTransition()
                   .AddTransition()
                        .To("path2")
                    .BuildTransition()
                .BuildParallelGateway()
                .AddNode()
                    .WithName("task1")
                    .AddTransition()
                        .To("join")
                    .BuildTransition()
                .BuildUserTask()
                .AddNode()
                    .WithName("path2")
                    .AddTransition()
                        .To("nestedSplit")
                    .BuildTransition()
                .BuildNode()
                .AddNode()
                    .WithName("nestedSplit")
                    .AddTransition()
                        .To("nestedTask")
                    .BuildTransition()
                    .AddTransition()
                        .To("nestedPath2")
                    .BuildTransition()
                .BuildParallelGateway()
                .AddNode()
                    .WithName("nestedTask")
                    .AddTransition()
                        .To("join")
                    .BuildTransition()
                .BuildUserTask()
                .AddNode()
                    .WithName("nestedPath2")
                    .AddTransition()
                        .To("join")
                    .BuildTransition()
                .BuildNode()
                .AddNode()
                    .WithName("join")
                    .AddTransition()
                        .To("end")
                    .BuildTransition()
                .BuildParallelGateway()
                .AddNode()
                    .WithName("end")
                    .IsEndNode()
                .BuildMockNode(e => executed = e)
                .BuildWorkflow();

            var workflowEngine = new WorkflowEngineBuilder().Build();
            var instance = workflowEngine.StartNewInstance(workflowDefinition);

            Assert.False(executed);

            var userTask = workflowEngine.FindTask("task1", instance.WorkflowInstanceIdentifier);
            workflowEngine.Complete(userTask);

            Assert.False(executed);

            var nestedTask = workflowEngine.FindTask("nestedTask", instance.WorkflowInstanceIdentifier);
            workflowEngine.Complete(nestedTask);

            Assert.That(instance.IsFinished);
        }
コード例 #8
0
        public void TwoParallelTasks()
        {
            var builder = new WorkflowDefinitionBuilder();

            var workflowDefinition = builder
                .AddNode()
                    .WithName("start")
                    .IsStartNode()
                    .AddTransition()
                        .To("task1")
                   .BuildTransition()
                   .AddTransition()
                        .To("task2")
                    .BuildTransition()
                .BuildParallelGateway()
                .AddNode()
                    .WithName("task1")
                    .AddTransition()
                        .To("join")
                    .BuildTransition()
                .BuildUserTask()
                .AddNode()
                    .WithName("task2")
                    .AddTransition()
                        .To("join")
                    .BuildTransition()
                .BuildUserTask()
                .AddNode()
                    .WithName("join")
                    .AddTransition()
                        .To("end")
                    .BuildTransition()
                .BuildParallelGateway()
                .AddNode()
                    .WithName("end")
                    .IsEndNode()
                .BuildNode()
                .BuildWorkflow();

            var workflowEngine = new WorkflowEngineBuilder().ConfigureServiceLocator().ImportModule(new Neo4jPersistenceTestModule(GraphClient)).Build();
            var instance = workflowEngine.StartNewInstance(workflowDefinition);

            Assert.False(instance.IsFinished);

            var userTask = workflowEngine.FindTask("task1", instance.WorkflowInstanceIdentifier);
            workflowEngine.Complete(userTask);

            Assert.False(instance.IsFinished);

            var userTask2 = workflowEngine.FindTask("task2", instance.WorkflowInstanceIdentifier);
            workflowEngine.Complete(userTask2);

            instance = workflowEngine.Load(instance.Identifier);
            Assert.That(instance.IsFinished);
        }
コード例 #9
0
        public void JoinWaitsOnNestedTask()
        {
            var builder = new WorkflowDefinitionBuilder();

            var workflowDefinition = builder
                .AddNode()
                    .WithName("start")
                    .IsStartNode()
                    .AddTransition()
                        .To("task1")
                   .BuildTransition()
                   .AddTransition()
                        .To("path2")
                    .BuildTransition()
                .BuildParallelGateway()
                .AddNode()
                    .WithName("task1")
                    .AddTransition()
                        .To("join")
                    .BuildTransition()
                .BuildUserTask()
                .AddNode()
                    .WithName("path2")
                    .AddTransition()
                        .To("nestedSplit")
                    .BuildTransition()
                .BuildNode()
                .AddNode()
                    .WithName("nestedSplit")
                    .AddTransition()
                        .To("nestedTask")
                    .BuildTransition()
                    .AddTransition()
                        .To("nestedPath2")
                    .BuildTransition()
                .BuildParallelGateway()
                .AddNode()
                    .WithName("nestedTask")
                    .AddTransition()
                        .To("join")
                    .BuildTransition()
                .BuildUserTask()
                .AddNode()
                    .WithName("nestedPath2")
                    .AddTransition()
                        .To("join")
                    .BuildTransition()
                .BuildNode()
                .AddNode()
                    .WithName("join")
                    .AddTransition()
                        .To("end")
                    .BuildTransition()
                .BuildParallelGateway()
                .AddNode()
                    .WithName("end")
                    .IsEndNode()
                .BuildNode()
                .BuildWorkflow();

            var workflowEngine = new WorkflowEngineBuilder().ConfigureServiceLocator().ImportModule(new SqlPersistenceTestModule(SessionFactory)).Build();
            var instance = workflowEngine.StartNewInstance(workflowDefinition);

            Assert.False(instance.IsFinished);

            var userTask = workflowEngine.FindTask("task1", instance.WorkflowInstanceIdentifier);
            workflowEngine.Complete(userTask);

            instance = workflowEngine.Load(instance.Identifier);
            Assert.That(instance.IsFinished);

            var nestedTask = workflowEngine.FindTask("nestedTask", instance.WorkflowInstanceIdentifier);
            workflowEngine.Complete(nestedTask);

            instance = workflowEngine.Load(instance.Identifier);
            Assert.That(instance.IsFinished);
        }