From 41b0ec28f8fd2ea218964f66c461396b50fd67b2 Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Fri, 24 Sep 2021 09:47:59 +0200 Subject: [PATCH] Add Forks sample --- Elsa.sln | 8 +++++ .../Elsa.Samples.Forks.csproj | 17 +++++++++++ .../console/Elsa.Samples.Forks/Program.cs | 27 +++++++++++++++++ .../Workflows/SimpleForkWorkflow.cs | 30 +++++++++++++++++++ 4 files changed, 82 insertions(+) create mode 100644 src/samples/console/Elsa.Samples.Forks/Elsa.Samples.Forks.csproj create mode 100644 src/samples/console/Elsa.Samples.Forks/Program.cs create mode 100644 src/samples/console/Elsa.Samples.Forks/Workflows/SimpleForkWorkflow.cs diff --git a/Elsa.sln b/Elsa.sln index b27c57c75..b4e9ed417 100644 --- a/Elsa.sln +++ b/Elsa.sln @@ -359,8 +359,11 @@ EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Samples.HttpEndpointSecurity", "src\samples\aspnet\Elsa.Samples.HttpEndpointSecurity\Elsa.Samples.HttpEndpointSecurity.csproj", "{82B115DA-E3D0-49D7-AD08-DE9387656756}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.WatchDirectoryWorker", "src\samples\worker\Elsa.Samples.WatchDirectoryWorker\Elsa.Samples.WatchDirectoryWorker.csproj", "{8EC3CF51-EBC1-4B45-881E-4B1B8190D579}" +EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.InfiniteLoopDetection", "src\samples\aspnet\Elsa.Samples.InfiniteLoopDetection\Elsa.Samples.InfiniteLoopDetection.csproj", "{A2572DBF-AF11-4A02-AF99-B343871F2D85}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.Forks", "src\samples\console\Elsa.Samples.Forks\Elsa.Samples.Forks.csproj", "{AB67BA19-5BC2-4C6D-A994-61D51A6A6FD5}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -855,6 +858,10 @@ Global {A2572DBF-AF11-4A02-AF99-B343871F2D85}.Debug|Any CPU.Build.0 = Debug|Any CPU {A2572DBF-AF11-4A02-AF99-B343871F2D85}.Release|Any CPU.ActiveCfg = Release|Any CPU {A2572DBF-AF11-4A02-AF99-B343871F2D85}.Release|Any CPU.Build.0 = Release|Any CPU + {AB67BA19-5BC2-4C6D-A994-61D51A6A6FD5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AB67BA19-5BC2-4C6D-A994-61D51A6A6FD5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AB67BA19-5BC2-4C6D-A994-61D51A6A6FD5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AB67BA19-5BC2-4C6D-A994-61D51A6A6FD5}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -1016,6 +1023,7 @@ Global {82B115DA-E3D0-49D7-AD08-DE9387656756} = {22E75696-6FE9-436A-9097-EE21C603F818} {8EC3CF51-EBC1-4B45-881E-4B1B8190D579} = {E42743A0-FBDD-4150-9D53-6000496D9B87} {A2572DBF-AF11-4A02-AF99-B343871F2D85} = {22E75696-6FE9-436A-9097-EE21C603F818} + {AB67BA19-5BC2-4C6D-A994-61D51A6A6FD5} = {FC9F520F-BA51-4AD2-BFEE-EF787798E734} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {8B0975FD-7050-48B0-88C5-48C33378E158} diff --git a/src/samples/console/Elsa.Samples.Forks/Elsa.Samples.Forks.csproj b/src/samples/console/Elsa.Samples.Forks/Elsa.Samples.Forks.csproj new file mode 100644 index 000000000..3996e6db8 --- /dev/null +++ b/src/samples/console/Elsa.Samples.Forks/Elsa.Samples.Forks.csproj @@ -0,0 +1,17 @@ + + + + Exe + net5.0 + false + + + + + + + + + + + diff --git a/src/samples/console/Elsa.Samples.Forks/Program.cs b/src/samples/console/Elsa.Samples.Forks/Program.cs new file mode 100644 index 000000000..cbfd28f42 --- /dev/null +++ b/src/samples/console/Elsa.Samples.Forks/Program.cs @@ -0,0 +1,27 @@ +using System.Threading.Tasks; +using Elsa.Samples.Forks.Workflows; +using Elsa.Services; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.Samples.Forks +{ + internal class Program + { + private static async Task Main() + { + // Create a service container with Elsa services. + var services = new ServiceCollection() + .AddElsa(options => options + .AddConsoleActivities() + .AddActivitiesFrom() + .AddWorkflowsFrom()) + .BuildServiceProvider(); + + // Get a workflow runner. + var workflowRunner = services.GetRequiredService(); + + // Run the workflow. + await workflowRunner.BuildAndStartWorkflowAsync(); + } + } +} \ No newline at end of file diff --git a/src/samples/console/Elsa.Samples.Forks/Workflows/SimpleForkWorkflow.cs b/src/samples/console/Elsa.Samples.Forks/Workflows/SimpleForkWorkflow.cs new file mode 100644 index 000000000..e62e9a098 --- /dev/null +++ b/src/samples/console/Elsa.Samples.Forks/Workflows/SimpleForkWorkflow.cs @@ -0,0 +1,30 @@ +using Elsa.Activities.Console; +using Elsa.Activities.ControlFlow; +using Elsa.Builders; + +namespace Elsa.Samples.Forks.Workflows +{ + /// + /// Demonstrates connecting outcomes of activities to other activities. + /// + public class SimpleForkWorkflow : IWorkflow + { + public void Build(IWorkflowBuilder builder) + { + var users = new[] { "john", "tom", "jenny" }; + + builder + .WriteLine("This demonstrates a simple workflow with switch.") + .WriteLine("Using switch we can branch a workflow.") + .Then(fork => fork.WithBranches(users), fork => + { + foreach (var user in users) + fork.When(user) + .WriteLine("A fork created for " + user) + .ThenNamed("Join1"); + }) + .Then(join => join.WithMode(Join.JoinMode.WaitAll)).WithName("Join1") + .WriteLine("Workflow finished."); + } + } +} \ No newline at end of file