From dbeda1961ff0a2102ffbed1e8e2efa8c42398ee4 Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Thu, 18 Nov 2021 14:59:58 +0100 Subject: [PATCH] Add composite activity output sample --- .../Activities/Sum.cs | 42 +++++++++++++++++++ ...grammaticCompositeActivitiesConsole.csproj | 8 ++-- .../Program.cs | 5 +-- .../Workflows/CompositionWorkflow.cs | 20 ++++++++- 4 files changed, 67 insertions(+), 8 deletions(-) create mode 100644 src/samples/console/Elsa.Samples.ProgrammaticCompositeActivitiesConsole/Activities/Sum.cs diff --git a/src/samples/console/Elsa.Samples.ProgrammaticCompositeActivitiesConsole/Activities/Sum.cs b/src/samples/console/Elsa.Samples.ProgrammaticCompositeActivitiesConsole/Activities/Sum.cs new file mode 100644 index 000000000..3a3e32da0 --- /dev/null +++ b/src/samples/console/Elsa.Samples.ProgrammaticCompositeActivitiesConsole/Activities/Sum.cs @@ -0,0 +1,42 @@ +using System; +using Elsa.Activities.ControlFlow; +using Elsa.Attributes; +using Elsa.Builders; +using Elsa.Services; + +namespace Elsa.Samples.ProgrammaticCompositeActivitiesConsole.Activities +{ + /// + /// Demonstrates accepting input properties and returning an output value from a composite activity. + /// + [Action(Outcomes = new[] { "Left", "Right" })] + public class Sum : CompositeActivity + { + [ActivityInput] + public int A + { + get => GetState(); + set => SetState(value); + } + + [ActivityInput] + public int B + { + get => GetState(); + set => SetState(value); + } + + [ActivityOutput] + public int Result + { + get => GetState(); + set => SetState(value); + } + + public override void Build(ICompositeActivityBuilder builder) + { + builder + .StartWith(c => Result = A + B); + } + } +} \ No newline at end of file diff --git a/src/samples/console/Elsa.Samples.ProgrammaticCompositeActivitiesConsole/Elsa.Samples.ProgrammaticCompositeActivitiesConsole.csproj b/src/samples/console/Elsa.Samples.ProgrammaticCompositeActivitiesConsole/Elsa.Samples.ProgrammaticCompositeActivitiesConsole.csproj index 2b23e71e4..721251245 100644 --- a/src/samples/console/Elsa.Samples.ProgrammaticCompositeActivitiesConsole/Elsa.Samples.ProgrammaticCompositeActivitiesConsole.csproj +++ b/src/samples/console/Elsa.Samples.ProgrammaticCompositeActivitiesConsole/Elsa.Samples.ProgrammaticCompositeActivitiesConsole.csproj @@ -7,13 +7,13 @@ - - - + + + - + diff --git a/src/samples/console/Elsa.Samples.ProgrammaticCompositeActivitiesConsole/Program.cs b/src/samples/console/Elsa.Samples.ProgrammaticCompositeActivitiesConsole/Program.cs index be59fbbbd..16934dfd8 100644 --- a/src/samples/console/Elsa.Samples.ProgrammaticCompositeActivitiesConsole/Program.cs +++ b/src/samples/console/Elsa.Samples.ProgrammaticCompositeActivitiesConsole/Program.cs @@ -16,9 +16,8 @@ namespace Elsa.Samples.ProgrammaticCompositeActivitiesConsole .AddLogging(logging => logging.AddConsole().SetMinimumLevel(LogLevel.Warning)) .AddElsa(options => options .AddConsoleActivities() - .AddActivity() - .AddActivity() - .AddWorkflow()) + .AddActivitiesFrom() + .AddWorkflowsFrom()) .BuildServiceProvider(); // Run startup actions (not needed when registering Elsa with a Host). diff --git a/src/samples/console/Elsa.Samples.ProgrammaticCompositeActivitiesConsole/Workflows/CompositionWorkflow.cs b/src/samples/console/Elsa.Samples.ProgrammaticCompositeActivitiesConsole/Workflows/CompositionWorkflow.cs index 455dc61bd..d4b1ed564 100644 --- a/src/samples/console/Elsa.Samples.ProgrammaticCompositeActivitiesConsole/Workflows/CompositionWorkflow.cs +++ b/src/samples/console/Elsa.Samples.ProgrammaticCompositeActivitiesConsole/Workflows/CompositionWorkflow.cs @@ -20,6 +20,24 @@ namespace Elsa.Samples.ProgrammaticCompositeActivitiesConsole.Workflows countDown.When("Right").WriteLine("Where going right!").ThenNamed("CountdownDemo"); }) .WriteLine("=Countdown demo=").WithName("CountdownDemo") - .Then(activity => activity.Set(x => x.Start, 10)); + .Then(activity => activity.Set(x => x.Start, 10)) + .WriteLine("=Sum demo=").WithName("SumDemo") + .WriteLine("Enter first value:") + .ReadLine().WithName("ValueA") + .WriteLine("Enter second value:") + .ReadLine().WithName("ValueB") + .Then(activity => activity + .Set(x => x.A, async context => + { + var a = (await context.WorkflowExecutionContext.GetNamedActivityPropertyAsync("ValueA", r => r.Output))!; + return int.Parse(a); + }) + .Set(x => x.B, async context => + { + var b = (await context.WorkflowExecutionContext.GetNamedActivityPropertyAsync("ValueB", r => r.Output))!; + return int.Parse(b); + }) + ).WithName("Sum1") + .WriteLine(async context => $"Sum: {await context.GetNamedActivityPropertyAsync("Sum1", x => x.Result)}"); } } \ No newline at end of file