diff --git a/Samples.sln b/Samples.sln new file mode 100644 index 000000000..27aa835ff --- /dev/null +++ b/Samples.sln @@ -0,0 +1,151 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.28010.2036 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Core", "src\core\Elsa.Core\Elsa.Core.csproj", "{300EE2D5-54C5-46F2-AD03-BB43589EA074}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{DA71CDAA-8DD3-4D5F-9FBD-8E4B37A2D925}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "solution", "solution", "{7165BB9E-F22C-40D2-B7B1-CA3EFA2529A0}" + ProjectSection(SolutionItems) = preProject + .editorconfig = .editorconfig + .gitignore = .gitignore + Nuget.Config = Nuget.Config + README.md = README.md + EndProjectSection +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}" +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}" +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 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Activities.Timers", "src\activities\Elsa.Activities.Timers\Elsa.Activities.Timers.csproj", "{E4B71DC4-3E73-49C3-9B4E-CA13909F222D}" +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}") = "samples", "samples", "{5E5E1E84-DDBC-40D6-B891-0D563A15A44A}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sample01", "samples\Sample01\Sample01.csproj", "{FD72B97A-60C5-4592-91E5-0ED7A8D34C83}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sample02", "samples\Sample02\Sample02.csproj", "{C7F43E7A-B133-41A8-BB9F-B4982CD4A1AA}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sample03", "samples\Sample03\Sample03.csproj", "{B86540C9-10EC-449C-9FB1-9194D903AF92}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sample04", "samples\Sample04\Sample04.csproj", "{DCAB4D92-DF84-4075-8E34-6B09AAC1FC68}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sample05", "samples\Sample05\Sample05.csproj", "{A59DA67D-3B50-4128-98E5-D8F1E0484C3C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sample06", "samples\Sample06\Sample06.csproj", "{C0F7845C-E844-43E8-A51A-B38751B55B9C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sample07", "samples\Sample07\Sample07.csproj", "{FC6628CB-69ED-4ED1-A2F5-B2233CD75C15}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sample08", "samples\Sample08\Sample08.csproj", "{9E0C1D8B-7935-42E0-8C10-A31386A9FE9C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sample09", "samples\Sample09\Sample09.csproj", "{E8622C16-D80B-46A7-99D4-B939B20FBFD6}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {300EE2D5-54C5-46F2-AD03-BB43589EA074}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {300EE2D5-54C5-46F2-AD03-BB43589EA074}.Debug|Any CPU.Build.0 = Debug|Any CPU + {300EE2D5-54C5-46F2-AD03-BB43589EA074}.Release|Any CPU.ActiveCfg = Release|Any CPU + {300EE2D5-54C5-46F2-AD03-BB43589EA074}.Release|Any CPU.Build.0 = Release|Any CPU + {3130C574-557C-4DA2-933E-AED7A9EBE48A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3130C574-557C-4DA2-933E-AED7A9EBE48A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3130C574-557C-4DA2-933E-AED7A9EBE48A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3130C574-557C-4DA2-933E-AED7A9EBE48A}.Release|Any CPU.Build.0 = Release|Any CPU + {B98B80CB-D3A3-437C-A61C-ED82C8C77B2F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B98B80CB-D3A3-437C-A61C-ED82C8C77B2F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B98B80CB-D3A3-437C-A61C-ED82C8C77B2F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B98B80CB-D3A3-437C-A61C-ED82C8C77B2F}.Release|Any CPU.Build.0 = Release|Any CPU + {1D63E1B4-2386-4BEC-9090-C3F3CBF25703}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1D63E1B4-2386-4BEC-9090-C3F3CBF25703}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1D63E1B4-2386-4BEC-9090-C3F3CBF25703}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1D63E1B4-2386-4BEC-9090-C3F3CBF25703}.Release|Any CPU.Build.0 = Release|Any CPU + {D20FCB88-9DCA-49EA-9CC2-5B94DD935D30}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D20FCB88-9DCA-49EA-9CC2-5B94DD935D30}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D20FCB88-9DCA-49EA-9CC2-5B94DD935D30}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D20FCB88-9DCA-49EA-9CC2-5B94DD935D30}.Release|Any CPU.Build.0 = Release|Any CPU + {E4B71DC4-3E73-49C3-9B4E-CA13909F222D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E4B71DC4-3E73-49C3-9B4E-CA13909F222D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E4B71DC4-3E73-49C3-9B4E-CA13909F222D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E4B71DC4-3E73-49C3-9B4E-CA13909F222D}.Release|Any CPU.Build.0 = Release|Any CPU + {C4939482-9447-47D1-B6AF-E9F8C6323841}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {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 + {FD72B97A-60C5-4592-91E5-0ED7A8D34C83}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FD72B97A-60C5-4592-91E5-0ED7A8D34C83}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FD72B97A-60C5-4592-91E5-0ED7A8D34C83}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FD72B97A-60C5-4592-91E5-0ED7A8D34C83}.Release|Any CPU.Build.0 = Release|Any CPU + {C7F43E7A-B133-41A8-BB9F-B4982CD4A1AA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C7F43E7A-B133-41A8-BB9F-B4982CD4A1AA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C7F43E7A-B133-41A8-BB9F-B4982CD4A1AA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C7F43E7A-B133-41A8-BB9F-B4982CD4A1AA}.Release|Any CPU.Build.0 = Release|Any CPU + {B86540C9-10EC-449C-9FB1-9194D903AF92}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B86540C9-10EC-449C-9FB1-9194D903AF92}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B86540C9-10EC-449C-9FB1-9194D903AF92}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B86540C9-10EC-449C-9FB1-9194D903AF92}.Release|Any CPU.Build.0 = Release|Any CPU + {DCAB4D92-DF84-4075-8E34-6B09AAC1FC68}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DCAB4D92-DF84-4075-8E34-6B09AAC1FC68}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DCAB4D92-DF84-4075-8E34-6B09AAC1FC68}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DCAB4D92-DF84-4075-8E34-6B09AAC1FC68}.Release|Any CPU.Build.0 = Release|Any CPU + {A59DA67D-3B50-4128-98E5-D8F1E0484C3C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A59DA67D-3B50-4128-98E5-D8F1E0484C3C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A59DA67D-3B50-4128-98E5-D8F1E0484C3C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A59DA67D-3B50-4128-98E5-D8F1E0484C3C}.Release|Any CPU.Build.0 = Release|Any CPU + {C0F7845C-E844-43E8-A51A-B38751B55B9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C0F7845C-E844-43E8-A51A-B38751B55B9C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C0F7845C-E844-43E8-A51A-B38751B55B9C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C0F7845C-E844-43E8-A51A-B38751B55B9C}.Release|Any CPU.Build.0 = Release|Any CPU + {FC6628CB-69ED-4ED1-A2F5-B2233CD75C15}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FC6628CB-69ED-4ED1-A2F5-B2233CD75C15}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FC6628CB-69ED-4ED1-A2F5-B2233CD75C15}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FC6628CB-69ED-4ED1-A2F5-B2233CD75C15}.Release|Any CPU.Build.0 = Release|Any CPU + {9E0C1D8B-7935-42E0-8C10-A31386A9FE9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9E0C1D8B-7935-42E0-8C10-A31386A9FE9C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9E0C1D8B-7935-42E0-8C10-A31386A9FE9C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9E0C1D8B-7935-42E0-8C10-A31386A9FE9C}.Release|Any CPU.Build.0 = Release|Any CPU + {E8622C16-D80B-46A7-99D4-B939B20FBFD6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E8622C16-D80B-46A7-99D4-B939B20FBFD6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E8622C16-D80B-46A7-99D4-B939B20FBFD6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E8622C16-D80B-46A7-99D4-B939B20FBFD6}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {300EE2D5-54C5-46F2-AD03-BB43589EA074} = {35F44BE9-13D0-417C-A01A-F0787BEE6DC3} + {3130C574-557C-4DA2-933E-AED7A9EBE48A} = {35F44BE9-13D0-417C-A01A-F0787BEE6DC3} + {35F44BE9-13D0-417C-A01A-F0787BEE6DC3} = {DA71CDAA-8DD3-4D5F-9FBD-8E4B37A2D925} + {B43B546E-23F3-46E8-ACB7-D04F05CDA180} = {DA71CDAA-8DD3-4D5F-9FBD-8E4B37A2D925} + {B98B80CB-D3A3-437C-A61C-ED82C8C77B2F} = {B43B546E-23F3-46E8-ACB7-D04F05CDA180} + {1D63E1B4-2386-4BEC-9090-C3F3CBF25703} = {B43B546E-23F3-46E8-ACB7-D04F05CDA180} + {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} + {FD72B97A-60C5-4592-91E5-0ED7A8D34C83} = {5E5E1E84-DDBC-40D6-B891-0D563A15A44A} + {C7F43E7A-B133-41A8-BB9F-B4982CD4A1AA} = {5E5E1E84-DDBC-40D6-B891-0D563A15A44A} + {B86540C9-10EC-449C-9FB1-9194D903AF92} = {5E5E1E84-DDBC-40D6-B891-0D563A15A44A} + {DCAB4D92-DF84-4075-8E34-6B09AAC1FC68} = {5E5E1E84-DDBC-40D6-B891-0D563A15A44A} + {A59DA67D-3B50-4128-98E5-D8F1E0484C3C} = {5E5E1E84-DDBC-40D6-B891-0D563A15A44A} + {C0F7845C-E844-43E8-A51A-B38751B55B9C} = {5E5E1E84-DDBC-40D6-B891-0D563A15A44A} + {FC6628CB-69ED-4ED1-A2F5-B2233CD75C15} = {5E5E1E84-DDBC-40D6-B891-0D563A15A44A} + {9E0C1D8B-7935-42E0-8C10-A31386A9FE9C} = {5E5E1E84-DDBC-40D6-B891-0D563A15A44A} + {E8622C16-D80B-46A7-99D4-B939B20FBFD6} = {5E5E1E84-DDBC-40D6-B891-0D563A15A44A} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {8B0975FD-7050-48B0-88C5-48C33378E158} + EndGlobalSection +EndGlobal diff --git a/samples/Sample01/Activities/GoodByeWorld.cs b/samples/Sample01/Activities/GoodByeWorld.cs index e5d42e4cd..3bf726998 100644 --- a/samples/Sample01/Activities/GoodByeWorld.cs +++ b/samples/Sample01/Activities/GoodByeWorld.cs @@ -1,16 +1,16 @@ -using System; -using Elsa.Services; -using Elsa.Results; -using Elsa.Services.Models; - -namespace Sample01.Activities -{ - public class GoodByeWorld : Activity - { - protected override ActivityExecutionResult OnExecute(WorkflowExecutionContext context) - { - Console.WriteLine("Goodbye cruel world..."); - return Done(); - } - } +using System; +using Elsa.Services; +using Elsa.Results; +using Elsa.Services.Models; + +namespace Sample01.Activities +{ + public class GoodByeWorld : Activity + { + protected override ActivityExecutionResult OnExecute(WorkflowExecutionContext context) + { + Console.WriteLine("Goodbye cruel world..."); + return Done(); + } + } } \ No newline at end of file diff --git a/samples/Sample01/Activities/HelloWorld.cs b/samples/Sample01/Activities/HelloWorld.cs index 83ef4e7b0..fb7fe7a96 100644 --- a/samples/Sample01/Activities/HelloWorld.cs +++ b/samples/Sample01/Activities/HelloWorld.cs @@ -1,16 +1,16 @@ -using System; -using Elsa.Services; -using Elsa.Results; -using Elsa.Services.Models; - -namespace Sample01.Activities -{ - public class HelloWorld : Activity - { - protected override ActivityExecutionResult OnExecute(WorkflowExecutionContext context) - { - Console.WriteLine("Hello world!"); - return Done(); - } - } +using System; +using Elsa.Services; +using Elsa.Results; +using Elsa.Services.Models; + +namespace Sample01.Activities +{ + public class HelloWorld : Activity + { + protected override ActivityExecutionResult OnExecute(WorkflowExecutionContext context) + { + Console.WriteLine("Hello world!"); + return Done(); + } + } } \ No newline at end of file diff --git a/samples/Sample01/Program.cs b/samples/Sample01/Program.cs index 531e49e2e..d5b49d283 100644 --- a/samples/Sample01/Program.cs +++ b/samples/Sample01/Program.cs @@ -1,33 +1,33 @@ -using System; -using System.Threading.Tasks; -using Elsa.Extensions; -using Elsa.Persistence.Extensions; -using Elsa.Services; -using Microsoft.Extensions.DependencyInjection; -using Sample01.Activities; - -namespace Sample01 -{ - /// - /// A minimal workflows program defined in code with a strongly-typed workflow class. - /// - class Program - { - static async Task Main(string[] args) - { - // Setup a service collection. - var services = new ServiceCollection() - .AddWorkflows() - .AddMemoryWorkflowInstanceStore() - .AddActivity() - .AddActivity() - .BuildServiceProvider(); - - // Invoke the workflow. - var invoker = services.GetService(); - await invoker.InvokeAsync(); - - Console.ReadLine(); - } - } +using System; +using System.Threading.Tasks; +using Elsa.Extensions; +using Elsa.Persistence.Extensions; +using Elsa.Services; +using Microsoft.Extensions.DependencyInjection; +using Sample01.Activities; + +namespace Sample01 +{ + /// + /// A minimal workflows program defined in code with a strongly-typed workflow class. + /// + class Program + { + static async Task Main(string[] args) + { + // Setup a service collection. + var services = new ServiceCollection() + .AddWorkflows() + .AddMemoryWorkflowInstanceStore() + .AddActivity() + .AddActivity() + .BuildServiceProvider(); + + // Invoke the workflow. + var invoker = services.GetService(); + await invoker.InvokeAsync(); + + Console.ReadLine(); + } + } } \ No newline at end of file diff --git a/samples/Sample01/Sample01.csproj b/samples/Sample01/Sample01.csproj index d2b936b48..0ffa1e12e 100644 --- a/samples/Sample01/Sample01.csproj +++ b/samples/Sample01/Sample01.csproj @@ -1,13 +1,13 @@ - - - - Exe - netcoreapp2.2 - - - - - - - - + + + + Exe + netcoreapp2.2 + + + + + + + + diff --git a/samples/Sample02/Program.cs b/samples/Sample02/Program.cs index c340b9a25..a110b0cc5 100644 --- a/samples/Sample02/Program.cs +++ b/samples/Sample02/Program.cs @@ -1,41 +1,41 @@ -using System; -using System.Threading.Tasks; -using Elsa.Activities.Console.Activities; -using Elsa.Activities.Console.Extensions; -using Elsa.Expressions; -using Elsa.Extensions; -using Elsa.Persistence.Extensions; -using Elsa.Services; -using Microsoft.Extensions.DependencyInjection; - -namespace Sample02 -{ - /// - /// A minimal workflows program defined in code using fluent workflow builder and Console activities. - /// - class Program - { - static async Task Main(string[] args) - { - // Setup a service collection. - var services = new ServiceCollection() - .AddWorkflows() - .AddMemoryWorkflowInstanceStore() - .AddConsoleActivities() - .BuildServiceProvider(); - - // Define a workflow. - var workflowBuilder = services.GetRequiredService(); - var workflowDefinition = workflowBuilder - .StartWith(x => x.TextExpression = new PlainTextExpression("Hello world!")) - .Then(x => x.TextExpression = new PlainTextExpression("Goodbye cruel world...")) - .Build(); - - // Invoke the workflow. - var invoker = services.GetService(); - await invoker.InvokeAsync(workflowDefinition); - - Console.ReadLine(); - } - } +using System; +using System.Threading.Tasks; +using Elsa.Activities.Console.Activities; +using Elsa.Activities.Console.Extensions; +using Elsa.Expressions; +using Elsa.Extensions; +using Elsa.Persistence.Extensions; +using Elsa.Services; +using Microsoft.Extensions.DependencyInjection; + +namespace Sample02 +{ + /// + /// A minimal workflows program defined in code using fluent workflow builder and Console activities. + /// + class Program + { + static async Task Main(string[] args) + { + // Setup a service collection. + var services = new ServiceCollection() + .AddWorkflows() + .AddMemoryWorkflowInstanceStore() + .AddConsoleActivities() + .BuildServiceProvider(); + + // Define a workflow. + var workflowBuilder = services.GetRequiredService(); + var workflowDefinition = workflowBuilder + .StartWith(x => x.TextExpression = new PlainTextExpression("Hello world!")) + .Then(x => x.TextExpression = new PlainTextExpression("Goodbye cruel world...")) + .Build(); + + // Invoke the workflow. + var invoker = services.GetService(); + await invoker.InvokeAsync(workflowDefinition); + + Console.ReadLine(); + } + } } \ No newline at end of file diff --git a/samples/Sample02/Sample02.csproj b/samples/Sample02/Sample02.csproj index d2b936b48..0ffa1e12e 100644 --- a/samples/Sample02/Sample02.csproj +++ b/samples/Sample02/Sample02.csproj @@ -1,13 +1,13 @@ - - - - Exe - netcoreapp2.2 - - - - - - - - + + + + Exe + netcoreapp2.2 + + + + + + + + diff --git a/samples/Sample03/Program.cs b/samples/Sample03/Program.cs index f2766e3a7..c5f471276 100644 --- a/samples/Sample03/Program.cs +++ b/samples/Sample03/Program.cs @@ -1,49 +1,50 @@ -using System; -using System.Threading.Tasks; -using Elsa.Activities.Console.Activities; -using Elsa.Activities.Console.Extensions; -using Elsa.Expressions; -using Elsa.Extensions; -using Elsa.Models; -using Elsa.Persistence.Extensions; -using Elsa.Services; -using Microsoft.Extensions.DependencyInjection; - -namespace Sample03 -{ - /// - /// A minimal workflows program defined as data (workflow definition) and Console activities. - /// - class Program - { - static async Task Main(string[] args) - { - // Setup a service collection. - var services = new ServiceCollection() - .AddWorkflows() - .AddMemoryWorkflowInstanceStore() - .AddConsoleActivities() - .BuildServiceProvider(); - - // Define a workflow as data so we can store it somewhere (file, database, etc.). - var workflowDefinition = new WorkflowDefinition - { - Activities = new[] - { - new ActivityDefinition("activity-1", new { TextExpression = new PlainTextExpression("Hello world!")}), - new ActivityDefinition("activity-2", new { TextExpression = new PlainTextExpression("Goodbye cruel world...")}) - }, - Connections = new [] - { - new ConnectionDefinition("activity-1", "activity-2"), - } - }; - - // Invoke the workflow. - var invoker = services.GetService(); - await invoker.InvokeAsync(workflowDefinition); - - Console.ReadLine(); - } - } +using System; +using System.Threading.Tasks; +using Elsa; +using Elsa.Activities.Console.Activities; +using Elsa.Activities.Console.Extensions; +using Elsa.Expressions; +using Elsa.Extensions; +using Elsa.Models; +using Elsa.Persistence.Extensions; +using Elsa.Services; +using Microsoft.Extensions.DependencyInjection; + +namespace Sample03 +{ + /// + /// A minimal workflows program defined as data (workflow definition) and Console activities. + /// + class Program + { + static async Task Main(string[] args) + { + // Setup a service collection. + var services = new ServiceCollection() + .AddWorkflows() + .AddMemoryWorkflowInstanceStore() + .AddConsoleActivities() + .BuildServiceProvider(); + + // Define a workflow as data so we can store it somewhere (file, database, etc.). + var workflowDefinition = new WorkflowDefinition + { + Activities = new[] + { + new ActivityDefinition("activity-1", new { TextExpression = new PlainTextExpression("Hello world!")}), + new ActivityDefinition("activity-2", new { TextExpression = new PlainTextExpression("Goodbye cruel world...")}) + }, + Connections = new [] + { + new ConnectionDefinition("activity-1", "activity-2", OutcomeNames.Done), + } + }; + + // Invoke the workflow. + var invoker = services.GetService(); + await invoker.InvokeAsync(workflowDefinition); + + Console.ReadLine(); + } + } } \ No newline at end of file diff --git a/samples/Sample04/Activities/ArithmeticOperation.cs b/samples/Sample04/Activities/ArithmeticOperation.cs index d00c3e385..523969c18 100644 --- a/samples/Sample04/Activities/ArithmeticOperation.cs +++ b/samples/Sample04/Activities/ArithmeticOperation.cs @@ -1,45 +1,45 @@ -using System.Threading; -using System.Threading.Tasks; -using Elsa.Expressions; -using Elsa.Extensions; -using Elsa.Services; -using Elsa.Results; -using Elsa.Services.Models; - -namespace Sample04.Activities -{ - public abstract class ArithmeticOperation : Activity - { - private readonly IWorkflowExpressionEvaluator evaluator; - - protected ArithmeticOperation(IWorkflowExpressionEvaluator evaluator) - { - this.evaluator = evaluator; - } - - public WorkflowExpression Values - { - get => GetState>(); - set => SetState(value); - } - - public string ResultVariableName - { - get => GetState(); - set => SetState(value); - } - - protected override async Task OnExecuteAsync(WorkflowExecutionContext context, CancellationToken cancellationToken) - { - var values = await evaluator.EvaluateAsync(Values, context, cancellationToken); - var sum = Calculate(values); - - context.SetLastResult(sum); - context.CurrentScope.SetVariable(ResultVariableName, sum); - - return Done(); - } - - protected abstract double Calculate(params double[] values); - } +using System.Threading; +using System.Threading.Tasks; +using Elsa.Expressions; +using Elsa.Extensions; +using Elsa.Services; +using Elsa.Results; +using Elsa.Services.Models; + +namespace Sample04.Activities +{ + public abstract class ArithmeticOperation : Activity + { + private readonly IWorkflowExpressionEvaluator evaluator; + + protected ArithmeticOperation(IWorkflowExpressionEvaluator evaluator) + { + this.evaluator = evaluator; + } + + public WorkflowExpression Values + { + get => GetState>(); + set => SetState(value); + } + + public string ResultVariableName + { + get => GetState(); + set => SetState(value); + } + + protected override async Task OnExecuteAsync(WorkflowExecutionContext context, CancellationToken cancellationToken) + { + var values = await evaluator.EvaluateAsync(Values, context, cancellationToken); + var sum = Calculate(values); + + context.SetLastResult(sum); + context.CurrentScope.SetVariable(ResultVariableName, sum); + + return Done(); + } + + protected abstract double Calculate(params double[] values); + } } \ No newline at end of file diff --git a/samples/Sample04/CalculatorWorkflow.cs b/samples/Sample04/CalculatorWorkflow.cs index e9fc1e6d1..0bf96c711 100644 --- a/samples/Sample04/CalculatorWorkflow.cs +++ b/samples/Sample04/CalculatorWorkflow.cs @@ -16,11 +16,11 @@ namespace Sample04 builder .StartWith(x => x.TextExpression = new PlainTextExpression("Welcome to Calculator Workflow!")) .Then(x => x.TextExpression = new PlainTextExpression("Enter number 1:"), id: "start") - .Then(x => x.ArgumentName = "number1") + .Then(x => x.VariableName = "number1") .Then(x => x.TextExpression = new PlainTextExpression("Enter number 2:")) - .Then(x => x.ArgumentName = "number2") + .Then(x => x.VariableName = "number2") .Then(x => x.TextExpression = new PlainTextExpression("Now enter the operation you wish to apply. Options are: add, subtract, multiply or divide:")) - .Then(x => x.ArgumentName = "operation") + .Then(x => x.VariableName = "operation") .Then(@switch => { @switch.Expression = new JavaScriptExpression("operation"); @@ -51,7 +51,7 @@ namespace Sample04 ) .Add(x => x.TextExpression = new JavaScriptExpression("`Result: ${result}`"), "showResult") .Then(x => x.TextExpression = new PlainTextExpression("Try again? (y/n)")) - .Then(x => x.ArgumentName = "retry") + .Then(x => x.VariableName = "retry") .Then( x => x.ConditionExpression = new JavaScriptExpression("retry.toLowerCase() === 'y'"), ifElse => diff --git a/samples/Sample04/Program.cs b/samples/Sample04/Program.cs index 87929775c..e16765a1a 100644 --- a/samples/Sample04/Program.cs +++ b/samples/Sample04/Program.cs @@ -1,41 +1,41 @@ -using System; -using System.Threading.Tasks; -using Elsa.Activities.Console.Extensions; -using Elsa.Extensions; -using Elsa.Persistence.Extensions; -using Elsa.Services; -using Microsoft.Extensions.DependencyInjection; -using Sample04.Activities; - -namespace Sample04 -{ - /// - /// A strongly-typed workflows program demonstrating scripting, and branching. - /// - class Program - { - static async Task Main() - { - // Setup a service collection. - var services = new ServiceCollection() - .AddWorkflows() - .AddMemoryWorkflowInstanceStore() - .AddConsoleActivities() - .AddActivity() - .AddActivity() - .AddActivity() - .AddActivity() - .BuildServiceProvider(); - - // Create a workflow. - var workflowFactory = services.GetRequiredService(); - var workflow = workflowFactory.CreateWorkflow(); - - // Invoke the workflow. - var invoker = services.GetService(); - await invoker.InvokeAsync(workflow); - - Console.ReadLine(); - } - } +using System; +using System.Threading.Tasks; +using Elsa.Activities.Console.Extensions; +using Elsa.Extensions; +using Elsa.Persistence.Extensions; +using Elsa.Services; +using Microsoft.Extensions.DependencyInjection; +using Sample04.Activities; + +namespace Sample04 +{ + /// + /// A strongly-typed workflows program demonstrating scripting, and branching. + /// + class Program + { + static async Task Main() + { + // Setup a service collection. + var services = new ServiceCollection() + .AddWorkflows() + .AddMemoryWorkflowInstanceStore() + .AddConsoleActivities() + .AddActivity() + .AddActivity() + .AddActivity() + .AddActivity() + .BuildServiceProvider(); + + // Create a workflow. + var workflowFactory = services.GetRequiredService(); + var workflow = workflowFactory.CreateWorkflow(); + + // Invoke the workflow. + var invoker = services.GetService(); + await invoker.InvokeAsync(workflow); + + Console.ReadLine(); + } + } } \ No newline at end of file diff --git a/samples/Sample05/Program.cs b/samples/Sample05/Program.cs index a6031b627..a89238f9a 100644 --- a/samples/Sample05/Program.cs +++ b/samples/Sample05/Program.cs @@ -1,53 +1,53 @@ -using System; -using System.Threading.Tasks; -using Elsa.Activities.Console.Extensions; -using Elsa.Activities.Timers.Extensions; -using Elsa.Extensions; -using Elsa.Persistence.Extensions; -using Elsa.Services; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Hosting; -using Microsoft.Extensions.Logging; -using NodaTime; - -namespace Sample05 -{ - /// - /// A minimal workflows program defined in code with a strongly-typed workflow class. - /// - class Program - { - static async Task Main() - { - var host = new HostBuilder() - .ConfigureServices(ConfigureServices) - .ConfigureLogging(logging => logging.AddConsole()) - .UseConsoleLifetime() - .Build(); - - using (host) - { - await host.StartAsync(); - SetupWorkflow(host.Services); - await host.WaitForShutdownAsync(); - } - } - - private static void SetupWorkflow(IServiceProvider services) - { - // Register the workflow. - var registry = services.GetService(); - registry.RegisterWorkflow(); - } - - private static void ConfigureServices(IServiceCollection services) - { - services - .AddWorkflows() - .AddConsoleActivities() - .AddTimerActivities(options => options.Configure(x => x.SweepInterval = Period.FromSeconds(10))) - .AddMemoryWorkflowDefinitionStore() - .AddMemoryWorkflowInstanceStore(); - } - } +using System; +using System.Threading.Tasks; +using Elsa.Activities.Console.Extensions; +using Elsa.Activities.Timers.Extensions; +using Elsa.Extensions; +using Elsa.Persistence.Extensions; +using Elsa.Services; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Logging; +using NodaTime; + +namespace Sample05 +{ + /// + /// A minimal workflows program defined in code with a strongly-typed workflow class. + /// + class Program + { + static async Task Main() + { + var host = new HostBuilder() + .ConfigureServices(ConfigureServices) + .ConfigureLogging(logging => logging.AddConsole()) + .UseConsoleLifetime() + .Build(); + + using (host) + { + await host.StartAsync(); + SetupWorkflow(host.Services); + await host.WaitForShutdownAsync(); + } + } + + private static void SetupWorkflow(IServiceProvider services) + { + // Register the workflow. + var registry = services.GetService(); + registry.RegisterWorkflow(); + } + + private static void ConfigureServices(IServiceCollection services) + { + services + .AddWorkflows() + .AddConsoleActivities() + .AddTimerActivities(options => options.Configure(x => x.SweepInterval = Period.FromSeconds(10))) + .AddMemoryWorkflowDefinitionStore() + .AddMemoryWorkflowInstanceStore(); + } + } } \ No newline at end of file diff --git a/samples/Sample05/RecurringWorkflow.cs b/samples/Sample05/RecurringWorkflow.cs index ae0466538..04937da8a 100644 --- a/samples/Sample05/RecurringWorkflow.cs +++ b/samples/Sample05/RecurringWorkflow.cs @@ -1,20 +1,20 @@ -using Elsa.Activities.Console.Activities; -using Elsa.Activities.Timers.Activities; -using Elsa.Expressions; -using Elsa.Services; -using Elsa.Services.Models; - -namespace Sample05 -{ - public class RecurringWorkflow : IWorkflow - { - public void Build(IWorkflowBuilder builder) - { - builder - .WithId("RecurringWorkflow") - .AsSingleton() - .StartWith(x => x.CronExpression = new PlainTextExpression("* * * * *")) - .Then(x => x.TextExpression = new JavaScriptExpression("`Trigger received. The time is: ${new Date().toISOString()}`")); - } - } +using Elsa.Activities.Console.Activities; +using Elsa.Activities.Timers.Activities; +using Elsa.Expressions; +using Elsa.Services; +using Elsa.Services.Models; + +namespace Sample05 +{ + public class RecurringWorkflow : IWorkflow + { + public void Build(IWorkflowBuilder builder) + { + builder + .WithId("RecurringWorkflow") + .AsSingleton() + .StartWith(x => x.CronExpression = new PlainTextExpression("* * * * *")) + .Then(x => x.TextExpression = new JavaScriptExpression("`Trigger received. The time is: ${new Date().toISOString()}`")); + } + } } \ No newline at end of file diff --git a/samples/Sample06/Startup.cs b/samples/Sample06/Startup.cs index 06067a530..e9d0cdfd5 100644 --- a/samples/Sample06/Startup.cs +++ b/samples/Sample06/Startup.cs @@ -1,43 +1,43 @@ -using Elsa.Activities.Http.Extensions; -using Elsa.Extensions; -using Elsa.Persistence.Extensions; -using Elsa.Services; -using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Hosting; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; - -namespace Sample06 -{ - public class Startup - { - public Startup(IConfiguration configuration) - { - Configuration = configuration; - } - - public IConfiguration Configuration { get; } - - public void ConfigureServices(IServiceCollection services) - { - services - .AddWorkflows() - .AddHttpActivities() - .AddMemoryWorkflowDefinitionStore() - .AddMemoryWorkflowInstanceStore(); - } - - public void Configure(IApplicationBuilder app, IHostingEnvironment env, IWorkflowRegistry workflowRegistry) - { - if (env.IsDevelopment()) - { - app.UseDeveloperExceptionPage(); - } - - app.UseHttpActivities(); - app.UseWelcomePage(); - - workflowRegistry.RegisterWorkflow(); - } - } +using Elsa.Activities.Http.Extensions; +using Elsa.Extensions; +using Elsa.Persistence.Extensions; +using Elsa.Services; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; + +namespace Sample06 +{ + public class Startup + { + public Startup(IConfiguration configuration) + { + Configuration = configuration; + } + + public IConfiguration Configuration { get; } + + public void ConfigureServices(IServiceCollection services) + { + services + .AddWorkflows() + .AddHttpActivities() + .AddMemoryWorkflowDefinitionStore() + .AddMemoryWorkflowInstanceStore(); + } + + public void Configure(IApplicationBuilder app, IHostingEnvironment env, IWorkflowRegistry workflowRegistry) + { + if (env.IsDevelopment()) + { + app.UseDeveloperExceptionPage(); + } + + app.UseHttpActivities(); + app.UseWelcomePage(); + + workflowRegistry.RegisterWorkflow(); + } + } } \ No newline at end of file diff --git a/samples/Sample07/DocumentApprovalWorkflow.cs b/samples/Sample07/DocumentApprovalWorkflow.cs index aff5bb166..9087fb019 100644 --- a/samples/Sample07/DocumentApprovalWorkflow.cs +++ b/samples/Sample07/DocumentApprovalWorkflow.cs @@ -4,9 +4,9 @@ using System.Net.Http; using Elsa; using Elsa.Activities.Email.Activities; using Elsa.Activities.Http.Activities; -using Elsa.Core.Activities.ControlFlow; -using Elsa.Core.Activities.Primitives; -using Elsa.Core.Expressions; +using Elsa.Activities.ControlFlow; +using Elsa.Activities.Primitives; +using Elsa.Expressions; using Elsa.Services; using Elsa.Services.Models; diff --git a/samples/Sample07/Startup.cs b/samples/Sample07/Startup.cs index 3de0b14f4..9b3bfc0b7 100644 --- a/samples/Sample07/Startup.cs +++ b/samples/Sample07/Startup.cs @@ -1,45 +1,45 @@ -using Elsa.Activities.Email.Extensions; -using Elsa.Activities.Http.Extensions; -using Elsa.Core.Extensions; -using Elsa.Core.Persistence.Extensions; -using Elsa.Services; -using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Hosting; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; - -namespace Sample07 -{ - public class Startup - { - public Startup(IConfiguration configuration) - { - Configuration = configuration; - } - - public IConfiguration Configuration { get; } - - public void ConfigureServices(IServiceCollection services) - { - services - .AddWorkflows() - .AddHttpActivities() - .AddEmailActivities(options => options.Bind(Configuration.GetSection("Smtp"))) //Tip: use Smtp4Dev for a local SMTP server that displays sent emails without actually sending them. - .AddMemoryWorkflowDefinitionStore() - .AddMemoryWorkflowInstanceStore(); - } - - public void Configure(IApplicationBuilder app, IHostingEnvironment env, IWorkflowRegistry workflowRegistry) - { - if (env.IsDevelopment()) - { - app.UseDeveloperExceptionPage(); - } - - app.UseHttpActivities(); - app.UseWelcomePage(); - - workflowRegistry.RegisterWorkflow(); - } - } +using Elsa.Activities.Email.Extensions; +using Elsa.Activities.Http.Extensions; +using Elsa.Extensions; +using Elsa.Persistence.Extensions; +using Elsa.Services; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; + +namespace Sample07 +{ + public class Startup + { + public Startup(IConfiguration configuration) + { + Configuration = configuration; + } + + public IConfiguration Configuration { get; } + + public void ConfigureServices(IServiceCollection services) + { + services + .AddWorkflows() + .AddHttpActivities() + .AddEmailActivities(options => options.Bind(Configuration.GetSection("Smtp"))) //Tip: use Smtp4Dev for a local SMTP server that displays sent emails without actually sending them. + .AddMemoryWorkflowDefinitionStore() + .AddMemoryWorkflowInstanceStore(); + } + + public void Configure(IApplicationBuilder app, IHostingEnvironment env, IWorkflowRegistry workflowRegistry) + { + if (env.IsDevelopment()) + { + app.UseDeveloperExceptionPage(); + } + + app.UseHttpActivities(); + app.UseWelcomePage(); + + workflowRegistry.RegisterWorkflow(); + } + } } \ No newline at end of file diff --git a/samples/Sample08/Startup.cs b/samples/Sample08/Startup.cs index 766681324..7aad941f3 100644 --- a/samples/Sample08/Startup.cs +++ b/samples/Sample08/Startup.cs @@ -1,56 +1,56 @@ -using Elsa.Activities.Email.Extensions; -using Elsa.Activities.Http.Extensions; -using Elsa.Activities.MassTransit.Extensions; -using Elsa.Activities.Timers.Extensions; -using Elsa.Extensions; -using Elsa.Persistence.Extensions; -using Elsa.Services; -using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Hosting; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; -using NodaTime; -using Sample08.Messages; -using Sample08.Workflows; -using IHostingEnvironment = Microsoft.AspNetCore.Hosting.IHostingEnvironment; - -namespace Sample08 -{ - public class Startup - { - public Startup(IConfiguration configuration) - { - Configuration = configuration; - } - - public IConfiguration Configuration { get; } - - public void ConfigureServices(IServiceCollection services) - { - services - .AddWorkflows() - .AddHttpActivities() - .AddTimerActivities(options => options.Configure(x => x.SweepInterval = Period.FromSeconds(10))) - .AddEmailActivities(options => options.Bind(Configuration.GetSection("Smtp"))) - .AddRabbitMqActivities( - options => options.Bind(Configuration.GetSection("MassTransit:RabbitMq")), - typeof(CreateOrder), - typeof(OrderShipped)) - .AddMemoryWorkflowDefinitionStore() - .AddMemoryWorkflowInstanceStore(); - } - - public void Configure(IApplicationBuilder app, IHostingEnvironment env, IWorkflowRegistry workflowRegistry) - { - if (env.IsDevelopment()) - { - app.UseDeveloperExceptionPage(); - } - - app.UseHttpActivities(); - - workflowRegistry.RegisterWorkflow(); - workflowRegistry.RegisterWorkflow(); - } - } +using Elsa.Activities.Email.Extensions; +using Elsa.Activities.Http.Extensions; +using Elsa.Activities.MassTransit.Extensions; +using Elsa.Activities.Timers.Extensions; +using Elsa.Extensions; +using Elsa.Persistence.Extensions; +using Elsa.Services; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using NodaTime; +using Sample08.Messages; +using Sample08.Workflows; +using IHostingEnvironment = Microsoft.AspNetCore.Hosting.IHostingEnvironment; + +namespace Sample08 +{ + public class Startup + { + public Startup(IConfiguration configuration) + { + Configuration = configuration; + } + + public IConfiguration Configuration { get; } + + public void ConfigureServices(IServiceCollection services) + { + services + .AddWorkflows() + .AddHttpActivities() + .AddTimerActivities(options => options.Configure(x => x.SweepInterval = Period.FromSeconds(10))) + .AddEmailActivities(options => options.Bind(Configuration.GetSection("Smtp"))) + .AddRabbitMqActivities( + options => options.Bind(Configuration.GetSection("MassTransit:RabbitMq")), + typeof(CreateOrder), + typeof(OrderShipped)) + .AddMemoryWorkflowDefinitionStore() + .AddMemoryWorkflowInstanceStore(); + } + + public void Configure(IApplicationBuilder app, IHostingEnvironment env, IWorkflowRegistry workflowRegistry) + { + if (env.IsDevelopment()) + { + app.UseDeveloperExceptionPage(); + } + + app.UseHttpActivities(); + + workflowRegistry.RegisterWorkflow(); + workflowRegistry.RegisterWorkflow(); + } + } } \ No newline at end of file diff --git a/samples/Sample08/Workflows/HandleOrderWorkflow.cs b/samples/Sample08/Workflows/HandleOrderWorkflow.cs index 188bde825..620d7c733 100644 --- a/samples/Sample08/Workflows/HandleOrderWorkflow.cs +++ b/samples/Sample08/Workflows/HandleOrderWorkflow.cs @@ -1,34 +1,34 @@ -using System; -using Elsa.Activities.MassTransit.Activities; -using Elsa.Activities.Timers.Activities; -using Elsa.Activities.Primitives; -using Elsa.Expressions; -using Elsa.Services; -using Elsa.Services.Models; -using Sample08.Messages; - -namespace Sample08.Workflows -{ - public class HandleOrderWorkflow : IWorkflow - { - public void Build(IWorkflowBuilder builder) - { - builder - .StartWith(activity => activity.MessageType = typeof(CreateOrder)) - .Then( - activity => - { - activity.VariableName = "order"; - activity.ValueExpression = new JavaScriptExpression("lastResult().Order"); - } - ) - .Then(activity => activity.TimeoutExpression = new PlainTextExpression("00:00:05")) - .Then(activity => - { - activity.Message = new JavaScriptExpression("return {order: order}"); - activity.MessageType = typeof(OrderShipped); - } - ); - } - } +using System; +using Elsa.Activities.MassTransit.Activities; +using Elsa.Activities.Timers.Activities; +using Elsa.Activities.Primitives; +using Elsa.Expressions; +using Elsa.Services; +using Elsa.Services.Models; +using Sample08.Messages; + +namespace Sample08.Workflows +{ + public class HandleOrderWorkflow : IWorkflow + { + public void Build(IWorkflowBuilder builder) + { + builder + .StartWith(activity => activity.MessageType = typeof(CreateOrder)) + .Then( + activity => + { + activity.VariableName = "order"; + activity.ValueExpression = new JavaScriptExpression("lastResult().Order"); + } + ) + .Then(activity => activity.TimeoutExpression = new PlainTextExpression("00:00:05")) + .Then(activity => + { + activity.Message = new JavaScriptExpression("return {order: order}"); + activity.MessageType = typeof(OrderShipped); + } + ); + } + } } \ No newline at end of file diff --git a/samples/Sample09/Program.cs b/samples/Sample09/Program.cs new file mode 100644 index 000000000..3bd9013a4 --- /dev/null +++ b/samples/Sample09/Program.cs @@ -0,0 +1,51 @@ +using System; +using System.IO; +using System.Reflection; +using System.Threading.Tasks; +using Elsa.Activities.Console.Extensions; +using Elsa.Extensions; +using Elsa.Models; +using Elsa.Persistence.Extensions; +using Elsa.Serialization; +using Elsa.Serialization.Formatters; +using Elsa.Services; +using Microsoft.Extensions.DependencyInjection; + +namespace Sample09 +{ + /// + /// A simple console program that loads & executes a workflow designed with the HTML5 workflow designer. + /// + class Program + { + static async Task Main() + { + var json = await ReadEmbeddedResourceAsync("Sample09.calculator.json"); + var services = BuildServices(); + var serializer = services.GetRequiredService(); + var workflow = serializer.Deserialize(json, JsonTokenFormatter.FormatName); + var invoker = services.GetRequiredService(); + + await invoker.InvokeAsync(workflow); + } + + private static IServiceProvider BuildServices() + { + return new ServiceCollection() + .AddWorkflows() + .AddConsoleActivities() + .AddMemoryWorkflowDefinitionStore() + .AddMemoryWorkflowInstanceStore() + .BuildServiceProvider(); + } + + private static async Task ReadEmbeddedResourceAsync(string resourceName) + { + var assembly = typeof(Program).GetTypeInfo().Assembly; + using (var reader = new StreamReader(assembly.GetManifestResourceStream(resourceName))) + { + return await reader.ReadToEndAsync(); + } + } + } +} \ No newline at end of file diff --git a/samples/Sample09/Sample09.csproj b/samples/Sample09/Sample09.csproj new file mode 100644 index 000000000..b3854f5e0 --- /dev/null +++ b/samples/Sample09/Sample09.csproj @@ -0,0 +1,19 @@ + + + + Exe + netcoreapp2.2 + latest + + + + + + + + + + + + + diff --git a/samples/Sample09/calculator.json b/samples/Sample09/calculator.json new file mode 100644 index 000000000..b873ba212 --- /dev/null +++ b/samples/Sample09/calculator.json @@ -0,0 +1,255 @@ +{ + "activities": [ + { + "id": "cb5bc5c3-c8a2-4e13-b469-3780af6f1502", + "top": 156, + "left": 322, + "type": "ReadLine", + "state": { + "variableName": "a" + } + }, + { + "id": "caa8b05f-d355-49f5-95b1-9782e7408635", + "top": 49, + "left": 29, + "type": "WriteLine", + "state": { + "textExpression": "Welcome to Calculator!" + } + }, + { + "id": "c06feed1-c9f7-407e-820f-68dd045788c0", + "top": 295, + "left": 46, + "type": "WriteLine", + "state": { + "textExpression": "Enter a number:" + } + }, + { + "id": "b9e1aa68-bb4c-4775-966f-2080b1b21a9e", + "top": 23, + "left": 613, + "type": "WriteLine", + "state": { + "textExpression": "Enter another number:" + } + }, + { + "id": "b05e7717-39f2-4bf1-a13f-ee30295287c3", + "top": 188, + "left": 789, + "type": "ReadLine", + "state": { + "variableName": "b" + } + }, + { + "id": "e5edc24d-59ca-4682-8af0-a464de2b2725", + "top": 338, + "left": 545, + "type": "WriteLine", + "state": { + "textExpression": "Enter an operation. Options: add, subtract, multiply, divide" + } + }, + { + "id": "cf9f8965-5765-482e-a280-000c7105e378", + "top": 535, + "left": 626, + "type": "Switch", + "state": { + "expression": "parseFloat(operation)", + "cases": [ + "Add", + "Subtract", + "Multiply", + "Divide" + ] + } + }, + { + "id": "2ef2fc1e-c439-482f-a9a7-9ec0fec7d868", + "top": 17, + "left": 1258, + "type": "SetVariable", + "state": { + "variableName": "result", + "variableExpression": "a + b" + } + }, + { + "id": "47396ebe-8e62-432b-bd28-4260c07d1ffe", + "top": 172, + "left": 1259, + "type": "SetVariable", + "state": { + "variableName": "result", + "variableExpression": "a - b" + } + }, + { + "id": "f700f606-6995-4e80-b30e-c6bbfba91c81", + "top": 365, + "left": 1258, + "type": "SetVariable", + "state": { + "variableName": "result", + "variableExpression": "a * b" + } + }, + { + "id": "80c41881-edc6-4d3f-8f1b-9cc3fc9cbfc1", + "top": 526, + "left": 1263, + "type": "SetVariable", + "state": { + "variableName": "result", + "variableExpression": "a / b" + } + }, + { + "id": "3343d0cc-eea0-4f28-a370-c182ae74b007", + "top": 266, + "left": 1607, + "type": "WriteLine", + "state": { + "textExpression": "`Result: ${result}`" + } + }, + { + "id": "be435fd5-1740-40ee-98e1-7843da139e9a", + "top": 465, + "left": 1611, + "type": "WriteLine", + "state": { + "textExpression": "Try again? (y/n)" + } + }, + { + "id": "b3f5818e-9a24-4621-9d15-07af7de4da32", + "top": 821, + "left": 1591, + "type": "ReadLine", + "state": { + "variableName": "retry" + } + }, + { + "id": "701a7580-2b6a-42ff-9f18-82ca1910b192", + "top": 735, + "left": 568, + "type": "IfElse", + "state": { + "expression": "retry === 'y'" + } + }, + { + "id": "9e0f75ca-d599-4bf7-8132-ffb305004c2d", + "top": 846, + "left": 83, + "type": "WriteLine", + "state": { + "textExpression": "Bye!" + } + } + ], + "connections": [ + { + "sourceActivityId": "caa8b05f-d355-49f5-95b1-9782e7408635", + "destinationActivityId": "c06feed1-c9f7-407e-820f-68dd045788c0", + "outcome": "Done" + }, + { + "sourceActivityId": "c06feed1-c9f7-407e-820f-68dd045788c0", + "destinationActivityId": "cb5bc5c3-c8a2-4e13-b469-3780af6f1502", + "outcome": "Done" + }, + { + "sourceActivityId": "cb5bc5c3-c8a2-4e13-b469-3780af6f1502", + "destinationActivityId": "b9e1aa68-bb4c-4775-966f-2080b1b21a9e", + "outcome": "Done" + }, + { + "sourceActivityId": "b9e1aa68-bb4c-4775-966f-2080b1b21a9e", + "destinationActivityId": "b05e7717-39f2-4bf1-a13f-ee30295287c3", + "outcome": "Done" + }, + { + "sourceActivityId": "b05e7717-39f2-4bf1-a13f-ee30295287c3", + "destinationActivityId": "e5edc24d-59ca-4682-8af0-a464de2b2725", + "outcome": "Done" + }, + { + "sourceActivityId": "e5edc24d-59ca-4682-8af0-a464de2b2725", + "destinationActivityId": "cf9f8965-5765-482e-a280-000c7105e378", + "outcome": "Done" + }, + { + "sourceActivityId": "cf9f8965-5765-482e-a280-000c7105e378", + "destinationActivityId": "2ef2fc1e-c439-482f-a9a7-9ec0fec7d868", + "outcome": "Add" + }, + { + "sourceActivityId": "cf9f8965-5765-482e-a280-000c7105e378", + "destinationActivityId": "47396ebe-8e62-432b-bd28-4260c07d1ffe", + "outcome": "Subtract" + }, + { + "sourceActivityId": "cf9f8965-5765-482e-a280-000c7105e378", + "destinationActivityId": "f700f606-6995-4e80-b30e-c6bbfba91c81", + "outcome": "Multiply" + }, + { + "sourceActivityId": "cf9f8965-5765-482e-a280-000c7105e378", + "destinationActivityId": "80c41881-edc6-4d3f-8f1b-9cc3fc9cbfc1", + "outcome": "Divide" + }, + { + "sourceActivityId": "2ef2fc1e-c439-482f-a9a7-9ec0fec7d868", + "destinationActivityId": "3343d0cc-eea0-4f28-a370-c182ae74b007", + "outcome": "Done" + }, + { + "sourceActivityId": "47396ebe-8e62-432b-bd28-4260c07d1ffe", + "destinationActivityId": "3343d0cc-eea0-4f28-a370-c182ae74b007", + "outcome": "Done" + }, + { + "sourceActivityId": "f700f606-6995-4e80-b30e-c6bbfba91c81", + "destinationActivityId": "3343d0cc-eea0-4f28-a370-c182ae74b007", + "outcome": "Done" + }, + { + "sourceActivityId": "80c41881-edc6-4d3f-8f1b-9cc3fc9cbfc1", + "destinationActivityId": "3343d0cc-eea0-4f28-a370-c182ae74b007", + "outcome": "Done" + }, + { + "sourceActivityId": "3343d0cc-eea0-4f28-a370-c182ae74b007", + "destinationActivityId": "be435fd5-1740-40ee-98e1-7843da139e9a", + "outcome": "Done" + }, + { + "sourceActivityId": "be435fd5-1740-40ee-98e1-7843da139e9a", + "destinationActivityId": "b3f5818e-9a24-4621-9d15-07af7de4da32", + "outcome": "Done" + }, + { + "sourceActivityId": "b3f5818e-9a24-4621-9d15-07af7de4da32", + "destinationActivityId": "701a7580-2b6a-42ff-9f18-82ca1910b192", + "outcome": "Done" + }, + { + "sourceActivityId": "701a7580-2b6a-42ff-9f18-82ca1910b192", + "destinationActivityId": "c06feed1-c9f7-407e-820f-68dd045788c0", + "outcome": "True" + }, + { + "sourceActivityId": "701a7580-2b6a-42ff-9f18-82ca1910b192", + "destinationActivityId": "9e0f75ca-d599-4bf7-8132-ffb305004c2d", + "outcome": "False" + } + ] +} \ No newline at end of file diff --git a/src/activities/Elsa.Activities.Console/Activities/ReadLine.cs b/src/activities/Elsa.Activities.Console/Activities/ReadLine.cs index 5d82a3d27..acc1d44a8 100644 --- a/src/activities/Elsa.Activities.Console/Activities/ReadLine.cs +++ b/src/activities/Elsa.Activities.Console/Activities/ReadLine.cs @@ -23,7 +23,7 @@ namespace Elsa.Activities.Console.Activities this.input = input; } - public string ArgumentName + public string VariableName { get => GetState(); set => SetState(value); @@ -40,13 +40,13 @@ namespace Elsa.Activities.Console.Activities protected override ActivityExecutionResult OnResume(WorkflowExecutionContext context) { - var receivedInput = (string)context.Workflow.Input[ArgumentName]; + var receivedInput = (string)context.Workflow.Input[VariableName]; return Execute(context, receivedInput); } private ActivityExecutionResult Execute(WorkflowExecutionContext workflowContext, string receivedInput) { - workflowContext.CurrentScope.SetVariable(ArgumentName, receivedInput); + workflowContext.CurrentScope.SetVariable(VariableName, receivedInput); workflowContext.SetLastResult(receivedInput); return Outcome(OutcomeNames.Done); } diff --git a/src/core/Elsa.Abstractions/Models/ActivityDefinitioncs.cs b/src/core/Elsa.Abstractions/Models/ActivityDefinitioncs.cs index 5dd8e034a..2520261e8 100644 --- a/src/core/Elsa.Abstractions/Models/ActivityDefinitioncs.cs +++ b/src/core/Elsa.Abstractions/Models/ActivityDefinitioncs.cs @@ -1,35 +1,39 @@ -using Elsa.Services.Models; -using Newtonsoft.Json.Linq; - -namespace Elsa.Models -{ - public class ActivityDefinition - { - public static ActivityDefinition FromActivity(IActivity activity) - { - return new ActivityDefinition(activity.Id, activity.TypeName, activity.State); - } - - public ActivityDefinition(string id, string typeName, JObject state) - { - Id = id; - TypeName = typeName; - State = new JObject(state); - } - - public string Id { get; set; } - public string TypeName { get; set; } - public JObject State { get; set; } - } - - public class ActivityDefinition : ActivityDefinition where T : IActivity - { - public ActivityDefinition(string id, JObject state) : base(id, typeof(T).Name, state) - { - } - - public ActivityDefinition(string id, object state) : base(id, typeof(T).Name, JObject.FromObject(state)) - { - } - } +using Elsa.Services.Models; +using Newtonsoft.Json.Linq; + +namespace Elsa.Models +{ + public class ActivityDefinition + { + public static ActivityDefinition FromActivity(IActivity activity) + { + return new ActivityDefinition(activity.Id, activity.TypeName, activity.State); + } + + public ActivityDefinition() + { + } + + public ActivityDefinition(string id, string type, JObject state) + { + Id = id; + Type = type; + State = new JObject(state); + } + + public string Id { get; set; } + public string Type { get; set; } + public JObject State { get; set; } + } + + public class ActivityDefinition : ActivityDefinition where T : IActivity + { + public ActivityDefinition(string id, JObject state) : base(id, typeof(T).Name, state) + { + } + + public ActivityDefinition(string id, object state) : base(id, typeof(T).Name, JObject.FromObject(state)) + { + } + } } \ No newline at end of file diff --git a/src/core/Elsa.Abstractions/Models/ConnectionDefinitioncs.cs b/src/core/Elsa.Abstractions/Models/ConnectionDefinitioncs.cs index f6433fff1..f05a12806 100644 --- a/src/core/Elsa.Abstractions/Models/ConnectionDefinitioncs.cs +++ b/src/core/Elsa.Abstractions/Models/ConnectionDefinitioncs.cs @@ -1,22 +1,20 @@ -namespace Elsa.Models -{ - public class ConnectionDefinition - { - public ConnectionDefinition(string sourceActivityId, string targetActivityId, string outcome = null) - : this( - new SourceEndpointDefinition(sourceActivityId, outcome), - new TargetEndpointDefinition(targetActivityId) - ) - { - } - - public ConnectionDefinition(SourceEndpointDefinition source, TargetEndpointDefinition target) - { - Source = source; - Target = target; - } - - public SourceEndpointDefinition Source { get; } - public TargetEndpointDefinition Target { get; } - } +namespace Elsa.Models +{ + public class ConnectionDefinition + { + public ConnectionDefinition() + { + } + + public ConnectionDefinition(string sourceActivityId, string destinationActivityId, string outcome) + { + SourceActivityId = sourceActivityId; + DestinationActivityId = destinationActivityId; + Outcome = outcome; + } + + public string SourceActivityId { get; set; } + public string DestinationActivityId { get; set; } + public string Outcome { get; set; } + } } \ No newline at end of file diff --git a/src/core/Elsa.Abstractions/Models/EndpointDefinition.cs b/src/core/Elsa.Abstractions/Models/EndpointDefinition.cs deleted file mode 100644 index 7754a1c16..000000000 --- a/src/core/Elsa.Abstractions/Models/EndpointDefinition.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace Elsa.Models -{ - public abstract class EndpointDefinition - { - protected EndpointDefinition(string activityId) - { - ActivityId = activityId; - } - - public string ActivityId { get; } - } -} \ No newline at end of file diff --git a/src/core/Elsa.Abstractions/Models/SourceEndpointDefinitioncs.cs b/src/core/Elsa.Abstractions/Models/SourceEndpointDefinitioncs.cs deleted file mode 100644 index a05ca6a0d..000000000 --- a/src/core/Elsa.Abstractions/Models/SourceEndpointDefinitioncs.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace Elsa.Models -{ - public class SourceEndpointDefinition : EndpointDefinition - { - public SourceEndpointDefinition(string activityId, string outcome) : base(activityId) - { - Outcome = outcome; - } - - public string Outcome { get; } - } -} \ No newline at end of file diff --git a/src/core/Elsa.Abstractions/Models/TargetEndpointDefinition.cs b/src/core/Elsa.Abstractions/Models/TargetEndpointDefinition.cs deleted file mode 100644 index 6f71405c5..000000000 --- a/src/core/Elsa.Abstractions/Models/TargetEndpointDefinition.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace Elsa.Models -{ - public class TargetEndpointDefinition : EndpointDefinition - { - public TargetEndpointDefinition(string activityId) : base(activityId) - { - } - } -} \ No newline at end of file diff --git a/src/core/Elsa.Abstractions/Serialization/IWorkflowSerializer.cs b/src/core/Elsa.Abstractions/Serialization/IWorkflowSerializer.cs index b483a7664..db4d81487 100644 --- a/src/core/Elsa.Abstractions/Serialization/IWorkflowSerializer.cs +++ b/src/core/Elsa.Abstractions/Serialization/IWorkflowSerializer.cs @@ -1,13 +1,12 @@ -using Elsa.Serialization.Models; -using Newtonsoft.Json.Linq; - -namespace Elsa.Serialization -{ - public interface IWorkflowSerializer - { - string Serialize(WorkflowInstance workflowInstance, string format); - string Serialize(JToken token, string format); - WorkflowInstance Deserialize(string data, string format); - WorkflowInstance Deserialize(JToken token); - } +using Newtonsoft.Json.Linq; + +namespace Elsa.Serialization +{ + public interface IWorkflowSerializer + { + string Serialize(T workflowInstance, string format); + string Serialize(JToken token, string format); + T Deserialize(string data, string format); + T Deserialize(JToken token); + } } \ No newline at end of file diff --git a/src/core/Elsa.Abstractions/Services/Extensions/WorkflowBlueprintExtensions.cs b/src/core/Elsa.Abstractions/Services/Extensions/WorkflowBlueprintExtensions.cs index defc3f3e7..fc1e61105 100644 --- a/src/core/Elsa.Abstractions/Services/Extensions/WorkflowBlueprintExtensions.cs +++ b/src/core/Elsa.Abstractions/Services/Extensions/WorkflowBlueprintExtensions.cs @@ -1,56 +1,56 @@ -using System.Collections.Generic; -using System.Linq; -using Elsa.Models; - -namespace Elsa.Services.Extensions -{ - public static class WorkflowBlueprintExtensions - { - public static IEnumerable GetStartActivities(this WorkflowDefinition workflow) - { - var targetActivityIds = workflow.Connections.Select(x => x.Target.ActivityId).Distinct().ToLookup(x => x); - - var query = - from activity in workflow.Activities - where !targetActivityIds.Contains(activity.Id) - select activity; - - return query; - } - - public static ActivityDefinition GetActivity(this WorkflowDefinition workflowDefinition, string id) => workflowDefinition.Activities.FirstOrDefault(x => x.Id == id); - - public static IEnumerable GetInboundConnections(this WorkflowDefinition workflowDefinition, string activityId) - { - return workflowDefinition.Connections.Where(x => x.Target.ActivityId == activityId).ToList(); - } - - public static IEnumerable GetOutboundConnections(this WorkflowDefinition workflowDefinition, string activityId) - { - return workflowDefinition.Connections.Where(x => x.Source.ActivityId == activityId).ToList(); - } - - /// - /// Returns the full path of incoming activities. - /// - public static IEnumerable GetInboundActivityPath(this WorkflowDefinition workflowDefinition, string activityId) - { - return workflowDefinition.GetInboundActivityPathInternal(activityId, activityId).Distinct().ToList(); - } - - private static IEnumerable GetInboundActivityPathInternal(this WorkflowDefinition workflowDefinition, string activityId, string startingPointActivityId) - { - foreach (var connection in workflowDefinition.GetInboundConnections(activityId)) - { - // Circuit breaker: Detect workflows that implement repeating flows to prevent an infinite loop here. - if (connection.Source.ActivityId == startingPointActivityId) - yield break; - - yield return connection.Source.ActivityId; - - foreach (var parentActivityId in workflowDefinition.GetInboundActivityPathInternal(connection.Source.ActivityId, startingPointActivityId).Distinct()) - yield return parentActivityId; - } - } - } +using System.Collections.Generic; +using System.Linq; +using Elsa.Models; + +namespace Elsa.Services.Extensions +{ + public static class WorkflowBlueprintExtensions + { + public static IEnumerable GetStartActivities(this WorkflowDefinition workflow) + { + var destinationActivityIds = workflow.Connections.Select(x => x.DestinationActivityId).Distinct().ToLookup(x => x); + + var query = + from activity in workflow.Activities + where !destinationActivityIds.Contains(activity.Id) + select activity; + + return query; + } + + public static ActivityDefinition GetActivity(this WorkflowDefinition workflowDefinition, string id) => workflowDefinition.Activities.FirstOrDefault(x => x.Id == id); + + public static IEnumerable GetInboundConnections(this WorkflowDefinition workflowDefinition, string activityId) + { + return workflowDefinition.Connections.Where(x => x.DestinationActivityId == activityId).ToList(); + } + + public static IEnumerable GetOutboundConnections(this WorkflowDefinition workflowDefinition, string activityId) + { + return workflowDefinition.Connections.Where(x => x.SourceActivityId == activityId).ToList(); + } + + /// + /// Returns the full path of incoming activities. + /// + public static IEnumerable GetInboundActivityPath(this WorkflowDefinition workflowDefinition, string activityId) + { + return workflowDefinition.GetInboundActivityPathInternal(activityId, activityId).Distinct().ToList(); + } + + private static IEnumerable GetInboundActivityPathInternal(this WorkflowDefinition workflowDefinition, string activityId, string startingPointActivityId) + { + foreach (var connection in workflowDefinition.GetInboundConnections(activityId)) + { + // Circuit breaker: Detect workflows that implement repeating flows to prevent an infinite loop here. + if (connection.SourceActivityId == startingPointActivityId) + yield break; + + yield return connection.SourceActivityId; + + foreach (var parentActivityId in workflowDefinition.GetInboundActivityPathInternal(connection.SourceActivityId, startingPointActivityId).Distinct()) + yield return parentActivityId; + } + } + } } \ No newline at end of file diff --git a/src/core/Elsa.Core/Serialization/WorkflowSerializer.cs b/src/core/Elsa.Core/Serialization/WorkflowSerializer.cs index e45f556c7..aecbe71b8 100644 --- a/src/core/Elsa.Core/Serialization/WorkflowSerializer.cs +++ b/src/core/Elsa.Core/Serialization/WorkflowSerializer.cs @@ -19,10 +19,10 @@ namespace Elsa.Serialization jsonSerializer = serializerProvider.CreateJsonSerializer(); } - public string Serialize(WorkflowInstance workflowInstance, string format) + public string Serialize(T workflowInstance, string format) { var token = JObject.FromObject(workflowInstance, jsonSerializer); - return Serialize(token, format); + return Serialize((JToken)token, format); } public string Serialize(JToken token, string format) @@ -31,16 +31,16 @@ namespace Elsa.Serialization return formatter.ToString(token); } - public WorkflowInstance Deserialize(string data, string format) + public T Deserialize(string data, string format) { var formatter = formatters[format]; var token = formatter.FromString(data); - return Deserialize(token); + return Deserialize(token); } - public WorkflowInstance Deserialize(JToken token) + public T Deserialize(JToken token) { - return token.ToObject(jsonSerializer); + return token.ToObject(jsonSerializer); } } } \ No newline at end of file diff --git a/src/core/Elsa.Core/Services/WorkflowFactory.cs b/src/core/Elsa.Core/Services/WorkflowFactory.cs index 6dbd46bff..bb6ecb42f 100644 --- a/src/core/Elsa.Core/Services/WorkflowFactory.cs +++ b/src/core/Elsa.Core/Services/WorkflowFactory.cs @@ -49,7 +49,7 @@ namespace Elsa.Services private IActivity CreateActivity(ActivityDefinition definition) { - var activity = activityResolver.ResolveActivity(definition.TypeName); + var activity = activityResolver.ResolveActivity(definition.Type); activity.State = new JObject(definition.State); activity.Id = definition.Id; @@ -59,9 +59,9 @@ namespace Elsa.Services private Connection CreateConnection(ConnectionDefinition connectionDefinition, IDictionary activityDictionary) { - var source = activityDictionary[connectionDefinition.Source.ActivityId]; - var target = activityDictionary[connectionDefinition.Target.ActivityId]; - return new Connection(source, target, connectionDefinition.Source.Outcome); + var source = activityDictionary[connectionDefinition.SourceActivityId]; + var target = activityDictionary[connectionDefinition.DestinationActivityId]; + return new Connection(source, target, connectionDefinition.Outcome); } } } \ No newline at end of file diff --git a/src/core/Elsa.Core/Services/WorkflowRegistry.cs b/src/core/Elsa.Core/Services/WorkflowRegistry.cs index eae358b54..d16df3fa4 100644 --- a/src/core/Elsa.Core/Services/WorkflowRegistry.cs +++ b/src/core/Elsa.Core/Services/WorkflowRegistry.cs @@ -34,7 +34,7 @@ namespace Elsa.Services var query = from workflow in workflowDefinitions.Values from activity in workflow.GetStartActivities() - where activity.TypeName == activityType + where activity.Type == activityType select (workflow, activity); return query.Distinct();