Added some samples
This commit is contained in:
parent
60bfb4e7b2
commit
299d465570
28
Samples.sln
28
Samples.sln
|
|
@ -88,6 +88,14 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Server.GraphQL", "src\
|
|||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.Serialization", "src\samples\Elsa.Samples.Serialization\Elsa.Samples.Serialization.csproj", "{DF47517F-9029-44DF-A29F-F2DE15041473}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.HelloWorldConsole", "src\samples\Elsa.Samples.HelloWorldConsole\Elsa.Samples.HelloWorldConsole.csproj", "{E224F8CF-F9F5-4E99-B405-758F3C02C47A}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.HelloWorldHttp", "src\samples\Elsa.Samples.HelloWorldHttp\Elsa.Samples.HelloWorldHttp.csproj", "{A11D79AE-F4C9-4595-9B73-0E0AB221B90D}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.CustomActivities", "src\samples\Elsa.Samples.CustomActivities\Elsa.Samples.CustomActivities.csproj", "{554C21D7-10BE-48E6-B0EF-9FCA43B32A0F}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.TimeSheetApproval", "src\samples\Elsa.Samples.TimeSheetApproval\Elsa.Samples.TimeSheetApproval.csproj", "{1678743A-9095-4683-8DCD-5763F41924E2}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
|
|
@ -198,6 +206,22 @@ Global
|
|||
{DF47517F-9029-44DF-A29F-F2DE15041473}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{DF47517F-9029-44DF-A29F-F2DE15041473}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{DF47517F-9029-44DF-A29F-F2DE15041473}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{E224F8CF-F9F5-4E99-B405-758F3C02C47A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{E224F8CF-F9F5-4E99-B405-758F3C02C47A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{E224F8CF-F9F5-4E99-B405-758F3C02C47A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{E224F8CF-F9F5-4E99-B405-758F3C02C47A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{A11D79AE-F4C9-4595-9B73-0E0AB221B90D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{A11D79AE-F4C9-4595-9B73-0E0AB221B90D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{A11D79AE-F4C9-4595-9B73-0E0AB221B90D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{A11D79AE-F4C9-4595-9B73-0E0AB221B90D}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{554C21D7-10BE-48E6-B0EF-9FCA43B32A0F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{554C21D7-10BE-48E6-B0EF-9FCA43B32A0F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{554C21D7-10BE-48E6-B0EF-9FCA43B32A0F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{554C21D7-10BE-48E6-B0EF-9FCA43B32A0F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{1678743A-9095-4683-8DCD-5763F41924E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{1678743A-9095-4683-8DCD-5763F41924E2}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{1678743A-9095-4683-8DCD-5763F41924E2}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{1678743A-9095-4683-8DCD-5763F41924E2}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
|
@ -238,6 +262,10 @@ Global
|
|||
{150EF356-E8BC-4922-91C2-362017479409} = {600C4AE0-0585-4181-9CEC-2BB43430C713}
|
||||
{12D29DDC-A885-4CAA-908C-106D845B10C0} = {468E498C-59DB-4541-8D8A-0D89DE9083AB}
|
||||
{DF47517F-9029-44DF-A29F-F2DE15041473} = {5E5E1E84-DDBC-40D6-B891-0D563A15A44A}
|
||||
{E224F8CF-F9F5-4E99-B405-758F3C02C47A} = {5E5E1E84-DDBC-40D6-B891-0D563A15A44A}
|
||||
{A11D79AE-F4C9-4595-9B73-0E0AB221B90D} = {5E5E1E84-DDBC-40D6-B891-0D563A15A44A}
|
||||
{554C21D7-10BE-48E6-B0EF-9FCA43B32A0F} = {5E5E1E84-DDBC-40D6-B891-0D563A15A44A}
|
||||
{1678743A-9095-4683-8DCD-5763F41924E2} = {5E5E1E84-DDBC-40D6-B891-0D563A15A44A}
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {8B0975FD-7050-48B0-88C5-48C33378E158}
|
||||
|
|
|
|||
|
|
@ -17,6 +17,5 @@
|
|||
}
|
||||
|
||||
public object? Value { get; set; }
|
||||
public string Test { get; set; } = "Test";
|
||||
}
|
||||
}
|
||||
|
|
@ -25,7 +25,9 @@ namespace Elsa.Results
|
|||
|
||||
protected override void Execute(ActivityExecutionContext activityExecutionContext)
|
||||
{
|
||||
activityExecutionContext.Output = Output;
|
||||
if(Output != null)
|
||||
activityExecutionContext.Output = Output;
|
||||
|
||||
activityExecutionContext.Outcomes = Outcomes.ToList();
|
||||
|
||||
var workflowExecutionContext = activityExecutionContext.WorkflowExecutionContext;
|
||||
|
|
|
|||
|
|
@ -22,11 +22,11 @@ namespace Elsa.Expressions
|
|||
|
||||
public class CodeExpression<T> : CodeExpression, IWorkflowExpression<T>
|
||||
{
|
||||
public CodeExpression(Func<ActivityExecutionContext, T> expression) : base(context => expression(context))
|
||||
public CodeExpression(Func<ActivityExecutionContext, T> expression) : base(context => expression != null ? expression(context) : default)
|
||||
{
|
||||
}
|
||||
|
||||
public CodeExpression(Func<T> expression) : base(context => expression())
|
||||
public CodeExpression(Func<T> expression) : base(context => expression != null ? expression() : default)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -48,6 +48,6 @@ namespace Elsa.Expressions
|
|||
IWorkflowExpression<T> expression,
|
||||
ActivityExecutionContext context,
|
||||
CancellationToken cancellationToken = default)
|
||||
=> (T)await EvaluateAsync((IWorkflowExpression)expression, typeof(T), context, cancellationToken);
|
||||
=> (T)await EvaluateAsync(expression, typeof(T), context, cancellationToken);
|
||||
}
|
||||
}
|
||||
|
|
@ -116,8 +116,8 @@ namespace Microsoft.Extensions.DependencyInjection
|
|||
.AddTransient<IActivityResolver, ActivityResolver>()
|
||||
.AddTransient<IWorkflowProvider, StoreWorkflowProvider>()
|
||||
.AddTransient<IWorkflowProvider, CodeWorkflowProvider>()
|
||||
.AddTransient<WorkflowBuilder>()
|
||||
.AddTransient<Func<WorkflowBuilder>>(sp => sp.GetRequiredService<WorkflowBuilder>)
|
||||
.AddTransient<IWorkflowBuilder, WorkflowBuilder>()
|
||||
.AddTransient<Func<IWorkflowBuilder>>(sp => sp.GetRequiredService<IWorkflowBuilder>)
|
||||
.AddStartupTask<StartServiceBusTask>()
|
||||
.AddConsumer<RunWorkflow, RunWorkflowHandler>()
|
||||
.AddAutoMapperProfile<WorkflowDefinitionProfile>(ServiceLifetime.Singleton)
|
||||
|
|
|
|||
|
|
@ -15,9 +15,9 @@ namespace Elsa.WorkflowProviders
|
|||
public class CodeWorkflowProvider : IWorkflowProvider
|
||||
{
|
||||
private readonly IEnumerable<IWorkflow> workflows;
|
||||
private readonly Func<WorkflowBuilder> workflowBuilder;
|
||||
private readonly Func<IWorkflowBuilder> workflowBuilder;
|
||||
|
||||
public CodeWorkflowProvider(IEnumerable<IWorkflow> workflows, Func<WorkflowBuilder> workflowBuilder)
|
||||
public CodeWorkflowProvider(IEnumerable<IWorkflow> workflows, Func<IWorkflowBuilder> workflowBuilder)
|
||||
{
|
||||
this.workflows = workflows;
|
||||
this.workflowBuilder = workflowBuilder;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,28 @@
|
|||
using System.Linq;
|
||||
using System.Net;
|
||||
using Elsa.Activities.Http;
|
||||
using Elsa.Builders;
|
||||
using Elsa.Services.Models;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
|
||||
namespace Elsa.Samples.CustomActivities
|
||||
{
|
||||
public class EchoQueryStringWorkflow : IWorkflow
|
||||
{
|
||||
public void Build(IWorkflowBuilder builder)
|
||||
{
|
||||
builder
|
||||
.ReceiveHttpRequest("/hello")
|
||||
.Then<ReadQueryString>()
|
||||
.WriteHttpResponse(HttpStatusCode.OK, GenerateSomeHtml, "text/html");
|
||||
}
|
||||
|
||||
private string GenerateSomeHtml(ActivityExecutionContext context)
|
||||
{
|
||||
var query = (IQueryCollection) context.Input.Value; // the output of the previous activity will be available as input to this one.
|
||||
var items = query.Select(x => $"<li>{x.Key}: {x.Value}</li>");
|
||||
|
||||
return $"<ul>{string.Join("\n", items)}</ul>";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netcoreapp3.1</TargetFramework>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\core\Elsa\Elsa.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
14
src/samples/Elsa.Samples.CustomActivities/Program.cs
Normal file
14
src/samples/Elsa.Samples.CustomActivities/Program.cs
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
using Microsoft.AspNetCore.Hosting;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
|
||||
namespace Elsa.Samples.CustomActivities
|
||||
{
|
||||
public class Program
|
||||
{
|
||||
public static void Main(string[] args) => CreateHostBuilder(args).Build().Run();
|
||||
|
||||
public static IHostBuilder CreateHostBuilder(string[] args) =>
|
||||
Host.CreateDefaultBuilder(args)
|
||||
.ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });
|
||||
}
|
||||
}
|
||||
28
src/samples/Elsa.Samples.CustomActivities/ReadQueryString.cs
Normal file
28
src/samples/Elsa.Samples.CustomActivities/ReadQueryString.cs
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
using Elsa.Models;
|
||||
using Elsa.Results;
|
||||
using Elsa.Services;
|
||||
using Elsa.Services.Models;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
|
||||
namespace Elsa.Samples.CustomActivities
|
||||
{
|
||||
/// <summary>
|
||||
/// A basic activity that simply reads the query string and returns them as an output value for consumption by other activities.
|
||||
/// </summary>
|
||||
public class ReadQueryString : Activity
|
||||
{
|
||||
private readonly IHttpContextAccessor _httpContextAccessor;
|
||||
|
||||
public ReadQueryString(IHttpContextAccessor httpContextAccessor)
|
||||
{
|
||||
_httpContextAccessor = httpContextAccessor;
|
||||
}
|
||||
|
||||
protected override IActivityExecutionResult OnExecute(ActivityExecutionContext context)
|
||||
{
|
||||
var query = _httpContextAccessor.HttpContext.Request.Query;
|
||||
|
||||
return Done(Variable.From(query));
|
||||
}
|
||||
}
|
||||
}
|
||||
22
src/samples/Elsa.Samples.CustomActivities/Startup.cs
Normal file
22
src/samples/Elsa.Samples.CustomActivities/Startup.cs
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
using Microsoft.AspNetCore.Builder;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
|
||||
namespace Elsa.Samples.CustomActivities
|
||||
{
|
||||
public class Startup
|
||||
{
|
||||
public void ConfigureServices(IServiceCollection services)
|
||||
{
|
||||
services
|
||||
.AddElsa()
|
||||
.AddHttp()
|
||||
.AddActivity<ReadQueryString>()
|
||||
.AddWorkflow<EchoQueryStringWorkflow>();
|
||||
}
|
||||
|
||||
public void Configure(IApplicationBuilder app)
|
||||
{
|
||||
app.UseHttpActivities();
|
||||
}
|
||||
}
|
||||
}
|
||||
1
src/samples/Elsa.Samples.CustomActivities/hello.http
Normal file
1
src/samples/Elsa.Samples.CustomActivities/hello.http
Normal file
|
|
@ -0,0 +1 @@
|
|||
GET http://localhost:5000/hello?foo=bar&bar=baz
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>netcoreapp3.1</TargetFramework>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.1.1" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\core\Elsa\Elsa.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
36
src/samples/Elsa.Samples.HelloWorldConsole/Program.cs
Normal file
36
src/samples/Elsa.Samples.HelloWorldConsole/Program.cs
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
using System;
|
||||
using System.Threading.Tasks;
|
||||
using Elsa.Activities.Console;
|
||||
using Elsa.Builders;
|
||||
using Elsa.Services;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
|
||||
namespace Elsa.Samples.HelloWorldConsole
|
||||
{
|
||||
class Program
|
||||
{
|
||||
static async Task Main(string[] args)
|
||||
{
|
||||
// Create a service container with Elsa services.
|
||||
var services = new ServiceCollection()
|
||||
.AddElsa()
|
||||
.AddConsoleActivities()
|
||||
.AddSingleton(Console.In)
|
||||
.BuildServiceProvider();
|
||||
|
||||
// Build a new workflow.
|
||||
var workflow = services.GetService<IWorkflowBuilder>()
|
||||
.WriteLine("Hello World!")
|
||||
.WriteLine("What's your name?")
|
||||
.ReadLine()
|
||||
.WriteLine(context => $"Greetings, {context.Input.Value}!")
|
||||
.Build();
|
||||
|
||||
// Get the workflow host.
|
||||
var workflowHost = services.GetService<IWorkflowHost>();
|
||||
|
||||
// Execute the workflow.
|
||||
await workflowHost.RunWorkflowAsync(workflow);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netcoreapp3.1</TargetFramework>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\core\Elsa\Elsa.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
17
src/samples/Elsa.Samples.HelloWorldHttp/HelloHttpWorkflow.cs
Normal file
17
src/samples/Elsa.Samples.HelloWorldHttp/HelloHttpWorkflow.cs
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
using System.Net;
|
||||
using Elsa.Activities.Http;
|
||||
using Elsa.Activities.Primitives;
|
||||
using Elsa.Builders;
|
||||
|
||||
namespace Elsa.Samples.HelloWorldHttp
|
||||
{
|
||||
public class HelloHttpWorkflow : IWorkflow
|
||||
{
|
||||
public void Build(IWorkflowBuilder builder)
|
||||
{
|
||||
builder
|
||||
.ReceiveHttpRequest("/hello")
|
||||
.WriteHttpResponse(HttpStatusCode.OK, "Hello World!");
|
||||
}
|
||||
}
|
||||
}
|
||||
14
src/samples/Elsa.Samples.HelloWorldHttp/Program.cs
Normal file
14
src/samples/Elsa.Samples.HelloWorldHttp/Program.cs
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
using Microsoft.AspNetCore.Hosting;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
|
||||
namespace Elsa.Samples.HelloWorldHttp
|
||||
{
|
||||
public class Program
|
||||
{
|
||||
public static void Main(string[] args) => CreateHostBuilder(args).Build().Run();
|
||||
|
||||
public static IHostBuilder CreateHostBuilder(string[] args) =>
|
||||
Host.CreateDefaultBuilder(args)
|
||||
.ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });
|
||||
}
|
||||
}
|
||||
21
src/samples/Elsa.Samples.HelloWorldHttp/Startup.cs
Normal file
21
src/samples/Elsa.Samples.HelloWorldHttp/Startup.cs
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
using Microsoft.AspNetCore.Builder;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
|
||||
namespace Elsa.Samples.HelloWorldHttp
|
||||
{
|
||||
public class Startup
|
||||
{
|
||||
public void ConfigureServices(IServiceCollection services)
|
||||
{
|
||||
services
|
||||
.AddElsa()
|
||||
.AddHttp()
|
||||
.AddWorkflow<HelloHttpWorkflow>();
|
||||
}
|
||||
|
||||
public void Configure(IApplicationBuilder app)
|
||||
{
|
||||
app.UseHttpActivities();
|
||||
}
|
||||
}
|
||||
}
|
||||
1
src/samples/Elsa.Samples.HelloWorldHttp/hello.http
Normal file
1
src/samples/Elsa.Samples.HelloWorldHttp/hello.http
Normal file
|
|
@ -0,0 +1 @@
|
|||
GET http://localhost:5000/hello
|
||||
|
|
@ -18,8 +18,10 @@ namespace Elsa.Samples.Serialization
|
|||
.AddElsa()
|
||||
.AddConsoleActivities()
|
||||
.BuildServiceProvider();
|
||||
|
||||
var activityResolver = services.GetRequiredService<IActivityResolver>();
|
||||
var writeLine = activityResolver.ResolveActivity<WriteLine>().WithText(new LiteralExpression<string>("Foo"));
|
||||
|
||||
var workflowDefinition = new WorkflowDefinitionVersion
|
||||
{
|
||||
Activities = new List<ActivityDefinition> { ActivityDefinition.FromActivity(writeLine) }
|
||||
|
|
@ -30,8 +32,6 @@ namespace Elsa.Samples.Serialization
|
|||
|
||||
Console.WriteLine(json);
|
||||
|
||||
var workflowDefinition2 = serializer.Deserialize<WorkflowDefinitionVersion>(json, JsonTokenFormatter.FormatName);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>netcoreapp3.1</TargetFramework>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
||||
12
src/samples/Elsa.Samples.TimeSheetApproval/Program.cs
Normal file
12
src/samples/Elsa.Samples.TimeSheetApproval/Program.cs
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
using System;
|
||||
|
||||
namespace Elsa.Samples.TimeSheetApproval
|
||||
{
|
||||
class Program
|
||||
{
|
||||
static void Main(string[] args)
|
||||
{
|
||||
Console.WriteLine("Hello World!");
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue