diff --git a/Elsa.sln b/Elsa.sln index a8f878957..5b77b51cf 100644 --- a/Elsa.sln +++ b/Elsa.sln @@ -273,6 +273,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Persistence.EntityFram EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.SendHttp", "src\samples\aspnet\Elsa.Samples.SendHttp\Elsa.Samples.SendHttp.csproj", "{775EFD59-F99C-4D38-B54E-9734C9D9649A}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.CustomActivityOutcomes", "src\samples\console\Elsa.Samples.CustomActivityOutcomes\Elsa.Samples.CustomActivityOutcomes.csproj", "{30A9B140-14F5-4D00-84ED-1447F96D13C8}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -651,6 +653,10 @@ Global {775EFD59-F99C-4D38-B54E-9734C9D9649A}.Debug|Any CPU.Build.0 = Debug|Any CPU {775EFD59-F99C-4D38-B54E-9734C9D9649A}.Release|Any CPU.ActiveCfg = Release|Any CPU {775EFD59-F99C-4D38-B54E-9734C9D9649A}.Release|Any CPU.Build.0 = Release|Any CPU + {30A9B140-14F5-4D00-84ED-1447F96D13C8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {30A9B140-14F5-4D00-84ED-1447F96D13C8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {30A9B140-14F5-4D00-84ED-1447F96D13C8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {30A9B140-14F5-4D00-84ED-1447F96D13C8}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -778,6 +784,7 @@ Global {3DF05CFC-AC77-489F-9A42-C4FDB599AA69} = {8B6B40A8-DF21-4CD2-BABD-474B79D0C3AF} {D55BC08B-CA82-478A-99F7-EDE90AC33160} = {C865B0FD-E505-48F0-BFAF-0D4D7C1B5CA1} {775EFD59-F99C-4D38-B54E-9734C9D9649A} = {22E75696-6FE9-436A-9097-EE21C603F818} + {30A9B140-14F5-4D00-84ED-1447F96D13C8} = {FC9F520F-BA51-4AD2-BFEE-EF787798E734} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {8B0975FD-7050-48B0-88C5-48C33378E158} diff --git a/src/samples/console/Elsa.Samples.CustomActivityOutcomes/Activities/TrySomething.cs b/src/samples/console/Elsa.Samples.CustomActivityOutcomes/Activities/TrySomething.cs new file mode 100644 index 000000000..747a8d106 --- /dev/null +++ b/src/samples/console/Elsa.Samples.CustomActivityOutcomes/Activities/TrySomething.cs @@ -0,0 +1,23 @@ +using System; +using Elsa.ActivityResults; +using Elsa.Attributes; +using Elsa.Services; + +namespace Elsa.Samples.CustomActivityOutcomes.Activities +{ + [Action(Description = "Tries to perform some work. Returns Done when successful, Failed otherwise.", Outcomes = new[] { OutcomeNames.Done, "Failed" })] + public class TrySomething : Activity + { + private readonly Random _random; + + public TrySomething() => _random = new Random(); + + protected override IActivityExecutionResult OnExecute() + { + // 50% chance of either returning Done or Failed. + var value = _random.Next(0, 2); + var outcome = value == 1 ? OutcomeNames.Done : "Failed"; + return Outcome(outcome); + } + } +} \ No newline at end of file diff --git a/src/samples/console/Elsa.Samples.CustomActivityOutcomes/Elsa.Samples.CustomActivityOutcomes.csproj b/src/samples/console/Elsa.Samples.CustomActivityOutcomes/Elsa.Samples.CustomActivityOutcomes.csproj new file mode 100644 index 000000000..0af3278a7 --- /dev/null +++ b/src/samples/console/Elsa.Samples.CustomActivityOutcomes/Elsa.Samples.CustomActivityOutcomes.csproj @@ -0,0 +1,12 @@ + + + + Exe + net5.0 + + + + + + + diff --git a/src/samples/console/Elsa.Samples.CustomActivityOutcomes/Program.cs b/src/samples/console/Elsa.Samples.CustomActivityOutcomes/Program.cs new file mode 100644 index 000000000..573648c9f --- /dev/null +++ b/src/samples/console/Elsa.Samples.CustomActivityOutcomes/Program.cs @@ -0,0 +1,27 @@ +using System.Threading.Tasks; +using Elsa.Samples.CustomActivityOutcomes.Workflows; +using Elsa.Services; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.Samples.CustomActivityOutcomes +{ + 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.CustomActivityOutcomes/Workflows/SampleWorkflow.cs b/src/samples/console/Elsa.Samples.CustomActivityOutcomes/Workflows/SampleWorkflow.cs new file mode 100644 index 000000000..8841ef098 --- /dev/null +++ b/src/samples/console/Elsa.Samples.CustomActivityOutcomes/Workflows/SampleWorkflow.cs @@ -0,0 +1,39 @@ +using System; +using Elsa.Activities.Console; +using Elsa.Activities.ControlFlow; +using Elsa.Builders; +using Elsa.Samples.CustomActivityOutcomes.Activities; + +namespace Elsa.Samples.CustomActivityOutcomes.Workflows +{ + /// + /// Demonstrates connecting outcomes of activities to other activities. + /// + public class SampleWorkflow : IWorkflow + { + public void Build(IWorkflowBuilder builder) + { + builder + .WriteLine("Trying something.").WithName("Start") + .Then(trySomething => + { + trySomething + .When(OutcomeNames.Done) + .WriteLine("Success!") + .ThenNamed("PromptTryAgain"); + + trySomething + .When("Failed") + .WriteLine("That didn't work. Better luck next time.") + .ThenNamed("PromptTryAgain"); + }) + .Add(x => x.WithText("Try again? (y/n)")).WithName("PromptTryAgain") + .ReadLine() + .If(context => string.Equals(context.GetInput(), "y", StringComparison.OrdinalIgnoreCase), @if => + { + @if.When(OutcomeNames.True).ThenNamed("Start"); + @if.When(OutcomeNames.False).WriteLine("See you around!"); + }); + } + } +} \ No newline at end of file