Incremental work on serialization of workflow definitions and instances
This commit is contained in:
parent
1dd8db0c37
commit
e8b59aeb84
16
Samples.sln
16
Samples.sln
|
|
@ -50,10 +50,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Scripting.JavaScript",
|
|||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Scripting.Liquid", "src\scripting\Elsa.Scripting.Liquid\Elsa.Scripting.Liquid.csproj", "{01DC21DD-C6E2-4B21-864E-97D29448F777}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "utils", "utils", "{0D276728-DDA8-46A0-91A9-D44401D66DA9}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.AutoMapper.Extensions", "src\utils\Elsa.AutoMapper.Extensions\Elsa.AutoMapper.Extensions.csproj", "{102626A4-8BA6-45A8-A69C-F5EB1F155BE7}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Activities.Reflection", "src\activities\Elsa.Activities.Reflection\Elsa.Activities.Reflection.csproj", "{258F624E-98D7-4498-AE2E-F612D8ECA763}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "server", "server", "{468E498C-59DB-4541-8D8A-0D89DE9083AB}"
|
||||
|
|
@ -79,7 +75,6 @@ EndProject
|
|||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Persistence.MongoDb", "src\providers\Elsa.Persistence.MongoDb\Elsa.Persistence.MongoDb.csproj", "{36A6F881-1B40-438D-9B6D-80F01CE76D51}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Persistence.YesSql", "src\providers\Elsa.Persistence.YesSql\Elsa.Persistence.YesSql.csproj", "{DA825F41-EE97-47B3-801E-C694A6C53AEC}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sample18", "src\samples\Sample18\Sample18.csproj", "{616AA0BA-FBDD-4ABE-B688-A3F79F38C698}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.Timers", "src\samples\Elsa.Samples.Timers\Elsa.Samples.Timers.csproj", "{071DD6EC-D00C-4513-82B6-3FE8438061E3}"
|
||||
EndProject
|
||||
|
|
@ -151,14 +146,6 @@ Global
|
|||
{01DC21DD-C6E2-4B21-864E-97D29448F777}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{01DC21DD-C6E2-4B21-864E-97D29448F777}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{01DC21DD-C6E2-4B21-864E-97D29448F777}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{102626A4-8BA6-45A8-A69C-F5EB1F155BE7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{102626A4-8BA6-45A8-A69C-F5EB1F155BE7}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{102626A4-8BA6-45A8-A69C-F5EB1F155BE7}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{102626A4-8BA6-45A8-A69C-F5EB1F155BE7}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{616AA0BA-FBDD-4ABE-B688-A3F79F38C698}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{616AA0BA-FBDD-4ABE-B688-A3F79F38C698}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{616AA0BA-FBDD-4ABE-B688-A3F79F38C698}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{616AA0BA-FBDD-4ABE-B688-A3F79F38C698}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{2AEA0028-96D6-4823-A88F-24294E4BA4E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{2AEA0028-96D6-4823-A88F-24294E4BA4E8}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{2AEA0028-96D6-4823-A88F-24294E4BA4E8}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
|
|
@ -253,9 +240,6 @@ Global
|
|||
{6BB5EB72-AD9A-41ED-A6AA-0FF1093EA41B} = {35F44BE9-13D0-417C-A01A-F0787BEE6DC3}
|
||||
{18BE8F72-E528-4617-B1B1-07BD35337DFC} = {9C3C685E-3D7D-4638-A031-24F71CF74B52}
|
||||
{01DC21DD-C6E2-4B21-864E-97D29448F777} = {9C3C685E-3D7D-4638-A031-24F71CF74B52}
|
||||
{0D276728-DDA8-46A0-91A9-D44401D66DA9} = {DA71CDAA-8DD3-4D5F-9FBD-8E4B37A2D925}
|
||||
{102626A4-8BA6-45A8-A69C-F5EB1F155BE7} = {0D276728-DDA8-46A0-91A9-D44401D66DA9}
|
||||
{616AA0BA-FBDD-4ABE-B688-A3F79F38C698} = {5E5E1E84-DDBC-40D6-B891-0D563A15A44A}
|
||||
{2AEA0028-96D6-4823-A88F-24294E4BA4E8} = {5E5E1E84-DDBC-40D6-B891-0D563A15A44A}
|
||||
{258F624E-98D7-4498-AE2E-F612D8ECA763} = {B43B546E-23F3-46E8-ACB7-D04F05CDA180}
|
||||
{468E498C-59DB-4541-8D8A-0D89DE9083AB} = {DA71CDAA-8DD3-4D5F-9FBD-8E4B37A2D925}
|
||||
|
|
|
|||
|
|
@ -1,19 +0,0 @@
|
|||
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
|
||||
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/WRAP_LINES/@EntryValue">False</s:Boolean>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=EF/@EntryIndexedValue">EF</s:String>
|
||||
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=QL/@EntryIndexedValue">QL</s:String>
|
||||
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpKeepExistingMigration/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpPlaceEmbeddedOnSameLineMigration/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpUseContinuousIndentInsideBracesMigration/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EMigrateBlankLinesAroundFieldToBlankLinesAroundProperty/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Autofixture/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Comparers/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Configurer/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Jint/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Mediat/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=mediatr/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=persistable/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Timesheet/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Workflows/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=workflow_0027s/@EntryIndexedValue">True</s:Boolean>
|
||||
</wpf:ResourceDictionary>
|
||||
|
|
@ -5,6 +5,6 @@ namespace Elsa.Activities.Console
|
|||
{
|
||||
public static class ReadLineBuilderExtensions
|
||||
{
|
||||
public static ActivityBuilder ReadLine(this IBuilder builder) => builder.Then<ReadLine>();
|
||||
public static IActivityBuilder ReadLine(this IBuilder builder) => builder.Then<ReadLine>();
|
||||
}
|
||||
}
|
||||
|
|
@ -8,11 +8,11 @@ namespace Elsa.Activities.Console
|
|||
{
|
||||
public static class WriteLineBuilderExtensions
|
||||
{
|
||||
public static OutcomeBuilder WriteLine(this IBuilder builder, Action<WriteLine> setup) => WriteLine(builder.Then(setup));
|
||||
public static OutcomeBuilder WriteLine(this IBuilder builder, IWorkflowExpression<string> text) => builder.WriteLine(a => a.WithText(text));
|
||||
public static OutcomeBuilder WriteLine(this IBuilder builder, Func<ActivityExecutionContext, string> text) => builder.WriteLine(new CodeExpression<string>(text));
|
||||
public static OutcomeBuilder WriteLine(this IBuilder builder, Func<string> text) => builder.WriteLine(new CodeExpression<string>(text));
|
||||
public static OutcomeBuilder WriteLine(this IBuilder builder, string text) => builder.WriteLine(new CodeExpression<string>(text));
|
||||
private static OutcomeBuilder WriteLine(ActivityBuilder writeLine) => writeLine.When(OutcomeNames.Done);
|
||||
public static IOutcomeBuilder WriteLine(this IBuilder builder, Action<WriteLine> setup) => WriteLine(builder.Then(setup));
|
||||
public static IOutcomeBuilder WriteLine(this IBuilder builder, IWorkflowExpression<string> text) => builder.WriteLine(a => a.WithText(text));
|
||||
public static IOutcomeBuilder WriteLine(this IBuilder builder, Func<ActivityExecutionContext, string> text) => builder.WriteLine(new CodeExpression<string>(text));
|
||||
public static IOutcomeBuilder WriteLine(this IBuilder builder, Func<string> text) => builder.WriteLine(new CodeExpression<string>(text));
|
||||
public static IOutcomeBuilder WriteLine(this IBuilder builder, string text) => builder.WriteLine(new CodeExpression<string>(text));
|
||||
private static IOutcomeBuilder WriteLine(IActivityBuilder writeLine) => writeLine.When(OutcomeNames.Done);
|
||||
}
|
||||
}
|
||||
|
|
@ -9,12 +9,12 @@ namespace Elsa.Activities.Http
|
|||
{
|
||||
public static class SendEmailBuilderExtensions
|
||||
{
|
||||
public static ActivityBuilder SendEmail(
|
||||
public static IActivityBuilder SendEmail(
|
||||
this IBuilder builder,
|
||||
Action<SendEmail> setup
|
||||
) => builder.Then(setup);
|
||||
|
||||
public static ActivityBuilder SendEmail(
|
||||
public static IActivityBuilder SendEmail(
|
||||
this IBuilder builder,
|
||||
IWorkflowExpression<string> from = default,
|
||||
IWorkflowExpression<string> to = default,
|
||||
|
|
@ -26,7 +26,7 @@ namespace Elsa.Activities.Http
|
|||
.WithSubject(subject)
|
||||
.WithBody(body));
|
||||
|
||||
public static ActivityBuilder SendEmail(
|
||||
public static IActivityBuilder SendEmail(
|
||||
this IBuilder builder,
|
||||
Func<ActivityExecutionContext, string> from = default,
|
||||
Func<ActivityExecutionContext, string> to = default,
|
||||
|
|
@ -38,7 +38,7 @@ namespace Elsa.Activities.Http
|
|||
.WithSubject(subject)
|
||||
.WithBody(body));
|
||||
|
||||
public static ActivityBuilder SendEmail(
|
||||
public static IActivityBuilder SendEmail(
|
||||
this IBuilder builder,
|
||||
Func<string> from = default,
|
||||
Func<string> to = default,
|
||||
|
|
@ -50,7 +50,7 @@ namespace Elsa.Activities.Http
|
|||
.WithSubject(subject)
|
||||
.WithBody(body));
|
||||
|
||||
public static ActivityBuilder SendEmail(
|
||||
public static IActivityBuilder SendEmail(
|
||||
this IBuilder builder,
|
||||
string from = default,
|
||||
string to = default,
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ namespace Elsa.Activities.Http
|
|||
{
|
||||
public static class ReceiveHttpRequestBuilderExtensions
|
||||
{
|
||||
public static ActivityBuilder ReceiveHttpRequest(
|
||||
public static IActivityBuilder ReceiveHttpRequest(
|
||||
this IBuilder builder,
|
||||
PathString path,
|
||||
string method = default,
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
using System;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Elsa.Activities.Http.Results;
|
||||
|
|
@ -31,9 +32,9 @@ namespace Elsa.Activities.Http
|
|||
private IStringLocalizer<Redirect> T { get; }
|
||||
|
||||
[ActivityProperty(Hint = "The URL to redirect to (HTTP 302).")]
|
||||
public IWorkflowExpression<PathString> Location
|
||||
public IWorkflowExpression<Uri> Location
|
||||
{
|
||||
get => GetState<IWorkflowExpression<PathString>>();
|
||||
get => GetState<IWorkflowExpression<Uri>>();
|
||||
set => SetState(value);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
using System;
|
||||
using Elsa.Builders;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
|
||||
|
|
@ -6,9 +7,9 @@ namespace Elsa.Activities.Http
|
|||
{
|
||||
public static class RedirectBuilderExtensions
|
||||
{
|
||||
public static ActivityBuilder Redirect(
|
||||
public static IActivityBuilder Redirect(
|
||||
this IBuilder builder,
|
||||
PathString location,
|
||||
Uri location,
|
||||
bool permanent = default) => builder.Then<Redirect>(x => x
|
||||
.WithLocation(location)
|
||||
.WithPermanent(permanent));
|
||||
|
|
|
|||
|
|
@ -9,10 +9,10 @@ namespace Elsa.Activities.Http
|
|||
{
|
||||
public static class RedirectExtensions
|
||||
{
|
||||
public static Redirect WithLocation(this Redirect activity, IWorkflowExpression<PathString> value) => activity.With(x => x.Location, value);
|
||||
public static Redirect WithLocation(this Redirect activity, Func<ActivityExecutionContext, PathString> value) => activity.With(x => x.Location, new CodeExpression<PathString>(value));
|
||||
public static Redirect WithLocation(this Redirect activity, Func<PathString> value) => activity.With(x => x.Location, new CodeExpression<PathString>(value));
|
||||
public static Redirect WithLocation(this Redirect activity, PathString value) => activity.With(x => x.Location, new CodeExpression<PathString>(value));
|
||||
public static Redirect WithLocation(this Redirect activity, IWorkflowExpression<Uri> value) => activity.With(x => x.Location, value);
|
||||
public static Redirect WithLocation(this Redirect activity, Func<ActivityExecutionContext, Uri> value) => activity.With(x => x.Location, new CodeExpression<Uri>(value));
|
||||
public static Redirect WithLocation(this Redirect activity, Func<Uri> value) => activity.With(x => x.Location, new CodeExpression<Uri>(value));
|
||||
public static Redirect WithLocation(this Redirect activity, Uri value) => activity.With(x => x.Location, new CodeExpression<Uri>(value));
|
||||
public static Redirect WithPermanent(this Redirect activity, bool value) => activity.With(x => x.Permanent, value);
|
||||
}
|
||||
}
|
||||
|
|
@ -11,7 +11,7 @@ namespace Elsa.Activities.Http
|
|||
{
|
||||
public static class SendHttpRequestBuilderExtensions
|
||||
{
|
||||
public static ActivityBuilder SendHttpRequest(
|
||||
public static IActivityBuilder SendHttpRequest(
|
||||
this IBuilder builder,
|
||||
PathString url,
|
||||
string? method,
|
||||
|
|
@ -31,7 +31,7 @@ namespace Elsa.Activities.Http
|
|||
.WithRequestHeaders(headers)
|
||||
.WithReadContent(readContent));
|
||||
|
||||
public static ActivityBuilder SendHttpRequest(
|
||||
public static IActivityBuilder SendHttpRequest(
|
||||
this IBuilder builder,
|
||||
PathString url,
|
||||
string? method,
|
||||
|
|
@ -51,7 +51,7 @@ namespace Elsa.Activities.Http
|
|||
.WithRequestHeaders(headers)
|
||||
.WithReadContent(readContent));
|
||||
|
||||
public static ActivityBuilder SendHttpRequest(
|
||||
public static IActivityBuilder SendHttpRequest(
|
||||
this IBuilder builder,
|
||||
PathString url,
|
||||
string? method,
|
||||
|
|
@ -71,7 +71,7 @@ namespace Elsa.Activities.Http
|
|||
.WithRequestHeaders(headers)
|
||||
.WithReadContent(readContent));
|
||||
|
||||
public static ActivityBuilder SendHttpRequest(
|
||||
public static IActivityBuilder SendHttpRequest(
|
||||
this IBuilder builder,
|
||||
PathString url,
|
||||
string? method,
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ namespace Elsa.Activities.Http
|
|||
{
|
||||
public static class WriteHttpResponseBuilderExtensions
|
||||
{
|
||||
public static ActivityBuilder WriteHttpResponse(
|
||||
public static IActivityBuilder WriteHttpResponse(
|
||||
this IBuilder builder,
|
||||
HttpStatusCode statusCode,
|
||||
IWorkflowExpression<string> content = default,
|
||||
|
|
@ -22,7 +22,7 @@ namespace Elsa.Activities.Http
|
|||
.WithContentType(contentType)
|
||||
.WithResponseHeaders(headers));
|
||||
|
||||
public static ActivityBuilder WriteHttpResponse(
|
||||
public static IActivityBuilder WriteHttpResponse(
|
||||
this IBuilder builder,
|
||||
HttpStatusCode statusCode,
|
||||
Func<ActivityExecutionContext, string> content = default,
|
||||
|
|
@ -34,7 +34,7 @@ namespace Elsa.Activities.Http
|
|||
.WithContentType(contentType)
|
||||
.WithResponseHeaders(headers));
|
||||
|
||||
public static ActivityBuilder WriteHttpResponse(
|
||||
public static IActivityBuilder WriteHttpResponse(
|
||||
this IBuilder builder,
|
||||
HttpStatusCode statusCode,
|
||||
Func<string> content = default,
|
||||
|
|
@ -46,7 +46,7 @@ namespace Elsa.Activities.Http
|
|||
.WithContentType(contentType)
|
||||
.WithResponseHeaders(headers));
|
||||
|
||||
public static ActivityBuilder WriteHttpResponse(
|
||||
public static IActivityBuilder WriteHttpResponse(
|
||||
this IBuilder builder,
|
||||
HttpStatusCode statusCode,
|
||||
string content = default,
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
using System;
|
||||
using Elsa.Results;
|
||||
using Elsa.Services.Models;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
|
|
@ -8,20 +9,20 @@ namespace Elsa.Activities.Http.Results
|
|||
{
|
||||
private readonly IHttpContextAccessor httpContextAccessor;
|
||||
|
||||
public RedirectResult(IHttpContextAccessor httpContextAccessor, PathString location, bool permanent)
|
||||
public RedirectResult(IHttpContextAccessor httpContextAccessor, Uri location, bool permanent)
|
||||
{
|
||||
Location = location;
|
||||
Permanent = permanent;
|
||||
this.httpContextAccessor = httpContextAccessor;
|
||||
}
|
||||
|
||||
public PathString Location { get; }
|
||||
public Uri Location { get; }
|
||||
public bool Permanent { get; }
|
||||
|
||||
protected override void Execute(ActivityExecutionContext activityExecutionContext)
|
||||
{
|
||||
var response = httpContextAccessor.HttpContext.Response;
|
||||
response.Redirect(Location, Permanent);
|
||||
response.Redirect(Location.ToString(), Permanent);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -8,10 +8,10 @@ namespace Elsa.Activities.MassTransit
|
|||
{
|
||||
public static class CancelScheduledMassTransitMessageBuilderExtensions
|
||||
{
|
||||
public static ActivityBuilder CancelScheduledMassTransitMessage(this IBuilder builder, Action<CancelScheduledMassTransitMessage>? setup = default) => builder.Then(setup);
|
||||
public static ActivityBuilder CancelScheduledMassTransitMessage(this IBuilder builder, IWorkflowExpression<Guid> value) => builder.CancelScheduledMassTransitMessage(x => x.WithTokenId(value));
|
||||
public static ActivityBuilder CancelScheduledMassTransitMessage(this IBuilder builder, Func<ActivityExecutionContext, Guid> value) => builder.CancelScheduledMassTransitMessage(x => x.WithTokenId(value));
|
||||
public static ActivityBuilder CancelScheduledMassTransitMessage(this IBuilder builder, Func<Guid> value) => builder.CancelScheduledMassTransitMessage(x => x.WithTokenId(value));
|
||||
public static ActivityBuilder CancelScheduledMassTransitMessage(this IBuilder builder, Guid value) => builder.CancelScheduledMassTransitMessage(x => x.WithTokenId(value));
|
||||
public static IActivityBuilder CancelScheduledMassTransitMessage(this IBuilder builder, Action<CancelScheduledMassTransitMessage>? setup = default) => builder.Then(setup);
|
||||
public static IActivityBuilder CancelScheduledMassTransitMessage(this IBuilder builder, IWorkflowExpression<Guid> value) => builder.CancelScheduledMassTransitMessage(x => x.WithTokenId(value));
|
||||
public static IActivityBuilder CancelScheduledMassTransitMessage(this IBuilder builder, Func<ActivityExecutionContext, Guid> value) => builder.CancelScheduledMassTransitMessage(x => x.WithTokenId(value));
|
||||
public static IActivityBuilder CancelScheduledMassTransitMessage(this IBuilder builder, Func<Guid> value) => builder.CancelScheduledMassTransitMessage(x => x.WithTokenId(value));
|
||||
public static IActivityBuilder CancelScheduledMassTransitMessage(this IBuilder builder, Guid value) => builder.CancelScheduledMassTransitMessage(x => x.WithTokenId(value));
|
||||
}
|
||||
}
|
||||
|
|
@ -8,10 +8,10 @@ namespace Elsa.Activities.MassTransit
|
|||
{
|
||||
public static class PublishMassTransitMessageBuilderExtensions
|
||||
{
|
||||
public static ActivityBuilder PublishMassTransitMessage(this IBuilder builder, Action<PublishMassTransitMessage>? setup = default) => builder.Then(setup);
|
||||
public static ActivityBuilder PublishMassTransitMessage(this IBuilder builder, IWorkflowExpression message) => builder.PublishMassTransitMessage(x => x.WithMessage(message));
|
||||
public static ActivityBuilder PublishMassTransitMessage<T>(this IBuilder builder, Func<ActivityExecutionContext, T> message) => builder.PublishMassTransitMessage(x => x.WithMessage(message));
|
||||
public static ActivityBuilder PublishMassTransitMessage<T>(this IBuilder builder, Func<T> message) => builder.PublishMassTransitMessage(x => x.WithMessage(message));
|
||||
public static ActivityBuilder PublishMassTransitMessage<T>(this IBuilder builder, T message) => builder.PublishMassTransitMessage(x => x.WithMessage(message));
|
||||
public static IActivityBuilder PublishMassTransitMessage(this IBuilder builder, Action<PublishMassTransitMessage>? setup = default) => builder.Then(setup);
|
||||
public static IActivityBuilder PublishMassTransitMessage(this IBuilder builder, IWorkflowExpression message) => builder.PublishMassTransitMessage(x => x.WithMessage(message));
|
||||
public static IActivityBuilder PublishMassTransitMessage<T>(this IBuilder builder, Func<ActivityExecutionContext, T> message) => builder.PublishMassTransitMessage(x => x.WithMessage(message));
|
||||
public static IActivityBuilder PublishMassTransitMessage<T>(this IBuilder builder, Func<T> message) => builder.PublishMassTransitMessage(x => x.WithMessage(message));
|
||||
public static IActivityBuilder PublishMassTransitMessage<T>(this IBuilder builder, T message) => builder.PublishMassTransitMessage(x => x.WithMessage(message));
|
||||
}
|
||||
}
|
||||
|
|
@ -6,8 +6,8 @@ namespace Elsa.Activities.MassTransit
|
|||
{
|
||||
public static class ReceiveMassTransitMessageBuilderExtensions
|
||||
{
|
||||
public static ActivityBuilder ReceiveMassTransitMessage(this IBuilder builder, Action<ReceiveMassTransitMessage>? setup = default) => builder.Then(setup);
|
||||
public static ActivityBuilder ReceiveMassTransitMessage(this IBuilder builder, Type messageType) => builder.ReceiveMassTransitMessage(x => x.WithMessageType(messageType));
|
||||
public static ActivityBuilder ReceiveMassTransitMessage<T>(this IBuilder builder, Type messageType) => builder.ReceiveMassTransitMessage(x => x.WithMessageType<T>());
|
||||
public static IActivityBuilder ReceiveMassTransitMessage(this IBuilder builder, Action<ReceiveMassTransitMessage>? setup = default) => builder.Then(setup);
|
||||
public static IActivityBuilder ReceiveMassTransitMessage(this IBuilder builder, Type messageType) => builder.ReceiveMassTransitMessage(x => x.WithMessageType(messageType));
|
||||
public static IActivityBuilder ReceiveMassTransitMessage<T>(this IBuilder builder, Type messageType) => builder.ReceiveMassTransitMessage(x => x.WithMessageType<T>());
|
||||
}
|
||||
}
|
||||
|
|
@ -9,9 +9,9 @@ namespace Elsa.Activities.MassTransit
|
|||
{
|
||||
public static class ScheduleSendMassTransitMessageBuilderExtensions
|
||||
{
|
||||
public static ActivityBuilder ScheduleSendMassTransitMessage(this IBuilder builder, Action<ScheduleSendMassTransitMessage>? setup = default) => builder.Then(setup);
|
||||
public static IActivityBuilder ScheduleSendMassTransitMessage(this IBuilder builder, Action<ScheduleSendMassTransitMessage>? setup = default) => builder.Then(setup);
|
||||
|
||||
public static ActivityBuilder ScheduleSendMassTransitMessage(
|
||||
public static IActivityBuilder ScheduleSendMassTransitMessage(
|
||||
this IBuilder builder,
|
||||
IWorkflowExpression message,
|
||||
Uri endpointAddress,
|
||||
|
|
@ -21,7 +21,7 @@ namespace Elsa.Activities.MassTransit
|
|||
.WithEndpointAddress(endpointAddress)
|
||||
.WithScheduledTime(scheduledTime));
|
||||
|
||||
public static ActivityBuilder ScheduleSendMassTransitMessage(
|
||||
public static IActivityBuilder ScheduleSendMassTransitMessage(
|
||||
this IBuilder builder,
|
||||
Func<ActivityExecutionContext, object> message,
|
||||
Uri endpointAddress,
|
||||
|
|
@ -31,7 +31,7 @@ namespace Elsa.Activities.MassTransit
|
|||
.WithEndpointAddress(endpointAddress)
|
||||
.WithScheduledTime(scheduledTime));
|
||||
|
||||
public static ActivityBuilder ScheduleSendMassTransitMessage(
|
||||
public static IActivityBuilder ScheduleSendMassTransitMessage(
|
||||
this IBuilder builder,
|
||||
Func<object> message,
|
||||
Uri endpointAddress,
|
||||
|
|
@ -41,7 +41,7 @@ namespace Elsa.Activities.MassTransit
|
|||
.WithEndpointAddress(endpointAddress)
|
||||
.WithScheduledTime(scheduledTime));
|
||||
|
||||
public static ActivityBuilder ScheduleSendMassTransitMessage(
|
||||
public static IActivityBuilder ScheduleSendMassTransitMessage(
|
||||
this IBuilder builder,
|
||||
object message,
|
||||
Uri endpointAddress,
|
||||
|
|
|
|||
|
|
@ -8,9 +8,9 @@ namespace Elsa.Activities.MassTransit
|
|||
{
|
||||
public static class SendMassTransitMessageBuilderExtensions
|
||||
{
|
||||
public static ActivityBuilder SendMassTransitMessage(this IBuilder builder, Action<SendMassTransitMessage>? setup = default) => builder.Then(setup);
|
||||
public static IActivityBuilder SendMassTransitMessage(this IBuilder builder, Action<SendMassTransitMessage>? setup = default) => builder.Then(setup);
|
||||
|
||||
public static ActivityBuilder SendMassTransitMessage(
|
||||
public static IActivityBuilder SendMassTransitMessage(
|
||||
this IBuilder builder,
|
||||
IWorkflowExpression message,
|
||||
Uri endpointAddress) =>
|
||||
|
|
@ -18,7 +18,7 @@ namespace Elsa.Activities.MassTransit
|
|||
.WithMessage(message)
|
||||
.WithEndpointAddress(endpointAddress));
|
||||
|
||||
public static ActivityBuilder SendMassTransitMessage(
|
||||
public static IActivityBuilder SendMassTransitMessage(
|
||||
this IBuilder builder,
|
||||
Func<ActivityExecutionContext, object> message,
|
||||
Uri endpointAddress) =>
|
||||
|
|
@ -26,7 +26,7 @@ namespace Elsa.Activities.MassTransit
|
|||
.WithMessage(message)
|
||||
.WithEndpointAddress(endpointAddress));
|
||||
|
||||
public static ActivityBuilder SendMassTransitMessage(
|
||||
public static IActivityBuilder SendMassTransitMessage(
|
||||
this IBuilder builder,
|
||||
Func<object> message,
|
||||
Uri endpointAddress) =>
|
||||
|
|
@ -34,7 +34,7 @@ namespace Elsa.Activities.MassTransit
|
|||
.WithMessage(message)
|
||||
.WithEndpointAddress(endpointAddress));
|
||||
|
||||
public static ActivityBuilder SendMassTransitMessages(
|
||||
public static IActivityBuilder SendMassTransitMessages(
|
||||
this IBuilder builder,
|
||||
object message,
|
||||
Uri endpointAddress) =>
|
||||
|
|
|
|||
|
|
@ -27,13 +27,9 @@ namespace Elsa.Activities.Timers
|
|||
}
|
||||
|
||||
[ActivityProperty(Hint = "Specify a CRON expression. See https://crontab.guru/ for help.")]
|
||||
public IWorkflowExpression<string> CronExpression
|
||||
{
|
||||
get => GetState<IWorkflowExpression<string>>(() => new LiteralExpression<string>("* * * * *"));
|
||||
set => SetState(value);
|
||||
}
|
||||
public IWorkflowExpression<string> CronExpression { get; set; } = new CodeExpression<string>("* * * * *");
|
||||
|
||||
public Instant? StartTime
|
||||
private Instant? StartTime
|
||||
{
|
||||
get => GetState<Instant?>();
|
||||
set => SetState(value);
|
||||
|
|
|
|||
|
|
@ -9,10 +9,10 @@ namespace Elsa.Activities.MassTransit
|
|||
{
|
||||
public static class CronEventBuilderExtensions
|
||||
{
|
||||
public static ActivityBuilder CronEvent(this IBuilder builder, Action<CronEvent>? setup = default) => builder.Then(setup);
|
||||
public static ActivityBuilder CronEvent(this IBuilder builder, IWorkflowExpression<string> cronExpression) => builder.CronEvent(x => x.WithCronExpression(cronExpression));
|
||||
public static ActivityBuilder CronEvent(this IBuilder builder, Func<ActivityExecutionContext, string> cronExpression) => builder.CronEvent(x => x.WithCronExpression(cronExpression));
|
||||
public static ActivityBuilder CronEvent(this IBuilder builder, Func<string> cronExpression) => builder.CronEvent(x => x.WithCronExpression(cronExpression));
|
||||
public static ActivityBuilder CronEvent(this IBuilder builder, string cronExpression) => builder.CronEvent(x => x.WithCronExpression(cronExpression));
|
||||
public static IActivityBuilder CronEvent(this IBuilder builder, Action<CronEvent>? setup = default) => builder.Then(setup);
|
||||
public static IActivityBuilder CronEvent(this IBuilder builder, IWorkflowExpression<string> cronExpression) => builder.CronEvent(x => x.WithCronExpression(cronExpression));
|
||||
public static IActivityBuilder CronEvent(this IBuilder builder, Func<ActivityExecutionContext, string> cronExpression) => builder.CronEvent(x => x.WithCronExpression(cronExpression));
|
||||
public static IActivityBuilder CronEvent(this IBuilder builder, Func<string> cronExpression) => builder.CronEvent(x => x.WithCronExpression(cronExpression));
|
||||
public static IActivityBuilder CronEvent(this IBuilder builder, string cronExpression) => builder.CronEvent(x => x.WithCronExpression(cronExpression));
|
||||
}
|
||||
}
|
||||
|
|
@ -10,10 +10,10 @@ namespace Elsa.Activities.MassTransit
|
|||
{
|
||||
public static class InstantEventBuilderExtensions
|
||||
{
|
||||
public static ActivityBuilder InstantEvent(this IBuilder builder, Action<InstantEvent>? setup = default) => builder.Then(setup);
|
||||
public static ActivityBuilder InstantEvent(this IBuilder builder, IWorkflowExpression<Instant> instant) => builder.InstantEvent(x => x.WithInstant(instant));
|
||||
public static ActivityBuilder InstantEvent(this IBuilder builder, Func<ActivityExecutionContext, Instant> instant) => builder.InstantEvent(x => x.WithInstant(instant));
|
||||
public static ActivityBuilder InstantEvent(this IBuilder builder, Func<Instant> instant) => builder.InstantEvent(x => x.WithInstant(instant));
|
||||
public static ActivityBuilder InstantEvent(this IBuilder builder, Instant instant) => builder.InstantEvent(x => x.WithInstant(instant));
|
||||
public static IActivityBuilder InstantEvent(this IBuilder builder, Action<InstantEvent>? setup = default) => builder.Then(setup);
|
||||
public static IActivityBuilder InstantEvent(this IBuilder builder, IWorkflowExpression<Instant> instant) => builder.InstantEvent(x => x.WithInstant(instant));
|
||||
public static IActivityBuilder InstantEvent(this IBuilder builder, Func<ActivityExecutionContext, Instant> instant) => builder.InstantEvent(x => x.WithInstant(instant));
|
||||
public static IActivityBuilder InstantEvent(this IBuilder builder, Func<Instant> instant) => builder.InstantEvent(x => x.WithInstant(instant));
|
||||
public static IActivityBuilder InstantEvent(this IBuilder builder, Instant instant) => builder.InstantEvent(x => x.WithInstant(instant));
|
||||
}
|
||||
}
|
||||
|
|
@ -24,13 +24,16 @@ namespace Elsa.Activities.Timers
|
|||
}
|
||||
|
||||
[ActivityProperty(Hint = "An expression that evaluates to a Duration value")]
|
||||
public IWorkflowExpression<Duration> Timeout
|
||||
{
|
||||
get => GetState<IWorkflowExpression<Duration>>(() => new LiteralExpression<Duration>("00:01:00"));
|
||||
set => SetState(value);
|
||||
}
|
||||
|
||||
public Instant? StartTime
|
||||
public IWorkflowExpression<Duration> Timeout { get; set; }
|
||||
|
||||
// [ActivityProperty(Hint = "An expression that evaluates to a Duration value")]
|
||||
// public IWorkflowExpression<Duration> Timeout
|
||||
// {
|
||||
// get => GetState<IWorkflowExpression<Duration>>(() => new LiteralExpression<Duration>("00:01:00"));
|
||||
// set => SetState(value);
|
||||
// }
|
||||
|
||||
private Instant? StartTime
|
||||
{
|
||||
get => GetState<Instant?>();
|
||||
set => SetState(value);
|
||||
|
|
|
|||
|
|
@ -10,10 +10,10 @@ namespace Elsa.Activities.MassTransit
|
|||
{
|
||||
public static class TimerEventBuilderExtensions
|
||||
{
|
||||
public static ActivityBuilder TimerEvent(this IBuilder builder, Action<TimerEvent>? setup = default) => builder.Then(setup);
|
||||
public static ActivityBuilder TimerEvent(this IBuilder builder, IWorkflowExpression<Duration> value) => builder.TimerEvent(x => x.WithTimeout(value));
|
||||
public static ActivityBuilder TimerEvent(this IBuilder builder, Func<ActivityExecutionContext, Duration> value) => builder.TimerEvent(x => x.WithTimeout(value));
|
||||
public static ActivityBuilder TimerEvent(this IBuilder builder, Func<Duration> value) => builder.TimerEvent(x => x.WithTimeout(value));
|
||||
public static ActivityBuilder TimerEvent(this IBuilder builder, Duration value) => builder.TimerEvent(x => x.WithTimeout(value));
|
||||
public static IActivityBuilder TimerEvent(this IBuilder builder, Action<TimerEvent>? setup = default) => builder.Then(setup);
|
||||
public static IActivityBuilder TimerEvent(this IBuilder builder, IWorkflowExpression<Duration> value) => builder.TimerEvent(x => x.WithTimeout(value));
|
||||
public static IActivityBuilder TimerEvent(this IBuilder builder, Func<ActivityExecutionContext, Duration> value) => builder.TimerEvent(x => x.WithTimeout(value));
|
||||
public static IActivityBuilder TimerEvent(this IBuilder builder, Func<Duration> value) => builder.TimerEvent(x => x.WithTimeout(value));
|
||||
public static IActivityBuilder TimerEvent(this IBuilder builder, Duration value) => builder.TimerEvent(x => x.WithTimeout(value));
|
||||
}
|
||||
}
|
||||
17
src/core/Elsa.Abstractions/Builders/IActivityBuilder.cs
Normal file
17
src/core/Elsa.Abstractions/Builders/IActivityBuilder.cs
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
using System;
|
||||
using Elsa.Services;
|
||||
using Elsa.Services.Models;
|
||||
|
||||
namespace Elsa.Builders
|
||||
{
|
||||
public interface IActivityBuilder : IBuilder
|
||||
{
|
||||
IWorkflowBuilder WorkflowBuilder { get; }
|
||||
IActivity Activity { get; }
|
||||
IActivityBuilder Add<T>(Action<T>? setup = default) where T : class, IActivity;
|
||||
IOutcomeBuilder When(string? outcome);
|
||||
IActivityBuilder Then(IActivityBuilder targetActivity);
|
||||
IActivity BuildActivity();
|
||||
Workflow Build();
|
||||
}
|
||||
}
|
||||
11
src/core/Elsa.Abstractions/Builders/IBuilder.cs
Normal file
11
src/core/Elsa.Abstractions/Builders/IBuilder.cs
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
using System;
|
||||
using Elsa.Services;
|
||||
|
||||
namespace Elsa.Builders
|
||||
{
|
||||
public interface IBuilder
|
||||
{
|
||||
IActivityBuilder Then<T>(Action<T>? setup = default, Action<IActivityBuilder>? branch = default) where T : class, IActivity;
|
||||
IActivityBuilder Then<T>(T activity, Action<IActivityBuilder>? branch = default) where T : class, IActivity;
|
||||
}
|
||||
}
|
||||
14
src/core/Elsa.Abstractions/Builders/IConnectionBuilder.cs
Normal file
14
src/core/Elsa.Abstractions/Builders/IConnectionBuilder.cs
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
using System;
|
||||
using Elsa.Services.Models;
|
||||
|
||||
namespace Elsa.Builders
|
||||
{
|
||||
public interface IConnectionBuilder
|
||||
{
|
||||
IWorkflowBuilder WorkflowBuilder { get; }
|
||||
Func<IActivityBuilder> Source { get; }
|
||||
Func<IActivityBuilder> Target{ get; }
|
||||
string Outcome { get; }
|
||||
Connection BuildConnection();
|
||||
}
|
||||
}
|
||||
14
src/core/Elsa.Abstractions/Builders/IOutcomeBuilder.cs
Normal file
14
src/core/Elsa.Abstractions/Builders/IOutcomeBuilder.cs
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
using System;
|
||||
using Elsa.Services;
|
||||
using Elsa.Services.Models;
|
||||
|
||||
namespace Elsa.Builders
|
||||
{
|
||||
public interface IOutcomeBuilder : IBuilder
|
||||
{
|
||||
IWorkflowBuilder WorkflowBuilder { get; }
|
||||
IActivityBuilder Source { get; }
|
||||
string? Outcome { get; }
|
||||
Workflow Build();
|
||||
}
|
||||
}
|
||||
|
|
@ -22,14 +22,14 @@ namespace Elsa.Builders
|
|||
IWorkflowBuilder AsTransient();
|
||||
IWorkflowBuilder WithDeleteCompletedInstances(bool value);
|
||||
IWorkflowBuilder WithPersistenceBehavior(WorkflowPersistenceBehavior value);
|
||||
T New<T>(Action<T>? setup = default, Action<ActivityBuilder>? branch = default) where T : class, IActivity;
|
||||
T New<T>(T activity, Action<ActivityBuilder>? branch = default) where T : class, IActivity;
|
||||
ActivityBuilder StartWith<T>(Action<T>? setup = default, Action<ActivityBuilder>? branch = default) where T : class, IActivity;
|
||||
ActivityBuilder StartWith<T>(T activity, Action<ActivityBuilder>? branch = default) where T : class, IActivity;
|
||||
ActivityBuilder Add<T>(Action<T>? setup = default, Action<ActivityBuilder>? branch = default) where T : class, IActivity;
|
||||
ActivityBuilder Add<T>(T activity, Action<ActivityBuilder>? branch = default) where T : class, IActivity;
|
||||
ConnectionBuilder Connect(ActivityBuilder source, ActivityBuilder target, string? outcome = default);
|
||||
ConnectionBuilder Connect(Func<ActivityBuilder> source, Func<ActivityBuilder> target, string? outcome = default);
|
||||
T New<T>(Action<T>? setup = default, Action<IActivityBuilder>? branch = default) where T : class, IActivity;
|
||||
T New<T>(T activity, Action<IActivityBuilder>? branch = default) where T : class, IActivity;
|
||||
IActivityBuilder StartWith<T>(Action<T>? setup = default, Action<IActivityBuilder>? branch = default) where T : class, IActivity;
|
||||
IActivityBuilder StartWith<T>(T activity, Action<IActivityBuilder>? branch = default) where T : class, IActivity;
|
||||
IActivityBuilder Add<T>(Action<T>? setup = default, Action<IActivityBuilder>? branch = default) where T : class, IActivity;
|
||||
IActivityBuilder Add<T>(T activity, Action<IActivityBuilder>? branch = default) where T : class, IActivity;
|
||||
IConnectionBuilder Connect(IActivityBuilder source, IActivityBuilder target, string outcome = OutcomeNames.Done);
|
||||
IConnectionBuilder Connect(Func<IActivityBuilder> source, Func<IActivityBuilder> target, string outcome = OutcomeNames.Done);
|
||||
Workflow Build();
|
||||
Workflow Build(IWorkflow workflow);
|
||||
Workflow Build(Type workflowType);
|
||||
|
|
@ -6,6 +6,6 @@ namespace Elsa.Activities.ControlFlow
|
|||
{
|
||||
public static class CompleteBuilderExtensions
|
||||
{
|
||||
public static ActivityBuilder Complete(this IBuilder builder, Action<Complete>? setup = default) => builder.Then(setup);
|
||||
public static IActivityBuilder Complete(this IBuilder builder, Action<Complete>? setup = default) => builder.Then(setup);
|
||||
}
|
||||
}
|
||||
|
|
@ -8,62 +8,62 @@ namespace Elsa.Activities.ControlFlow
|
|||
{
|
||||
public static class ForBuilderExtensions
|
||||
{
|
||||
public static OutcomeBuilder For(this IBuilder builder, Action<For> setup, Action<OutcomeBuilder> iteration) => For(builder.Then(setup), iteration);
|
||||
public static IOutcomeBuilder For(this IBuilder builder, Action<For> setup, Action<IOutcomeBuilder> iteration) => For(builder.Then(setup), iteration);
|
||||
|
||||
public static OutcomeBuilder For(
|
||||
public static IOutcomeBuilder For(
|
||||
this IBuilder builder,
|
||||
IWorkflowExpression<int> start,
|
||||
IWorkflowExpression<int> end,
|
||||
IWorkflowExpression<int> step,
|
||||
Action<OutcomeBuilder> iteration) =>
|
||||
Action<IOutcomeBuilder> iteration) =>
|
||||
builder.For(a => a.WithStart(start).WithEnd(end).WithStep(step), iteration);
|
||||
|
||||
public static OutcomeBuilder For(
|
||||
public static IOutcomeBuilder For(
|
||||
this IBuilder builder,
|
||||
Func<ActivityExecutionContext, int> start,
|
||||
Func<ActivityExecutionContext, int> end,
|
||||
Func<ActivityExecutionContext, int> step,
|
||||
Action<OutcomeBuilder> iteration) =>
|
||||
Action<IOutcomeBuilder> iteration) =>
|
||||
builder.For(a => a.WithStart(start).WithEnd(end).WithStep(step), iteration);
|
||||
|
||||
public static OutcomeBuilder For(
|
||||
public static IOutcomeBuilder For(
|
||||
this IBuilder builder,
|
||||
Func<ActivityExecutionContext, int> start,
|
||||
Func<ActivityExecutionContext, int> end,
|
||||
Action<OutcomeBuilder> setupIteration) =>
|
||||
Action<IOutcomeBuilder> setupIteration) =>
|
||||
builder.For(a => a.WithStart(start).WithEnd(end).WithStep(1), setupIteration);
|
||||
|
||||
public static OutcomeBuilder For(
|
||||
public static IOutcomeBuilder For(
|
||||
this IBuilder builder,
|
||||
Func<int> start,
|
||||
Func<int> end,
|
||||
Func<int> step,
|
||||
Action<OutcomeBuilder> iteration) =>
|
||||
Action<IOutcomeBuilder> iteration) =>
|
||||
builder.For(a => a.WithStart(start).WithEnd(end).WithStep(step), iteration);
|
||||
|
||||
public static OutcomeBuilder For(
|
||||
public static IOutcomeBuilder For(
|
||||
this IBuilder builder,
|
||||
Func<int> start,
|
||||
Func<int> end,
|
||||
Action<OutcomeBuilder> setupIteration) =>
|
||||
Action<IOutcomeBuilder> setupIteration) =>
|
||||
For(builder.Then<For>(a => a.WithStart(start).WithEnd(end).WithStep(1)), setupIteration);
|
||||
|
||||
public static OutcomeBuilder For(
|
||||
public static IOutcomeBuilder For(
|
||||
this IBuilder builder,
|
||||
int start,
|
||||
int end,
|
||||
int step,
|
||||
Action<OutcomeBuilder> iteration) =>
|
||||
Action<IOutcomeBuilder> iteration) =>
|
||||
builder.For(a => a.WithStart(start).WithEnd(end).WithStep(step), iteration);
|
||||
|
||||
public static OutcomeBuilder For(
|
||||
public static IOutcomeBuilder For(
|
||||
this IBuilder builder,
|
||||
int start,
|
||||
int end,
|
||||
Action<OutcomeBuilder> iteration) =>
|
||||
Action<IOutcomeBuilder> iteration) =>
|
||||
builder.For(start, end, 1, iteration);
|
||||
|
||||
private static OutcomeBuilder For(ActivityBuilder @for, Action<OutcomeBuilder> iteration)
|
||||
private static IOutcomeBuilder For(IActivityBuilder @for, Action<IOutcomeBuilder> iteration)
|
||||
{
|
||||
iteration.Invoke(@for.When(OutcomeNames.Iterate));
|
||||
return @for.When(OutcomeNames.Done);
|
||||
|
|
|
|||
|
|
@ -10,33 +10,33 @@ namespace Elsa.Activities.ControlFlow
|
|||
{
|
||||
public static class ForEachBuilderExtensions
|
||||
{
|
||||
public static OutcomeBuilder ForEach(this IBuilder builder, Action<ForEach> setup, Action<OutcomeBuilder> iteration) => ForEach(builder.Then(setup), iteration);
|
||||
public static IOutcomeBuilder ForEach(this IBuilder builder, Action<ForEach> setup, Action<IOutcomeBuilder> iteration) => ForEach(builder.Then(setup), iteration);
|
||||
|
||||
public static OutcomeBuilder ForEach(
|
||||
public static IOutcomeBuilder ForEach(
|
||||
this IBuilder builder,
|
||||
IWorkflowExpression<ICollection> collection,
|
||||
Action<OutcomeBuilder> iteration) =>
|
||||
Action<IOutcomeBuilder> iteration) =>
|
||||
builder.ForEach(a => a.WithCollection(collection), iteration);
|
||||
|
||||
public static OutcomeBuilder ForEach(
|
||||
public static IOutcomeBuilder ForEach(
|
||||
this IBuilder builder,
|
||||
Func<ActivityExecutionContext, ICollection> collection,
|
||||
Action<OutcomeBuilder> iteration) =>
|
||||
Action<IOutcomeBuilder> iteration) =>
|
||||
builder.ForEach(a => a.WithCollection(collection), iteration);
|
||||
|
||||
public static OutcomeBuilder ForEach(
|
||||
public static IOutcomeBuilder ForEach(
|
||||
this IBuilder builder,
|
||||
Func<ICollection> collection,
|
||||
Action<OutcomeBuilder> iteration) =>
|
||||
Action<IOutcomeBuilder> iteration) =>
|
||||
builder.ForEach(a => a.WithCollection(collection), iteration);
|
||||
|
||||
public static OutcomeBuilder ForEach(
|
||||
public static IOutcomeBuilder ForEach(
|
||||
this IBuilder builder,
|
||||
ICollection collection,
|
||||
Action<OutcomeBuilder> iteration) =>
|
||||
Action<IOutcomeBuilder> iteration) =>
|
||||
builder.ForEach(a => a.WithCollection(collection), iteration);
|
||||
|
||||
private static OutcomeBuilder ForEach(ActivityBuilder forEach, Action<OutcomeBuilder> iteration)
|
||||
private static IOutcomeBuilder ForEach(IActivityBuilder forEach, Action<IOutcomeBuilder> iteration)
|
||||
{
|
||||
iteration.Invoke(forEach.When(OutcomeNames.Iterate));
|
||||
return forEach.When(OutcomeNames.Done);
|
||||
|
|
|
|||
|
|
@ -5,16 +5,16 @@ namespace Elsa.Activities.ControlFlow
|
|||
{
|
||||
public class ForkBuilder
|
||||
{
|
||||
private readonly ActivityBuilder activityBuilder;
|
||||
private readonly IActivityBuilder activityBuilder;
|
||||
private readonly Fork fork;
|
||||
|
||||
public ForkBuilder(ActivityBuilder activityBuilder)
|
||||
public ForkBuilder(IActivityBuilder activityBuilder)
|
||||
{
|
||||
this.activityBuilder = activityBuilder;
|
||||
fork = (Fork)activityBuilder.Activity;
|
||||
}
|
||||
|
||||
public OutcomeBuilder When(string branch)
|
||||
public IOutcomeBuilder When(string branch)
|
||||
{
|
||||
fork.Branches.Add(branch);
|
||||
return activityBuilder.When(branch);
|
||||
|
|
|
|||
|
|
@ -8,12 +8,12 @@ namespace Elsa.Activities.ControlFlow
|
|||
{
|
||||
public static class IfElseBuilderExtensions
|
||||
{
|
||||
public static OutcomeBuilder IfElse(this IBuilder builder, IWorkflowExpression<bool> condition, Action<OutcomeBuilder> trueBranch, Action<OutcomeBuilder>? falseBranch = default) => IfElse(builder.Then<IfElse>(x => x.Condition = condition), trueBranch, falseBranch);
|
||||
public static OutcomeBuilder IfElse(this IBuilder builder, Func<ActivityExecutionContext, bool> condition, Action<OutcomeBuilder> trueBranch, Action<OutcomeBuilder>? falseBranch = default) => builder.IfElse(new CodeExpression<bool>(condition), trueBranch, falseBranch);
|
||||
public static OutcomeBuilder IfElse(this IBuilder builder, Func<bool> condition, Action<OutcomeBuilder> trueBranch, Action<OutcomeBuilder>? falseBranch = default) => builder.IfElse(new CodeExpression<bool>(condition), trueBranch, falseBranch);
|
||||
public static OutcomeBuilder IfElse(this IBuilder builder, bool condition, Action<OutcomeBuilder> trueBranch, Action<OutcomeBuilder>? falseBranch = default) => builder.IfElse(new CodeExpression<bool>(() => condition), trueBranch, falseBranch);
|
||||
public static IOutcomeBuilder IfElse(this IBuilder builder, IWorkflowExpression<bool> condition, Action<IOutcomeBuilder> trueBranch, Action<IOutcomeBuilder>? falseBranch = default) => IfElse(builder.Then<IfElse>(x => x.Condition = condition), trueBranch, falseBranch);
|
||||
public static IOutcomeBuilder IfElse(this IBuilder builder, Func<ActivityExecutionContext, bool> condition, Action<IOutcomeBuilder> trueBranch, Action<IOutcomeBuilder>? falseBranch = default) => builder.IfElse(new CodeExpression<bool>(condition), trueBranch, falseBranch);
|
||||
public static IOutcomeBuilder IfElse(this IBuilder builder, Func<bool> condition, Action<IOutcomeBuilder> trueBranch, Action<IOutcomeBuilder>? falseBranch = default) => builder.IfElse(new CodeExpression<bool>(condition), trueBranch, falseBranch);
|
||||
public static IOutcomeBuilder IfElse(this IBuilder builder, bool condition, Action<IOutcomeBuilder> trueBranch, Action<IOutcomeBuilder>? falseBranch = default) => builder.IfElse(new CodeExpression<bool>(() => condition), trueBranch, falseBranch);
|
||||
|
||||
private static OutcomeBuilder IfElse(ActivityBuilder ifElse, Action<OutcomeBuilder> trueBranch, Action<OutcomeBuilder>? falseBranch = default)
|
||||
private static IOutcomeBuilder IfElse(IActivityBuilder ifElse, Action<IOutcomeBuilder> trueBranch, Action<IOutcomeBuilder>? falseBranch = default)
|
||||
{
|
||||
trueBranch.Invoke(ifElse.When(OutcomeNames.True));
|
||||
falseBranch?.Invoke(ifElse.When(OutcomeNames.False));
|
||||
|
|
|
|||
|
|
@ -5,6 +5,6 @@ namespace Elsa.Activities.ControlFlow
|
|||
{
|
||||
public static class JoinBuilderExtensions
|
||||
{
|
||||
public static ActivityBuilder Join(this IBuilder builder, Join.JoinMode mode) => builder.Then<Join>(x => x.WithMode(mode));
|
||||
public static IActivityBuilder Join(this IBuilder builder, Join.JoinMode mode) => builder.Then<Join>(x => x.WithMode(mode));
|
||||
}
|
||||
}
|
||||
|
|
@ -5,16 +5,16 @@ namespace Elsa.Activities.ControlFlow
|
|||
{
|
||||
public class SwitchBuilder
|
||||
{
|
||||
private readonly ActivityBuilder activityBuilder;
|
||||
private readonly IActivityBuilder activityBuilder;
|
||||
private readonly Switch @switch;
|
||||
|
||||
public SwitchBuilder(ActivityBuilder activityBuilder)
|
||||
public SwitchBuilder(IActivityBuilder activityBuilder)
|
||||
{
|
||||
this.activityBuilder = activityBuilder;
|
||||
@switch = (Switch)activityBuilder.Activity;
|
||||
}
|
||||
|
||||
public OutcomeBuilder When(string @case)
|
||||
public IOutcomeBuilder When(string @case)
|
||||
{
|
||||
@switch.Cases.Add(@case);
|
||||
return activityBuilder.When(@case);
|
||||
|
|
|
|||
|
|
@ -8,12 +8,12 @@ namespace Elsa.Activities.ControlFlow
|
|||
{
|
||||
public static class WhileBuilderExtensions
|
||||
{
|
||||
public static OutcomeBuilder While(this IBuilder builder, IWorkflowExpression<bool> condition, Action<OutcomeBuilder> iteration) => While(builder.Then<While>(x => x.WithCondition(condition)), iteration);
|
||||
public static OutcomeBuilder While(this IBuilder builder, Func<ActivityExecutionContext, bool> condition, Action<OutcomeBuilder> iteration) => builder.While(new CodeExpression<bool>(condition), iteration);
|
||||
public static OutcomeBuilder While(this IBuilder builder, Func<bool> condition, Action<OutcomeBuilder> iteration) => builder.While(new CodeExpression<bool>(condition), iteration);
|
||||
public static OutcomeBuilder While(this IBuilder builder, bool condition, Action<OutcomeBuilder> iteration) => builder.While(new CodeExpression<bool>(() => condition), iteration);
|
||||
public static IOutcomeBuilder While(this IBuilder builder, IWorkflowExpression<bool> condition, Action<IOutcomeBuilder> iteration) => While(builder.Then<While>(x => x.WithCondition(condition)), iteration);
|
||||
public static IOutcomeBuilder While(this IBuilder builder, Func<ActivityExecutionContext, bool> condition, Action<IOutcomeBuilder> iteration) => builder.While(new CodeExpression<bool>(condition), iteration);
|
||||
public static IOutcomeBuilder While(this IBuilder builder, Func<bool> condition, Action<IOutcomeBuilder> iteration) => builder.While(new CodeExpression<bool>(condition), iteration);
|
||||
public static IOutcomeBuilder While(this IBuilder builder, bool condition, Action<IOutcomeBuilder> iteration) => builder.While(new CodeExpression<bool>(() => condition), iteration);
|
||||
|
||||
private static OutcomeBuilder While(ActivityBuilder @while, Action<OutcomeBuilder> iteration)
|
||||
private static IOutcomeBuilder While(IActivityBuilder @while, Action<IOutcomeBuilder> iteration)
|
||||
{
|
||||
iteration.Invoke(@while.When(OutcomeNames.Iterate));
|
||||
return @while.When(OutcomeNames.Done);
|
||||
|
|
|
|||
|
|
@ -8,9 +8,9 @@ namespace Elsa.Activities.Primitives
|
|||
{
|
||||
public static class CorrelateBuilderExtensions
|
||||
{
|
||||
public static ActivityBuilder Correlate(this IBuilder builder, IWorkflowExpression<string> correlationId) => builder.Then<Correlate>(x => x.WithValue(correlationId));
|
||||
public static ActivityBuilder Correlate(this IBuilder builder, Func<ActivityExecutionContext, string> correlationId) => builder.Then<Correlate>(x => x.WithValue(correlationId));
|
||||
public static ActivityBuilder Correlate(this IBuilder builder, Func<string> correlationId) => builder.Then<Correlate>(x => x.WithValue(correlationId));
|
||||
public static ActivityBuilder Correlate(this IBuilder builder, string correlationId) => builder.Then<Correlate>(x => x.WithValue(correlationId));
|
||||
public static IActivityBuilder Correlate(this IBuilder builder, IWorkflowExpression<string> correlationId) => builder.Then<Correlate>(x => x.WithValue(correlationId));
|
||||
public static IActivityBuilder Correlate(this IBuilder builder, Func<ActivityExecutionContext, string> correlationId) => builder.Then<Correlate>(x => x.WithValue(correlationId));
|
||||
public static IActivityBuilder Correlate(this IBuilder builder, Func<string> correlationId) => builder.Then<Correlate>(x => x.WithValue(correlationId));
|
||||
public static IActivityBuilder Correlate(this IBuilder builder, string correlationId) => builder.Then<Correlate>(x => x.WithValue(correlationId));
|
||||
}
|
||||
}
|
||||
|
|
@ -8,30 +8,30 @@ namespace Elsa.Activities.Primitives
|
|||
{
|
||||
public static class SetVariableBuilderExtensions
|
||||
{
|
||||
public static ActivityBuilder SetVariable(this IBuilder builder, string variableName, IWorkflowExpression<object> value) => builder.Then<SetVariable>(x =>
|
||||
public static IActivityBuilder SetVariable(this IBuilder builder, string variableName, IWorkflowExpression<object> value) => builder.Then<SetVariable>(x =>
|
||||
{
|
||||
x.VariableName = variableName;
|
||||
x.Value = value;
|
||||
});
|
||||
|
||||
public static ActivityBuilder SetVariable(this IBuilder builder, string variableName, CodeExpression<object> value) => builder.SetVariable(variableName, (IWorkflowExpression<object>)value);
|
||||
public static ActivityBuilder SetVariable(this IBuilder builder, string variableName, Func<ActivityExecutionContext, object> value) => builder.SetVariable(variableName, new CodeExpression<object>(value));
|
||||
public static IActivityBuilder SetVariable(this IBuilder builder, string variableName, CodeExpression<object> value) => builder.SetVariable(variableName, (IWorkflowExpression<object>)value);
|
||||
public static IActivityBuilder SetVariable(this IBuilder builder, string variableName, Func<ActivityExecutionContext, object> value) => builder.SetVariable(variableName, new CodeExpression<object>(value));
|
||||
|
||||
public static ActivityBuilder SetVariable(this IBuilder builder, string variableName, Func<object, object> value) =>
|
||||
public static IActivityBuilder SetVariable(this IBuilder builder, string variableName, Func<object, object> value) =>
|
||||
builder.SetVariable(variableName, new CodeExpression<object>(context =>
|
||||
{
|
||||
var currentValue = context.GetVariable(variableName);
|
||||
return value(currentValue);
|
||||
}));
|
||||
|
||||
public static ActivityBuilder SetVariable<T>(this IBuilder builder, string variableName, Func<T, T> value) =>
|
||||
public static IActivityBuilder SetVariable<T>(this IBuilder builder, string variableName, Func<T, T> value) =>
|
||||
builder.SetVariable(variableName, new CodeExpression<object>(context =>
|
||||
{
|
||||
var currentValue = context.GetVariable<T>(variableName);
|
||||
return value(currentValue);
|
||||
}));
|
||||
|
||||
public static ActivityBuilder SetVariable(this IBuilder builder, string variableName, Func<object> value) => builder.SetVariable(variableName, (IWorkflowExpression<object>)new CodeExpression<object>(value));
|
||||
public static ActivityBuilder SetVariable<T>(this IBuilder builder, string variableName, T value) => builder.SetVariable(variableName, () => value);
|
||||
public static IActivityBuilder SetVariable(this IBuilder builder, string variableName, Func<object> value) => builder.SetVariable(variableName, (IWorkflowExpression<object>)new CodeExpression<object>(value));
|
||||
public static IActivityBuilder SetVariable<T>(this IBuilder builder, string variableName, T value) => builder.SetVariable(variableName, () => value);
|
||||
}
|
||||
}
|
||||
|
|
@ -8,9 +8,9 @@ namespace Elsa.Activities.Signaling
|
|||
{
|
||||
public static class SignaledBuilderExtensions
|
||||
{
|
||||
public static ActivityBuilder Signaled(this IBuilder builder, IWorkflowExpression<string> signal) => builder.Then<Signaled>(x => x.WithSignal(signal));
|
||||
public static ActivityBuilder Signaled(this IBuilder builder, Func<ActivityExecutionContext, string> signal) => builder.Then<Signaled>(x => x.WithSignal(signal));
|
||||
public static ActivityBuilder Signaled(this IBuilder builder, Func<string> signal) => builder.Then<Signaled>(x => x.WithSignal(signal));
|
||||
public static ActivityBuilder Signaled(this IBuilder builder, string signal) => builder.Then<Signaled>(x => x.WithSignal(signal));
|
||||
public static IActivityBuilder Signaled(this IBuilder builder, IWorkflowExpression<string> signal) => builder.Then<Signaled>(x => x.WithSignal(signal));
|
||||
public static IActivityBuilder Signaled(this IBuilder builder, Func<ActivityExecutionContext, string> signal) => builder.Then<Signaled>(x => x.WithSignal(signal));
|
||||
public static IActivityBuilder Signaled(this IBuilder builder, Func<string> signal) => builder.Then<Signaled>(x => x.WithSignal(signal));
|
||||
public static IActivityBuilder Signaled(this IBuilder builder, string signal) => builder.Then<Signaled>(x => x.WithSignal(signal));
|
||||
}
|
||||
}
|
||||
|
|
@ -8,9 +8,9 @@ namespace Elsa.Activities.Signaling
|
|||
{
|
||||
public static class TriggerEventBuilderExtensions
|
||||
{
|
||||
public static ActivityBuilder TriggerEvent(this IBuilder builder, IWorkflowExpression<string> activityType, IWorkflowExpression<string>? correlationId = default, IWorkflowExpression? input = default) => builder.Then<TriggerEvent>(x => x.WithActivityType(activityType).WithCorrelationId(correlationId).WithInput(input));
|
||||
public static ActivityBuilder TriggerEvent(this IBuilder builder, Func<ActivityExecutionContext, string> activityType, Func<ActivityExecutionContext, string>? correlationId = default, Func<ActivityExecutionContext, object>? input = default) => builder.Then<TriggerEvent>(x => x.WithActivityType(activityType).WithCorrelationId(correlationId).WithInput(input));
|
||||
public static ActivityBuilder TriggerEvent(this IBuilder builder, Func<string> activityType, Func<string>? correlationId = default, Func<object>? input = default) => builder.Then<TriggerEvent>(x => x.WithActivityType(activityType).WithCorrelationId(correlationId).WithInput(input));
|
||||
public static ActivityBuilder TriggerEvent(this IBuilder builder, string activityType, string? correlationId = default, object? input = default) => builder.Then<TriggerEvent>(x => x.WithActivityType(activityType).WithCorrelationId(correlationId).WithInput(input));
|
||||
public static IActivityBuilder TriggerEvent(this IBuilder builder, IWorkflowExpression<string> activityType, IWorkflowExpression<string>? correlationId = default, IWorkflowExpression? input = default) => builder.Then<TriggerEvent>(x => x.WithActivityType(activityType).WithCorrelationId(correlationId).WithInput(input));
|
||||
public static IActivityBuilder TriggerEvent(this IBuilder builder, Func<ActivityExecutionContext, string> activityType, Func<ActivityExecutionContext, string>? correlationId = default, Func<ActivityExecutionContext, object>? input = default) => builder.Then<TriggerEvent>(x => x.WithActivityType(activityType).WithCorrelationId(correlationId).WithInput(input));
|
||||
public static IActivityBuilder TriggerEvent(this IBuilder builder, Func<string> activityType, Func<string>? correlationId = default, Func<object>? input = default) => builder.Then<TriggerEvent>(x => x.WithActivityType(activityType).WithCorrelationId(correlationId).WithInput(input));
|
||||
public static IActivityBuilder TriggerEvent(this IBuilder builder, string activityType, string? correlationId = default, object? input = default) => builder.Then<TriggerEvent>(x => x.WithActivityType(activityType).WithCorrelationId(correlationId).WithInput(input));
|
||||
}
|
||||
}
|
||||
|
|
@ -8,9 +8,9 @@ namespace Elsa.Activities.Signaling
|
|||
{
|
||||
public static class TriggerSignalBuilderExtensions
|
||||
{
|
||||
public static ActivityBuilder TriggerSignal(this IBuilder builder, IWorkflowExpression<string> signal, IWorkflowExpression<string>? correlationId = default, IWorkflowExpression? input = default) => builder.Then<TriggerSignal>(x => x.WithSignal(signal).WithCorrelationId(correlationId).WithInput(input));
|
||||
public static ActivityBuilder TriggerSignal(this IBuilder builder, Func<ActivityExecutionContext, string> signal, Func<ActivityExecutionContext, string>? correlationId = default, Func<ActivityExecutionContext, object>? input = default) => builder.Then<TriggerSignal>(x => x.WithSignal(signal).WithCorrelationId(correlationId).WithInput(input));
|
||||
public static ActivityBuilder TriggerSignal(this IBuilder builder, Func<string> signal, Func<string>? correlationId = default, Func<object>? input = default) => builder.Then<TriggerSignal>(x => x.WithSignal(signal).WithCorrelationId(correlationId).WithInput(input));
|
||||
public static ActivityBuilder TriggerSignal(this IBuilder builder, string signal, string? correlationId = default, object? input = default) => builder.Then<TriggerSignal>(x => x.WithSignal(signal).WithCorrelationId(correlationId).WithInput(input));
|
||||
public static IActivityBuilder TriggerSignal(this IBuilder builder, IWorkflowExpression<string> signal, IWorkflowExpression<string>? correlationId = default, IWorkflowExpression? input = default) => builder.Then<TriggerSignal>(x => x.WithSignal(signal).WithCorrelationId(correlationId).WithInput(input));
|
||||
public static IActivityBuilder TriggerSignal(this IBuilder builder, Func<ActivityExecutionContext, string> signal, Func<ActivityExecutionContext, string>? correlationId = default, Func<ActivityExecutionContext, object>? input = default) => builder.Then<TriggerSignal>(x => x.WithSignal(signal).WithCorrelationId(correlationId).WithInput(input));
|
||||
public static IActivityBuilder TriggerSignal(this IBuilder builder, Func<string> signal, Func<string>? correlationId = default, Func<object>? input = default) => builder.Then<TriggerSignal>(x => x.WithSignal(signal).WithCorrelationId(correlationId).WithInput(input));
|
||||
public static IActivityBuilder TriggerSignal(this IBuilder builder, string signal, string? correlationId = default, object? input = default) => builder.Then<TriggerSignal>(x => x.WithSignal(signal).WithCorrelationId(correlationId).WithInput(input));
|
||||
}
|
||||
}
|
||||
|
|
@ -4,7 +4,7 @@ using Elsa.Services.Models;
|
|||
|
||||
namespace Elsa.Builders
|
||||
{
|
||||
public class ActivityBuilder : IBuilder
|
||||
public class ActivityBuilder : IActivityBuilder
|
||||
{
|
||||
public ActivityBuilder(IWorkflowBuilder workflowBuilder, IActivity activity)
|
||||
{
|
||||
|
|
@ -14,28 +14,13 @@ namespace Elsa.Builders
|
|||
|
||||
public IWorkflowBuilder WorkflowBuilder { get; }
|
||||
public IActivity Activity { get; }
|
||||
public IActivityBuilder Add<T>(Action<T>? setup = default) where T : class, IActivity => WorkflowBuilder.Add(setup);
|
||||
public IOutcomeBuilder When(string? outcome) => new OutcomeBuilder(WorkflowBuilder, this, outcome);
|
||||
public IActivityBuilder Then<T>(Action<T>? setup = null, Action<IActivityBuilder>? branch = null) where T : class, IActivity => When(null).Then(setup, branch);
|
||||
|
||||
public ActivityBuilder Add<T>(Action<T>? setup = default) where T : class, IActivity
|
||||
{
|
||||
return WorkflowBuilder.Add(setup);
|
||||
}
|
||||
public IActivityBuilder Then<T>(T activity, Action<IActivityBuilder>? branch = null) where T : class, IActivity => When(null).Then(activity, branch);
|
||||
|
||||
public OutcomeBuilder When(string? outcome)
|
||||
{
|
||||
return new OutcomeBuilder(WorkflowBuilder, this, outcome);
|
||||
}
|
||||
|
||||
public ActivityBuilder Then<T>(Action<T>? setup = null, Action<ActivityBuilder>? branch = null) where T : class, IActivity
|
||||
{
|
||||
return When(null).Then(setup, branch);
|
||||
}
|
||||
|
||||
public ActivityBuilder Then<T>(T activity, Action<ActivityBuilder>? branch = null) where T : class, IActivity
|
||||
{
|
||||
return When(null).Then(activity, branch);
|
||||
}
|
||||
|
||||
public ActivityBuilder Then(ActivityBuilder targetActivity)
|
||||
public IActivityBuilder Then(IActivityBuilder targetActivity)
|
||||
{
|
||||
WorkflowBuilder.Connect(this, targetActivity);
|
||||
return this;
|
||||
|
|
|
|||
|
|
@ -8,9 +8,9 @@ namespace Elsa.Builders
|
|||
{
|
||||
public static class ActivityBuilderExtensions
|
||||
{
|
||||
public static ActivityBuilder Then(this IBuilder builder, Func<ActivityExecutionContext, Task<IActivityExecutionResult>> activity) => builder.Then(new Inline(activity));
|
||||
public static ActivityBuilder Then(this IBuilder builder, Func<ActivityExecutionContext, Task> activity) => builder.Then(new Inline(activity));
|
||||
public static ActivityBuilder Then(this IBuilder builder, Action<ActivityExecutionContext> activity) => builder.Then(new Inline(activity));
|
||||
public static ActivityBuilder Then(this IBuilder builder, Action activity) => builder.Then(new Inline(activity));
|
||||
public static IActivityBuilder Then(this IBuilder builder, Func<ActivityExecutionContext, Task<IActivityExecutionResult>> activity) => builder.Then(new Inline(activity));
|
||||
public static IActivityBuilder Then(this IBuilder builder, Func<ActivityExecutionContext, Task> activity) => builder.Then(new Inline(activity));
|
||||
public static IActivityBuilder Then(this IBuilder builder, Action<ActivityExecutionContext> activity) => builder.Then(new Inline(activity));
|
||||
public static IActivityBuilder Then(this IBuilder builder, Action activity) => builder.Then(new Inline(activity));
|
||||
}
|
||||
}
|
||||
|
|
@ -3,14 +3,14 @@ using Elsa.Services.Models;
|
|||
|
||||
namespace Elsa.Builders
|
||||
{
|
||||
public class ConnectionBuilder
|
||||
public class ConnectionBuilder : IConnectionBuilder
|
||||
{
|
||||
public IWorkflowBuilder WorkflowBuilder { get; }
|
||||
public Func<ActivityBuilder> Source { get; }
|
||||
public Func<ActivityBuilder> Target{ get; }
|
||||
public Func<IActivityBuilder> Source { get; }
|
||||
public Func<IActivityBuilder> Target{ get; }
|
||||
public string Outcome { get; }
|
||||
|
||||
public ConnectionBuilder(IWorkflowBuilder workflowBuilder, Func<ActivityBuilder> source, Func<ActivityBuilder> target, string? outcome = null)
|
||||
public ConnectionBuilder(IWorkflowBuilder workflowBuilder, Func<IActivityBuilder> source, Func<IActivityBuilder> target, string outcome = OutcomeNames.Done)
|
||||
{
|
||||
Source = source;
|
||||
Target = target;
|
||||
|
|
@ -18,9 +18,6 @@ namespace Elsa.Builders
|
|||
Outcome = outcome;
|
||||
}
|
||||
|
||||
public Connection BuildConnection()
|
||||
{
|
||||
return new Connection(Source().Activity, Target().Activity, Outcome);
|
||||
}
|
||||
public Connection BuildConnection() => new Connection(Source().Activity, Target().Activity, Outcome);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
using System;
|
||||
using Elsa.Services;
|
||||
|
||||
namespace Elsa.Builders
|
||||
{
|
||||
public interface IBuilder
|
||||
{
|
||||
ActivityBuilder Then<T>(Action<T>? setup = default, Action<ActivityBuilder>? branch = default) where T : class, IActivity;
|
||||
ActivityBuilder Then<T>(T activity, Action<ActivityBuilder>? branch = default) where T : class, IActivity;
|
||||
}
|
||||
}
|
||||
|
|
@ -4,9 +4,9 @@ using Elsa.Services.Models;
|
|||
|
||||
namespace Elsa.Builders
|
||||
{
|
||||
public class OutcomeBuilder : IBuilder
|
||||
public class OutcomeBuilder : IOutcomeBuilder
|
||||
{
|
||||
public OutcomeBuilder(IWorkflowBuilder workflowBuilder, ActivityBuilder source, string outcome)
|
||||
public OutcomeBuilder(IWorkflowBuilder workflowBuilder, IActivityBuilder source, string? outcome)
|
||||
{
|
||||
WorkflowBuilder = workflowBuilder;
|
||||
Source = source;
|
||||
|
|
@ -14,20 +14,14 @@ namespace Elsa.Builders
|
|||
}
|
||||
|
||||
public IWorkflowBuilder WorkflowBuilder { get; }
|
||||
public ActivityBuilder Source { get; }
|
||||
public string Outcome { get; }
|
||||
public IActivityBuilder Source { get; }
|
||||
public string? Outcome { get; }
|
||||
|
||||
public ActivityBuilder Then<T>(Action<T>? setup = default, Action<ActivityBuilder>? branch = default) where T : class, IActivity
|
||||
{
|
||||
return Then(WorkflowBuilder.Add(setup), branch);
|
||||
}
|
||||
|
||||
public ActivityBuilder Then<T>(T activity, Action<ActivityBuilder>? branch = default) where T : class, IActivity
|
||||
{
|
||||
return Then(WorkflowBuilder.Add(activity), branch);
|
||||
}
|
||||
|
||||
private ActivityBuilder Then(ActivityBuilder activityBuilder, Action<ActivityBuilder>? branch = default)
|
||||
public IActivityBuilder Then<T>(Action<T>? setup = default, Action<IActivityBuilder>? branch = default) where T : class, IActivity => Then(WorkflowBuilder.Add(setup), branch);
|
||||
|
||||
public IActivityBuilder Then<T>(T activity, Action<IActivityBuilder>? branch = default) where T : class, IActivity => Then(WorkflowBuilder.Add(activity), branch);
|
||||
|
||||
private IActivityBuilder Then(IActivityBuilder activityBuilder, Action<IActivityBuilder>? branch = default)
|
||||
{
|
||||
branch?.Invoke(activityBuilder);
|
||||
WorkflowBuilder.Connect(Source, activityBuilder, Outcome);
|
||||
|
|
|
|||
|
|
@ -8,9 +8,9 @@ namespace Elsa.Builders
|
|||
{
|
||||
public static class OutcomeBuilderExtensions
|
||||
{
|
||||
public static ActivityBuilder Then(this OutcomeBuilder outcomeBuilder, Func<ActivityExecutionContext, Task<IActivityExecutionResult>> activity, Action<ActivityBuilder>? branch = default) => outcomeBuilder.Then(new Inline(activity), branch);
|
||||
public static ActivityBuilder Then(this OutcomeBuilder outcomeBuilder, Func<ActivityExecutionContext, Task> activity, Action<ActivityBuilder>? branch = default) => outcomeBuilder.Then(new Inline(activity), branch);
|
||||
public static ActivityBuilder Then(this OutcomeBuilder outcomeBuilder, Action<ActivityExecutionContext> activity, Action<ActivityBuilder>? branch = default) => outcomeBuilder.Then(new Inline(activity), branch);
|
||||
public static ActivityBuilder Then(this OutcomeBuilder outcomeBuilder, Action activity, Action<ActivityBuilder>? branch = default) => outcomeBuilder.Then(new Inline(activity), branch);
|
||||
public static IActivityBuilder Then(this IOutcomeBuilder outcomeBuilder, Func<ActivityExecutionContext, Task<IActivityExecutionResult>> activity, Action<IActivityBuilder>? branch = default) => outcomeBuilder.Then(new Inline(activity), branch);
|
||||
public static IActivityBuilder Then(this IOutcomeBuilder outcomeBuilder, Func<ActivityExecutionContext, Task> activity, Action<IActivityBuilder>? branch = default) => outcomeBuilder.Then(new Inline(activity), branch);
|
||||
public static IActivityBuilder Then(this IOutcomeBuilder outcomeBuilder, Action<ActivityExecutionContext> activity, Action<IActivityBuilder>? branch = default) => outcomeBuilder.Then(new Inline(activity), branch);
|
||||
public static IActivityBuilder Then(this IOutcomeBuilder outcomeBuilder, Action activity, Action<IActivityBuilder>? branch = default) => outcomeBuilder.Then(new Inline(activity), branch);
|
||||
}
|
||||
}
|
||||
|
|
@ -126,38 +126,38 @@ namespace Elsa.Builders
|
|||
return workflow;
|
||||
}
|
||||
|
||||
public T New<T>(T activity, Action<ActivityBuilder>? branch = default) where T : class, IActivity
|
||||
public T New<T>(T activity, Action<IActivityBuilder>? branch = default) where T : class, IActivity
|
||||
{
|
||||
var activityBuilder = new ActivityBuilder(this, activity);
|
||||
branch?.Invoke(activityBuilder);
|
||||
return activity;
|
||||
}
|
||||
|
||||
public T New<T>(Action<T>? setup, Action<ActivityBuilder>? branch = default) where T : class, IActivity
|
||||
public T New<T>(Action<T>? setup, Action<IActivityBuilder>? branch = default) where T : class, IActivity
|
||||
{
|
||||
var activity = activityResolver.ResolveActivity<T>();
|
||||
setup?.Invoke(activity);
|
||||
return New(activity, branch);
|
||||
}
|
||||
|
||||
public ActivityBuilder StartWith<T>(Action<T>? setup = default, Action<ActivityBuilder>? branch = default) where T : class, IActivity
|
||||
public IActivityBuilder StartWith<T>(Action<T>? setup = default, Action<IActivityBuilder>? branch = default) where T : class, IActivity
|
||||
{
|
||||
var activity = New(setup, branch);
|
||||
return StartWith(activity, branch);
|
||||
}
|
||||
|
||||
public ActivityBuilder StartWith<T>(T activity, Action<ActivityBuilder>? branch = default) where T : class, IActivity
|
||||
public IActivityBuilder StartWith<T>(T activity, Action<IActivityBuilder>? branch = default) where T : class, IActivity
|
||||
{
|
||||
return Add(activity, branch);
|
||||
}
|
||||
|
||||
public ActivityBuilder Add<T>(Action<T>? setup = default, Action<ActivityBuilder>? branch = default) where T : class, IActivity
|
||||
public IActivityBuilder Add<T>(Action<T>? setup = default, Action<IActivityBuilder>? branch = default) where T : class, IActivity
|
||||
{
|
||||
var activity = New(setup, branch);
|
||||
return Add(activity, branch);
|
||||
}
|
||||
|
||||
public ActivityBuilder Add<T>(T activity, Action<ActivityBuilder>? branch = default) where T : class, IActivity
|
||||
public IActivityBuilder Add<T>(T activity, Action<IActivityBuilder>? branch = default) where T : class, IActivity
|
||||
{
|
||||
var activityBuilder = new ActivityBuilder(this, activity);
|
||||
branch?.Invoke(activityBuilder);
|
||||
|
|
@ -165,18 +165,18 @@ namespace Elsa.Builders
|
|||
return activityBuilder;
|
||||
}
|
||||
|
||||
public ConnectionBuilder Connect(
|
||||
ActivityBuilder source,
|
||||
ActivityBuilder target,
|
||||
string? outcome = default)
|
||||
public IConnectionBuilder Connect(
|
||||
IActivityBuilder source,
|
||||
IActivityBuilder target,
|
||||
string outcome = OutcomeNames.Done)
|
||||
{
|
||||
return Connect(() => source, () => target, outcome);
|
||||
}
|
||||
|
||||
public ConnectionBuilder Connect(
|
||||
Func<ActivityBuilder> source,
|
||||
Func<ActivityBuilder> target,
|
||||
string? outcome = default)
|
||||
public IConnectionBuilder Connect(
|
||||
Func<IActivityBuilder> source,
|
||||
Func<IActivityBuilder> target,
|
||||
string outcome = OutcomeNames.Done)
|
||||
{
|
||||
var connectionBuilder = new ConnectionBuilder(this, source, target, outcome);
|
||||
|
||||
|
|
@ -184,8 +184,8 @@ namespace Elsa.Builders
|
|||
return connectionBuilder;
|
||||
}
|
||||
|
||||
public ActivityBuilder Then<T>(Action<T>? setup = default, Action<ActivityBuilder>? branch = default) where T : class, IActivity => StartWith(setup, branch);
|
||||
public ActivityBuilder Then<T>(T activity, Action<ActivityBuilder>? branch = default) where T : class, IActivity => StartWith(activity, branch);
|
||||
public IActivityBuilder Then<T>(Action<T>? setup = default, Action<IActivityBuilder>? branch = default) where T : class, IActivity => StartWith(setup, branch);
|
||||
public IActivityBuilder Then<T>(T activity, Action<IActivityBuilder>? branch = default) where T : class, IActivity => StartWith(activity, branch);
|
||||
|
||||
public Workflow Build(IWorkflow workflow)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -9,18 +9,18 @@ namespace Elsa.Builders
|
|||
{
|
||||
public static class WorkflowBuilderExtensions
|
||||
{
|
||||
public static ActivityBuilder StartWith(this IWorkflowBuilder builder, Action action) => builder.StartWith(new Inline(action));
|
||||
public static ActivityBuilder StartWith(this IWorkflowBuilder builder, Action<ActivityExecutionContext> action) => builder.StartWith(new Inline(action));
|
||||
public static ActivityBuilder StartWith(this IWorkflowBuilder builder, Func<ActivityExecutionContext, Task> action) => builder.StartWith(new Inline(action));
|
||||
public static ActivityBuilder StartWith(this IWorkflowBuilder builder, Func<ActivityExecutionContext, Task<IActivityExecutionResult>> action) => builder.StartWith(new Inline(action));
|
||||
public static IActivityBuilder StartWith(this IWorkflowBuilder builder, Action action) => builder.StartWith(new Inline(action));
|
||||
public static IActivityBuilder StartWith(this IWorkflowBuilder builder, Action<ActivityExecutionContext> action) => builder.StartWith(new Inline(action));
|
||||
public static IActivityBuilder StartWith(this IWorkflowBuilder builder, Func<ActivityExecutionContext, Task> action) => builder.StartWith(new Inline(action));
|
||||
public static IActivityBuilder StartWith(this IWorkflowBuilder builder, Func<ActivityExecutionContext, Task<IActivityExecutionResult>> action) => builder.StartWith(new Inline(action));
|
||||
|
||||
public static ActivityBuilder SetVariable(this IWorkflowBuilder builder, string variableName, IWorkflowExpression<object> value) => builder.StartWith<SetVariable>(x =>
|
||||
public static IActivityBuilder SetVariable(this IWorkflowBuilder builder, string variableName, IWorkflowExpression<object> value) => builder.StartWith<SetVariable>(x =>
|
||||
{
|
||||
x.VariableName = variableName;
|
||||
x.Value = value;
|
||||
});
|
||||
|
||||
public static ActivityBuilder SetVariable(this IWorkflowBuilder builder, string variableName, Func<object> value) => builder.SetVariable(variableName, (IWorkflowExpression<object>)new CodeExpression<object>(value));
|
||||
public static ActivityBuilder SetVariable<T>(this IWorkflowBuilder builder, string variableName, T value) => builder.SetVariable(variableName, () => value);
|
||||
public static IActivityBuilder SetVariable(this IWorkflowBuilder builder, string variableName, Func<object> value) => builder.SetVariable(variableName, (IWorkflowExpression<object>)new CodeExpression<object>(value));
|
||||
public static IActivityBuilder SetVariable<T>(this IWorkflowBuilder builder, string variableName, T value) => builder.SetVariable(variableName, () => value);
|
||||
}
|
||||
}
|
||||
|
|
@ -122,6 +122,7 @@ namespace Microsoft.Extensions.DependencyInjection
|
|||
.AddConsumer<RunWorkflow, RunWorkflowHandler>()
|
||||
.AddAutoMapperProfile<WorkflowDefinitionProfile>(ServiceLifetime.Singleton)
|
||||
.AddTypeAlias(typeof(CodeExpression<>), "CodeExpression")
|
||||
.AddTypeAlias<Duration>("Duration")
|
||||
.AddSerializationHandlers()
|
||||
.AddMetadataHandlers()
|
||||
.AddPrimitiveActivities();
|
||||
|
|
@ -151,6 +152,7 @@ namespace Microsoft.Extensions.DependencyInjection
|
|||
.AddTypeNameValueHandler<OffsetTimeHandler>()
|
||||
.AddTypeNameValueHandler<YearMonthHandler>()
|
||||
.AddTypeNameValueHandler<ZonedDateTimeHandler>()
|
||||
.AddTypeNameValueHandler<CodeExpressionHandler>()
|
||||
.AddTypeAlias<object>()
|
||||
.AddTypeAlias<bool>()
|
||||
.AddTypeAlias<int>()
|
||||
|
|
|
|||
|
|
@ -0,0 +1,32 @@
|
|||
using System;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using Elsa.Expressions;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using Elsa.Serialization.Extensions;
|
||||
|
||||
namespace Elsa.Serialization.Handlers
|
||||
{
|
||||
public sealed class CodeExpressionHandler : IValueHandler
|
||||
{
|
||||
public int Priority => 0;
|
||||
public bool CanSerialize(JToken token, Type type, object value) => typeof(CodeExpression).IsAssignableFrom(type);
|
||||
public bool CanDeserialize(JToken token) => token.Type == JTokenType.Object && token.GetValue<string>("Type") == TypeName;
|
||||
private string TypeName => nameof(CodeExpression);
|
||||
|
||||
public object? Deserialize(JsonSerializer serializer, JToken token)
|
||||
{
|
||||
return default;
|
||||
}
|
||||
|
||||
public void Serialize(JsonWriter writer, JsonSerializer serializer, Type type, JToken token, object? value)
|
||||
{
|
||||
var objectToken = new JObject
|
||||
{
|
||||
["Type"] = TypeName
|
||||
};
|
||||
objectToken.WriteTo(writer, serializer.Converters.ToArray());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,4 +1,5 @@
|
|||
using Newtonsoft.Json.Linq;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using NodaTime;
|
||||
using NodaTime.Text;
|
||||
|
||||
|
|
@ -6,6 +7,6 @@ namespace Elsa.Serialization.Handlers
|
|||
{
|
||||
public sealed class InstantHandler : PrimitiveValueHandler<Instant>
|
||||
{
|
||||
protected override object ParseValue(JToken value) => InstantPattern.ExtendedIso.Parse(value.ToString()).Value;
|
||||
protected override object ParseValue(JToken value) => InstantPattern.ExtendedIso.Parse(value.ToString(Formatting.None).Trim('\"')).Value;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
using Elsa.Persistence.DocumentDb.Services;
|
||||
using Elsa.AutoMapper.Extensions;
|
||||
using Elsa.AutoMapper.Extensions.NodaTime;
|
||||
using Elsa.Extensions;
|
||||
using Elsa.Persistence.DocumentDb.Mapping;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
using System;
|
||||
using Elsa.AutoMapper.Extensions;
|
||||
using Elsa.AutoMapper.Extensions.NodaTime;
|
||||
using Elsa.Extensions;
|
||||
using Elsa.Persistence.EntityFrameworkCore.CustomSchema;
|
||||
using Elsa.Persistence.EntityFrameworkCore.DbContexts;
|
||||
using Elsa.Persistence.EntityFrameworkCore.Mapping;
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@
|
|||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\activities\Elsa.Activities.Console\Elsa.Activities.Console.csproj" />
|
||||
<ProjectReference Include="..\..\core\Elsa\Elsa.csproj" />
|
||||
<ProjectReference Include="..\..\providers\Elsa.Persistence.MongoDb\Elsa.Persistence.MongoDb.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
|
|
|||
|
|
@ -19,10 +19,12 @@ namespace Elsa.Samples.Timers
|
|||
.ConfigureServices((hostContext, services) =>
|
||||
{
|
||||
services
|
||||
.AddElsa()
|
||||
.AddTimerActivities(options => options.Configure(timer => timer.SweepInterval = Duration.FromSeconds(5)))
|
||||
.AddWorkflow<RecurringTaskWorkflow>()
|
||||
.AddWorkflow<CronTaskWorkflow>();
|
||||
.AddElsa(options =>
|
||||
options.UseMongoDbWorkflowStores("Elsa_Samples_Timers", "mongodb://localhost"))
|
||||
.AddTimerActivities(options =>
|
||||
options.Configure(timer => timer.SweepInterval = Duration.FromSeconds(5)))
|
||||
.AddWorkflow<RecurringTaskWorkflow>();
|
||||
//.AddWorkflow<CronTaskWorkflow>();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -2,6 +2,8 @@ using System;
|
|||
using Elsa.Activities.Console;
|
||||
using Elsa.Activities.MassTransit;
|
||||
using Elsa.Builders;
|
||||
using Elsa.Expressions;
|
||||
using Elsa.Models;
|
||||
using NodaTime;
|
||||
|
||||
namespace Elsa.Samples.Timers
|
||||
|
|
@ -11,7 +13,9 @@ namespace Elsa.Samples.Timers
|
|||
public void Build(IWorkflowBuilder builder)
|
||||
{
|
||||
builder
|
||||
.TimerEvent(Duration.FromSeconds(5))
|
||||
.WithPersistenceBehavior(WorkflowPersistenceBehavior.ActivityExecuted)
|
||||
.TimerEvent(Duration.FromSeconds(1))
|
||||
.WriteLine(new CodeExpression<string>("Hello World"))
|
||||
.WriteLine(() => $"Timer event at {DateTime.Now}");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue