diff --git a/src/activities/Elsa.Activities.Console/Activities/ReadLine.cs b/src/activities/Elsa.Activities.Console/Activities/ReadLine.cs index 9df718795..6bf1a7f43 100644 --- a/src/activities/Elsa.Activities.Console/Activities/ReadLine.cs +++ b/src/activities/Elsa.Activities.Console/Activities/ReadLine.cs @@ -24,7 +24,7 @@ namespace Elsa.Activities.Console.Activities { private readonly TextReader input; - public ReadLine() : this(System.Console.In) + public ReadLine() { } @@ -53,7 +53,7 @@ namespace Elsa.Activities.Console.Activities protected override ActivityExecutionResult OnResume(WorkflowExecutionContext context) { - var receivedInput = (string) context.Workflow.Input[VariableName]; + var receivedInput = (string) context.Workflow.Input["ReadLineInput"]; return Execute(context, receivedInput); } diff --git a/src/core/Elsa.Abstractions/Services/IActivityBuilder.cs b/src/core/Elsa.Abstractions/Services/IActivityBuilder.cs index f97f0c703..d579fc7b5 100644 --- a/src/core/Elsa.Abstractions/Services/IActivityBuilder.cs +++ b/src/core/Elsa.Abstractions/Services/IActivityBuilder.cs @@ -1,4 +1,5 @@ using System; +using System.Linq.Expressions; using Elsa.Models; using Elsa.Services.Models; @@ -12,6 +13,7 @@ namespace Elsa.Services IActivityBuilder Add(Action setup = default, string id = null) where T : class, IActivity; IOutcomeBuilder When(string outcome); IActivityBuilder Then(Action setup = null, Action branch = null, string id = null) where T : class, IActivity; + IActivityBuilder WithId(string id); IWorkflowBuilder Then(string activityId); WorkflowDefinitionVersion Build(); ActivityDefinition BuildActivity(); diff --git a/src/core/Elsa.Core/WorkflowBuilders/ActivityBuilder.cs b/src/core/Elsa.Core/WorkflowBuilders/ActivityBuilder.cs index 262331a7a..e91129e6a 100644 --- a/src/core/Elsa.Core/WorkflowBuilders/ActivityBuilder.cs +++ b/src/core/Elsa.Core/WorkflowBuilders/ActivityBuilder.cs @@ -1,5 +1,6 @@ using System; using System.Linq; +using System.Linq.Expressions; using Elsa.Models; using Elsa.Services; using Elsa.Services.Models; @@ -40,6 +41,12 @@ namespace Elsa.WorkflowBuilders return activityBuilder; } + public IActivityBuilder WithId(string id) + { + Id = id; + return this; + } + public IWorkflowBuilder Then(string activityId) { WorkflowBuilder.Connect( diff --git a/src/samples/Sample17/Activities/CreateDocument.cs b/src/samples/Sample17/Activities/CreatePerson.cs similarity index 56% rename from src/samples/Sample17/Activities/CreateDocument.cs rename to src/samples/Sample17/Activities/CreatePerson.cs index 7a2ed8bf5..853f54588 100644 --- a/src/samples/Sample17/Activities/CreateDocument.cs +++ b/src/samples/Sample17/Activities/CreatePerson.cs @@ -9,29 +9,36 @@ using Sample17.Models; namespace Sample17.Activities { - public class CreateDocument : Activity + public class CreatePerson : Activity { private readonly IWorkflowExpressionEvaluator expressionEvaluator; - public CreateDocument(IWorkflowExpressionEvaluator expressionEvaluator) + public CreatePerson(IWorkflowExpressionEvaluator expressionEvaluator) { this.expressionEvaluator = expressionEvaluator; } - + public WorkflowExpression TitleExpression { get => GetState>(); set => SetState(value); } + public WorkflowExpression AgeExpression + { + get => GetState>(); + set => SetState(value); + } + protected override async Task OnExecuteAsync( WorkflowExecutionContext context, CancellationToken cancellationToken) { - var title = await expressionEvaluator.EvaluateAsync(TitleExpression, context, cancellationToken); - var document = new Document { Title = title}; + var name = await expressionEvaluator.EvaluateAsync(TitleExpression, context, cancellationToken); + var age = await expressionEvaluator.EvaluateAsync(AgeExpression, context, cancellationToken); + var person = new Person { FullName = name, Age = age }; - Output["Document"] = document; + Output["Person"] = person; return Done(); } } diff --git a/src/samples/Sample17/CreateDocumentWorkflow.cs b/src/samples/Sample17/CreateDocumentWorkflow.cs deleted file mode 100644 index 7c7886078..000000000 --- a/src/samples/Sample17/CreateDocumentWorkflow.cs +++ /dev/null @@ -1,27 +0,0 @@ -using Elsa.Activities.Console.Activities; -using Elsa.Activities.Primitives; -using Elsa.Expressions; -using Elsa.Services; -using Elsa.Services.Models; -using Sample17.Activities; -using Sample17.Models; - -namespace Sample17 -{ - public class CreateDocumentWorkflow : IWorkflow - { - public void Build(IWorkflowBuilder builder) - { - builder - .StartWith(x => x.TextExpression = new LiteralExpression("Enter a title")) - .Then(id: "DocumentTitleInput") - .Then(x => x.TitleExpression = new JavaScriptExpression("DocumentTitleInput.Input"), id: "CreateDocument") - .Then(x => - { - x.VariableName = "Document"; - x.ValueExpression = new JavaScriptExpression("CreateDocument.Document"); - }) - .Then(x => x.TextExpression = new JavaScriptExpression("`A new document was created with title \"${Document.Title}\"`")); - } - } -} \ No newline at end of file diff --git a/src/samples/Sample17/CreatePersonWorkflow.cs b/src/samples/Sample17/CreatePersonWorkflow.cs new file mode 100644 index 000000000..af843d04f --- /dev/null +++ b/src/samples/Sample17/CreatePersonWorkflow.cs @@ -0,0 +1,41 @@ +using Elsa.Activities.Console.Activities; +using Elsa.Activities.Primitives; +using Elsa.Expressions; +using Elsa.Services; +using Elsa.Services.Models; +using Sample17.Activities; +using Sample17.Models; + +namespace Sample17 +{ + public class CreatePersonWorkflow : IWorkflow + { + public void Build(IWorkflowBuilder builder) + { + builder + .StartWith(x => x.TextExpression = new LiteralExpression("Enter name:")) + .Then().WithId("NameInput") + .Then(x => x.TextExpression = new LiteralExpression("Enter age:")) + .Then().WithId("AgeInput") + .Then( + x => + { + x.TitleExpression = new JavaScriptExpression("NameInput.Input"); + x.AgeExpression = new JavaScriptExpression("AgeInput.Input"); + }).WithId("CreatePerson") + .Then( + x => + { + x.VariableName = "Person"; + x.ValueExpression = new JavaScriptExpression("CreatePerson.Person"); + }) + .Then( + x => + { + x.VariableName = "Age"; + x.ValueExpression = new JavaScriptExpression("CreatePerson.Person.Age"); + }) + .Then(x => x.TextExpression = new JavaScriptExpression("`A new person was created with name \"${Person.FullName}\" and age \"${Age}\"`")); + } + } +} \ No newline at end of file diff --git a/src/samples/Sample17/Models/Document.cs b/src/samples/Sample17/Models/Document.cs deleted file mode 100644 index 4044442db..000000000 --- a/src/samples/Sample17/Models/Document.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace Sample17.Models -{ - public class Document - { - public string Title { get; set; } - - public override string ToString() => Title; - } -} \ No newline at end of file diff --git a/src/samples/Sample17/Models/Person.cs b/src/samples/Sample17/Models/Person.cs new file mode 100644 index 000000000..c88f2ea3b --- /dev/null +++ b/src/samples/Sample17/Models/Person.cs @@ -0,0 +1,10 @@ +namespace Sample17.Models +{ + public class Person + { + public string FullName { get; set; } + public int Age { get; set; } + + public override string ToString() => FullName; + } +} \ No newline at end of file diff --git a/src/samples/Sample17/Program.cs b/src/samples/Sample17/Program.cs index 5a2d3a156..11ab1fe04 100644 --- a/src/samples/Sample17/Program.cs +++ b/src/samples/Sample17/Program.cs @@ -14,8 +14,8 @@ namespace Sample17 { var services = BuildServices(); var workflowInvoker = services.GetRequiredService(); - var workflow = await workflowInvoker.StartAsync(); - var document = workflow.CurrentScope.GetVariable("Document"); + var workflowExecutionContext = await workflowInvoker.StartAsync(); + var document = workflowExecutionContext.CurrentScope.GetVariable("Document"); Console.WriteLine("Created document: {0}", document); } @@ -24,9 +24,10 @@ namespace Sample17 { return new ServiceCollection() .AddWorkflows() - .AddWorkflow() + .AddWorkflow() .AddConsoleActivities() - .AddActivity() + .AddActivity() + .AddSingleton(Console.In) .BuildServiceProvider(); } }