diff --git a/Elsa.sln b/Elsa.sln index 6f040dccc..de210a50e 100644 --- a/Elsa.sln +++ b/Elsa.sln @@ -17,13 +17,13 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "solution", "solution", "{71 EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Abstractions", "src\core\Elsa.Abstractions\Elsa.Abstractions.csproj", "{3130C574-557C-4DA2-933E-AED7A9EBE48A}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Core", "Core", "{35F44BE9-13D0-417C-A01A-F0787BEE6DC3}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "core", "core", "{35F44BE9-13D0-417C-A01A-F0787BEE6DC3}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Activities.Console", "src\activities\Elsa.Activities.Console\Elsa.Activities.Console.csproj", "{B98B80CB-D3A3-437C-A61C-ED82C8C77B2F}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Activities.Http", "src\activities\Elsa.Activities.Http\Elsa.Activities.Http.csproj", "{1D63E1B4-2386-4BEC-9090-C3F3CBF25703}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Activities", "Activities", "{B43B546E-23F3-46E8-ACB7-D04F05CDA180}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "activities", "activities", "{B43B546E-23F3-46E8-ACB7-D04F05CDA180}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Activities.Email", "src\activities\Elsa.Activities.Email\Elsa.Activities.Email.csproj", "{D20FCB88-9DCA-49EA-9CC2-5B94DD935D30}" EndProject @@ -31,6 +31,14 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Activities.Timers", "s EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Activities.MassTransit", "src\activities\Elsa.Activities.MassTransit\Elsa.Activities.MassTransit.csproj", "{C4939482-9447-47D1-B6AF-E9F8C6323841}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "persistence", "persistence", "{76710230-AC6D-4E54-9A06-15F34C155118}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Persistence.YesSql", "src\persistence\Elsa.Persistence.YesSql\Elsa.Persistence.YesSql.csproj", "{4DB0741F-EAD9-4E37-862D-A1DA12462B7D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Activities.UserTask", "src\activities\Elsa.Activities.UserTask\Elsa.Activities.UserTask.csproj", "{BC0F57E2-AB64-4026-B6E3-E03D9133DB26}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.AutoMapper.Extensions", "src\core\Elsa.AutoMapper.Extensions\Elsa.AutoMapper.Extensions.csproj", "{6CEF6AFB-635D-4FB4-B9EC-0806DD95E1BC}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -65,6 +73,18 @@ Global {C4939482-9447-47D1-B6AF-E9F8C6323841}.Debug|Any CPU.Build.0 = Debug|Any CPU {C4939482-9447-47D1-B6AF-E9F8C6323841}.Release|Any CPU.ActiveCfg = Release|Any CPU {C4939482-9447-47D1-B6AF-E9F8C6323841}.Release|Any CPU.Build.0 = Release|Any CPU + {4DB0741F-EAD9-4E37-862D-A1DA12462B7D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4DB0741F-EAD9-4E37-862D-A1DA12462B7D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4DB0741F-EAD9-4E37-862D-A1DA12462B7D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4DB0741F-EAD9-4E37-862D-A1DA12462B7D}.Release|Any CPU.Build.0 = Release|Any CPU + {BC0F57E2-AB64-4026-B6E3-E03D9133DB26}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BC0F57E2-AB64-4026-B6E3-E03D9133DB26}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BC0F57E2-AB64-4026-B6E3-E03D9133DB26}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BC0F57E2-AB64-4026-B6E3-E03D9133DB26}.Release|Any CPU.Build.0 = Release|Any CPU + {6CEF6AFB-635D-4FB4-B9EC-0806DD95E1BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6CEF6AFB-635D-4FB4-B9EC-0806DD95E1BC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6CEF6AFB-635D-4FB4-B9EC-0806DD95E1BC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6CEF6AFB-635D-4FB4-B9EC-0806DD95E1BC}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -79,6 +99,10 @@ Global {D20FCB88-9DCA-49EA-9CC2-5B94DD935D30} = {B43B546E-23F3-46E8-ACB7-D04F05CDA180} {E4B71DC4-3E73-49C3-9B4E-CA13909F222D} = {B43B546E-23F3-46E8-ACB7-D04F05CDA180} {C4939482-9447-47D1-B6AF-E9F8C6323841} = {B43B546E-23F3-46E8-ACB7-D04F05CDA180} + {76710230-AC6D-4E54-9A06-15F34C155118} = {DA71CDAA-8DD3-4D5F-9FBD-8E4B37A2D925} + {4DB0741F-EAD9-4E37-862D-A1DA12462B7D} = {76710230-AC6D-4E54-9A06-15F34C155118} + {BC0F57E2-AB64-4026-B6E3-E03D9133DB26} = {B43B546E-23F3-46E8-ACB7-D04F05CDA180} + {6CEF6AFB-635D-4FB4-B9EC-0806DD95E1BC} = {35F44BE9-13D0-417C-A01A-F0787BEE6DC3} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {8B0975FD-7050-48B0-88C5-48C33378E158} diff --git a/Samples.sln b/Samples.sln index 947951563..3aae029e0 100644 --- a/Samples.sln +++ b/Samples.sln @@ -17,13 +17,13 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "solution", "solution", "{71 EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Abstractions", "src\core\Elsa.Abstractions\Elsa.Abstractions.csproj", "{3130C574-557C-4DA2-933E-AED7A9EBE48A}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Core", "Core", "{35F44BE9-13D0-417C-A01A-F0787BEE6DC3}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "core", "core", "{35F44BE9-13D0-417C-A01A-F0787BEE6DC3}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Activities.Console", "src\activities\Elsa.Activities.Console\Elsa.Activities.Console.csproj", "{B98B80CB-D3A3-437C-A61C-ED82C8C77B2F}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Activities.Http", "src\activities\Elsa.Activities.Http\Elsa.Activities.Http.csproj", "{1D63E1B4-2386-4BEC-9090-C3F3CBF25703}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Activities", "Activities", "{B43B546E-23F3-46E8-ACB7-D04F05CDA180}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "activities", "activities", "{B43B546E-23F3-46E8-ACB7-D04F05CDA180}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Activities.Email", "src\activities\Elsa.Activities.Email\Elsa.Activities.Email.csproj", "{D20FCB88-9DCA-49EA-9CC2-5B94DD935D30}" EndProject @@ -51,7 +51,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sample08", "samples\Sample0 EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sample09", "samples\Sample09\Sample09.csproj", "{E8622C16-D80B-46A7-99D4-B939B20FBFD6}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Persistence", "Persistence", "{600C4AE0-0585-4181-9CEC-2BB43430C713}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "persistence", "persistence", "{600C4AE0-0585-4181-9CEC-2BB43430C713}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Persistence.YesSql", "src\persistence\Elsa.Persistence.YesSql\Elsa.Persistence.YesSql.csproj", "{905C1067-2119-443D-B5FE-DA8E027FAD62}" EndProject @@ -61,6 +61,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.AutoMapper.Extensions" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sample11", "samples\Sample11\Sample11.csproj", "{0C3BB425-2FED-4ADF-8DBE-D68DF0CA5A41}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Activities.UserTask", "src\activities\Elsa.Activities.UserTask\Elsa.Activities.UserTask.csproj", "{823F80B6-E241-43F7-83BD-29FBB58A77F9}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sample12", "samples\Sample12\Sample12.csproj", "{D0F68FBB-17C6-421E-B8AE-AAAFE111BF0B}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -147,6 +151,14 @@ Global {0C3BB425-2FED-4ADF-8DBE-D68DF0CA5A41}.Debug|Any CPU.Build.0 = Debug|Any CPU {0C3BB425-2FED-4ADF-8DBE-D68DF0CA5A41}.Release|Any CPU.ActiveCfg = Release|Any CPU {0C3BB425-2FED-4ADF-8DBE-D68DF0CA5A41}.Release|Any CPU.Build.0 = Release|Any CPU + {823F80B6-E241-43F7-83BD-29FBB58A77F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {823F80B6-E241-43F7-83BD-29FBB58A77F9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {823F80B6-E241-43F7-83BD-29FBB58A77F9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {823F80B6-E241-43F7-83BD-29FBB58A77F9}.Release|Any CPU.Build.0 = Release|Any CPU + {D0F68FBB-17C6-421E-B8AE-AAAFE111BF0B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D0F68FBB-17C6-421E-B8AE-AAAFE111BF0B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D0F68FBB-17C6-421E-B8AE-AAAFE111BF0B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D0F68FBB-17C6-421E-B8AE-AAAFE111BF0B}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -175,6 +187,8 @@ Global {E0076858-353F-4302-9690-920204E38BF6} = {5E5E1E84-DDBC-40D6-B891-0D563A15A44A} {F7633BE5-0335-4148-8FB7-EAED9A2276A2} = {35F44BE9-13D0-417C-A01A-F0787BEE6DC3} {0C3BB425-2FED-4ADF-8DBE-D68DF0CA5A41} = {5E5E1E84-DDBC-40D6-B891-0D563A15A44A} + {823F80B6-E241-43F7-83BD-29FBB58A77F9} = {B43B546E-23F3-46E8-ACB7-D04F05CDA180} + {D0F68FBB-17C6-421E-B8AE-AAAFE111BF0B} = {5E5E1E84-DDBC-40D6-B891-0D563A15A44A} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {8B0975FD-7050-48B0-88C5-48C33378E158} diff --git a/samples/Sample06/HelloWorldWorkflow.cs b/samples/Sample06/HelloWorldWorkflow.cs index 64bd596e1..6d5597096 100644 --- a/samples/Sample06/HelloWorldWorkflow.cs +++ b/samples/Sample06/HelloWorldWorkflow.cs @@ -13,7 +13,7 @@ namespace Sample06 { builder .StartWith(activity => activity.Path = new Uri("/hello-world", UriKind.RelativeOrAbsolute)) - .Then( + .Then( activity => { activity.Content = new PlainTextExpression("

Hello World!

Elsa says hi :)

"); diff --git a/samples/Sample07/DocumentApprovalWorkflow.cs b/samples/Sample07/DocumentApprovalWorkflow.cs index 54b5d570d..4767d1466 100644 --- a/samples/Sample07/DocumentApprovalWorkflow.cs +++ b/samples/Sample07/DocumentApprovalWorkflow.cs @@ -44,7 +44,7 @@ namespace Sample07 ); } ) - .Then( + .Then( activity => { activity.Content = new PlainTextExpression("

Request for Approval Sent

Your document has been received and will be reviewed shortly.

"); diff --git a/samples/Sample08/Workflows/CreateOrderWorkflow.cs b/samples/Sample08/Workflows/CreateOrderWorkflow.cs index 0def0c745..858c7d207 100644 --- a/samples/Sample08/Workflows/CreateOrderWorkflow.cs +++ b/samples/Sample08/Workflows/CreateOrderWorkflow.cs @@ -45,7 +45,7 @@ namespace Sample08.Workflows { fork .When("Write-Response") - .Then( + .Then( activity => { activity.Content = new PlainTextExpression("

Order Received

Your order has been received. Waiting for shipment.

"); diff --git a/samples/Sample11/Program.cs b/samples/Sample11/Program.cs index b7b2996d5..a4af29acc 100644 --- a/samples/Sample11/Program.cs +++ b/samples/Sample11/Program.cs @@ -6,7 +6,6 @@ using Elsa.Activities.Primitives; using Elsa.Extensions; using Elsa.Models; using Elsa.Persistence.Memory; -using Elsa.Runtime; using Elsa.Services; using Microsoft.Extensions.DependencyInjection; @@ -54,7 +53,6 @@ namespace Sample11 { return new ServiceCollection() .AddWorkflows() - .AddStartupRunner() .AddConsoleActivities() .AddMemoryWorkflowDefinitionStore() .AddMemoryWorkflowInstanceStore() diff --git a/samples/Sample12/Program.cs b/samples/Sample12/Program.cs new file mode 100644 index 000000000..b71bdee73 --- /dev/null +++ b/samples/Sample12/Program.cs @@ -0,0 +1,56 @@ +using System; +using System.Linq; +using System.Threading.Tasks; +using Elsa.Activities.Console.Extensions; +using Elsa.Activities.Primitives; +using Elsa.Activities.UserTask.Extensions; +using Elsa.Extensions; +using Elsa.Models; +using Elsa.Persistence.Memory; +using Elsa.Runtime; +using Elsa.Services; +using Elsa.Services.Extensions; +using Microsoft.Extensions.DependencyInjection; + +namespace Sample12 +{ + /// + /// Demonstrates workflow correlation. + /// + public class Program + { + public static async Task Main(string[] args) + { + var services = BuildServices(); + var registry = services.GetService(); + var workflowDefinition = registry.RegisterWorkflow(); + var invoker = services.GetRequiredService(); + + // Invoke the workflow. + var executionContext = await invoker.InvokeAsync(workflowDefinition); + + do + { + // Workflow is now halted on the user task activity. Ask user for input: + Console.WriteLine("What action will you take? Choose one of: Accept, Reject, Needs Work"); + var userAction = Console.ReadLine(); + + // Resume the workflow with the received stimulus. + var blockingActivities = executionContext.Workflow.BlockingActivities.Select(x => x.Id); + executionContext = await invoker.ResumeAsync(executionContext.Workflow.ToInstance(), new Variables { ["UserAction"] = userAction }, blockingActivities); + + } while (executionContext.Workflow.IsHalted()); + } + + private static IServiceProvider BuildServices() + { + return new ServiceCollection() + .AddWorkflows() + .AddConsoleActivities() + .AddUserTaskActivities() + .AddMemoryWorkflowDefinitionStore() + .AddMemoryWorkflowInstanceStore() + .BuildServiceProvider(); + } + } +} \ No newline at end of file diff --git a/samples/Sample12/Sample12.csproj b/samples/Sample12/Sample12.csproj new file mode 100644 index 000000000..98c45d167 --- /dev/null +++ b/samples/Sample12/Sample12.csproj @@ -0,0 +1,14 @@ + + + + Exe + netcoreapp2.2 + + + + + + + + + diff --git a/samples/Sample12/UserTaskWorkflow.cs b/samples/Sample12/UserTaskWorkflow.cs new file mode 100644 index 000000000..5792ca25a --- /dev/null +++ b/samples/Sample12/UserTaskWorkflow.cs @@ -0,0 +1,38 @@ +using Elsa.Activities.Console.Activities; +using Elsa.Activities.Primitives; +using Elsa.Activities.UserTask.Activities; +using Elsa.Expressions; +using Elsa.Services; +using Elsa.Services.Models; + +namespace Sample12 +{ + public class UserTaskWorkflow : IWorkflow + { + public void Build(IWorkflowBuilder builder) + { + builder + .StartWith(activity => activity.TextExpression = new PlainTextExpression("Workflow started. Waiting for user action.")) + .Then( + activity => activity.Actions = new[] { "Accept", "Reject", "Needs Work" }, + userTask => + { + userTask + .When("Accept") + .Then(activity => activity.TextExpression = new PlainTextExpression("Great! Your work has been accepted.")) + .Then("Exit"); + + userTask.When("Reject") + .Then(activity => activity.TextExpression = new PlainTextExpression("Sorry! Your work has been rejected.")) + .Then("Exit"); + + userTask.When("Needs Work") + .Then(activity => activity.TextExpression = new PlainTextExpression("So close! Your work needs a little bit more work.")) + .Then("WaitUser"); + }, + "WaitUser" + ) + .Add(activity => activity.TextExpression = new PlainTextExpression("Workflow finished."), "Exit"); + } + } +} \ No newline at end of file diff --git a/src/activities/Elsa.Activities.Console/Elsa.Activities.Console.csproj b/src/activities/Elsa.Activities.Console/Elsa.Activities.Console.csproj index 4ad48a897..481f8e48b 100644 --- a/src/activities/Elsa.Activities.Console/Elsa.Activities.Console.csproj +++ b/src/activities/Elsa.Activities.Console/Elsa.Activities.Console.csproj @@ -7,8 +7,8 @@ Sipke Schoorstra Elsa is a set of workflowing libraries and tools to enable super-fast workflowing capabilities in any .NET Core application. 2019 - https://github.com/sfmskywalker/Elsa - https://github.com/sfmskywalker/Elsa + https://github.com/elsa-workflows/elsa-core + https://github.com/elsa-workflows/elsa-core GitHub elsa, workflows, orchard diff --git a/src/activities/Elsa.Activities.Email/Elsa.Activities.Email.csproj b/src/activities/Elsa.Activities.Email/Elsa.Activities.Email.csproj index 4ad48a897..481f8e48b 100644 --- a/src/activities/Elsa.Activities.Email/Elsa.Activities.Email.csproj +++ b/src/activities/Elsa.Activities.Email/Elsa.Activities.Email.csproj @@ -7,8 +7,8 @@ Sipke Schoorstra Elsa is a set of workflowing libraries and tools to enable super-fast workflowing capabilities in any .NET Core application. 2019 - https://github.com/sfmskywalker/Elsa - https://github.com/sfmskywalker/Elsa + https://github.com/elsa-workflows/elsa-core + https://github.com/elsa-workflows/elsa-core GitHub elsa, workflows, orchard diff --git a/src/activities/Elsa.Activities.Http/Activities/HttpResponseTask.cs b/src/activities/Elsa.Activities.Http/Activities/HttpResponseAction.cs similarity index 92% rename from src/activities/Elsa.Activities.Http/Activities/HttpResponseTask.cs rename to src/activities/Elsa.Activities.Http/Activities/HttpResponseAction.cs index 6d9cd5ed9..573a2ceb2 100644 --- a/src/activities/Elsa.Activities.Http/Activities/HttpResponseTask.cs +++ b/src/activities/Elsa.Activities.Http/Activities/HttpResponseAction.cs @@ -13,12 +13,12 @@ using Microsoft.AspNetCore.Http; namespace Elsa.Activities.Http.Activities { - public class HttpResponseTask : Activity + public class HttpResponseAction : Activity { private readonly IWorkflowExpressionEvaluator expressionEvaluator; private readonly IHttpContextAccessor httpContextAccessor; - public HttpResponseTask(IWorkflowExpressionEvaluator expressionEvaluator, IHttpContextAccessor httpContextAccessor) + public HttpResponseAction(IWorkflowExpressionEvaluator expressionEvaluator, IHttpContextAccessor httpContextAccessor) { this.expressionEvaluator = expressionEvaluator; this.httpContextAccessor = httpContextAccessor; diff --git a/src/activities/Elsa.Activities.Http/Elsa.Activities.Http.csproj b/src/activities/Elsa.Activities.Http/Elsa.Activities.Http.csproj index f29b9fd91..a5057d360 100644 --- a/src/activities/Elsa.Activities.Http/Elsa.Activities.Http.csproj +++ b/src/activities/Elsa.Activities.Http/Elsa.Activities.Http.csproj @@ -7,8 +7,8 @@ Sipke Schoorstra Elsa is a set of workflowing libraries and tools to enable super-fast workflowing capabilities in any .NET Core application. 2019 - https://github.com/sfmskywalker/Elsa - https://github.com/sfmskywalker/Elsa + https://github.com/elsa-workflows/elsa-core + https://github.com/elsa-workflows/elsa-core GitHub elsa, workflows, orchard diff --git a/src/activities/Elsa.Activities.Http/Extensions/ServiceCollectionExtensions.cs b/src/activities/Elsa.Activities.Http/Extensions/ServiceCollectionExtensions.cs index 7557513c5..5b2884f9b 100644 --- a/src/activities/Elsa.Activities.Http/Extensions/ServiceCollectionExtensions.cs +++ b/src/activities/Elsa.Activities.Http/Extensions/ServiceCollectionExtensions.cs @@ -21,7 +21,7 @@ namespace Elsa.Activities.Http.Extensions services .AddActivity() - .AddActivity() + .AddActivity() .AddActivity(); services diff --git a/src/activities/Elsa.Activities.MassTransit/Elsa.Activities.MassTransit.csproj b/src/activities/Elsa.Activities.MassTransit/Elsa.Activities.MassTransit.csproj index 66fdfc1d6..c405ee8f3 100644 --- a/src/activities/Elsa.Activities.MassTransit/Elsa.Activities.MassTransit.csproj +++ b/src/activities/Elsa.Activities.MassTransit/Elsa.Activities.MassTransit.csproj @@ -7,8 +7,8 @@ Sipke Schoorstra Elsa is a set of workflowing libraries and tools to enable super-fast workflowing capabilities in any .NET Core application. 2019 - https://github.com/sfmskywalker/Elsa - https://github.com/sfmskywalker/Elsa + https://github.com/elsa-workflows/elsa-core + https://github.com/elsa-workflows/elsa-core GitHub elsa, workflows, orchard diff --git a/src/activities/Elsa.Activities.Timers/Elsa.Activities.Timers.csproj b/src/activities/Elsa.Activities.Timers/Elsa.Activities.Timers.csproj index c58c56c9c..1f8353967 100644 --- a/src/activities/Elsa.Activities.Timers/Elsa.Activities.Timers.csproj +++ b/src/activities/Elsa.Activities.Timers/Elsa.Activities.Timers.csproj @@ -7,8 +7,8 @@ Sipke Schoorstra Elsa is a set of workflowing libraries and tools to enable super-fast workflowing capabilities in any .NET Core application. 2019 - https://github.com/sfmskywalker/Elsa - https://github.com/sfmskywalker/Elsa + https://github.com/elsa-workflows/elsa-core + https://github.com/elsa-workflows/elsa-core GitHub elsa, workflows, orchard diff --git a/src/activities/Elsa.Activities.UserTask/Activities/UserTask.cs b/src/activities/Elsa.Activities.UserTask/Activities/UserTask.cs new file mode 100644 index 000000000..ec73050c1 --- /dev/null +++ b/src/activities/Elsa.Activities.UserTask/Activities/UserTask.cs @@ -0,0 +1,40 @@ +using System; +using System.Linq; +using Elsa.Results; +using Elsa.Services; +using Elsa.Services.Models; + +namespace Elsa.Activities.UserTask.Activities +{ + /// + /// Stores a set of possible user actions and halts the workflow until one of the actions has been performed. + /// + public class UserTask : Activity + { + public string[] Actions + { + get => GetState(() => new string[0]); + set => SetState(value); + } + + protected override bool OnCanExecute(WorkflowExecutionContext context) + { + var userAction = GetUserAction(context); + + return Actions.Contains(userAction, StringComparer.OrdinalIgnoreCase); + } + + protected override ActivityExecutionResult OnExecute(WorkflowExecutionContext context) + { + return Halt(true); + } + + protected override ActivityExecutionResult OnResume(WorkflowExecutionContext context) + { + var userAction = GetUserAction(context); + return Outcome(userAction); + } + + private string GetUserAction(WorkflowExecutionContext context) => (string) context.Workflow.Input.GetVariable("UserAction"); + } +} \ No newline at end of file diff --git a/src/activities/Elsa.Activities.UserTask/Elsa.Activities.UserTask.csproj b/src/activities/Elsa.Activities.UserTask/Elsa.Activities.UserTask.csproj new file mode 100644 index 000000000..481f8e48b --- /dev/null +++ b/src/activities/Elsa.Activities.UserTask/Elsa.Activities.UserTask.csproj @@ -0,0 +1,20 @@ + + + + netstandard2.0 + 1.0.0 + latest + Sipke Schoorstra + Elsa is a set of workflowing libraries and tools to enable super-fast workflowing capabilities in any .NET Core application. + 2019 + https://github.com/elsa-workflows/elsa-core + https://github.com/elsa-workflows/elsa-core + GitHub + elsa, workflows, orchard + + + + + + + diff --git a/src/activities/Elsa.Activities.UserTask/Extensions/ServiceCollectionExtensions.cs b/src/activities/Elsa.Activities.UserTask/Extensions/ServiceCollectionExtensions.cs new file mode 100644 index 000000000..4c8fd6a74 --- /dev/null +++ b/src/activities/Elsa.Activities.UserTask/Extensions/ServiceCollectionExtensions.cs @@ -0,0 +1,16 @@ +using Elsa.Extensions; +using Microsoft.Extensions.DependencyInjection; + +namespace Elsa.Activities.UserTask.Extensions +{ + using UserTask = Elsa.Activities.UserTask.Activities.UserTask; + + public static class ServiceCollectionExtensions + { + public static IServiceCollection AddUserTaskActivities(this IServiceCollection services) + { + return services + .AddActivity(); + } + } +} \ No newline at end of file diff --git a/src/core/Elsa.Abstractions/Elsa.Abstractions.csproj b/src/core/Elsa.Abstractions/Elsa.Abstractions.csproj index b46e9f6d9..fdb9dbb2c 100644 --- a/src/core/Elsa.Abstractions/Elsa.Abstractions.csproj +++ b/src/core/Elsa.Abstractions/Elsa.Abstractions.csproj @@ -8,8 +8,8 @@ Sipke Schoorstra Elsa is a set of workflowing libraries and tools to enable super-fast workflowing capabilities in any .NET Core application. 2019 - https://github.com/sfmskywalker/Elsa - https://github.com/sfmskywalker/Elsa + https://github.com/elsa-workflows/elsa-core + https://github.com/elsa-workflows/elsa-core GitHub elsa, workflows, orchard diff --git a/src/core/Elsa.Core/Elsa.Core.csproj b/src/core/Elsa.Core/Elsa.Core.csproj index 4207b5240..6c94c2cf2 100644 --- a/src/core/Elsa.Core/Elsa.Core.csproj +++ b/src/core/Elsa.Core/Elsa.Core.csproj @@ -8,8 +8,8 @@ Sipke Schoorstra Elsa is a set of workflowing libraries and tools to enable super-fast workflowing capabilities in any .NET Core application. 2019 - https://github.com/sfmskywalker/Elsa - https://github.com/sfmskywalker/Elsa + https://github.com/elsa-workflows/elsa-core + https://github.com/elsa-workflows/elsa-core GitHub elsa, workflows, orchard