Scaffold new activities
This commit is contained in:
parent
d25a45bdd9
commit
488ea1ef98
10
src/core/Elsa.Core/Activities/Break.cs
Normal file
10
src/core/Elsa.Core/Activities/Break.cs
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
using Elsa.Attributes;
|
||||
using Elsa.Models;
|
||||
|
||||
namespace Elsa.Activities;
|
||||
|
||||
[Activity("Elsa", "Control Flow", "Break out of a loop")]
|
||||
public class Break : Activity
|
||||
{
|
||||
// TODO.
|
||||
}
|
||||
10
src/core/Elsa.Core/Activities/Finish.cs
Normal file
10
src/core/Elsa.Core/Activities/Finish.cs
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
using Elsa.Attributes;
|
||||
using Elsa.Models;
|
||||
|
||||
namespace Elsa.Activities;
|
||||
|
||||
[Activity("Elsa", "Control Flow", "Mark the workflow as Finished")]
|
||||
public class Finish : Activity
|
||||
{
|
||||
// TODO.
|
||||
}
|
||||
|
|
@ -1,3 +1,4 @@
|
|||
using System.Text.Json.Serialization;
|
||||
using Elsa.Attributes;
|
||||
using Elsa.Contracts;
|
||||
using Elsa.Models;
|
||||
|
|
@ -60,6 +61,20 @@ public class ForEach : Activity
|
|||
|
||||
public class ForEach<T> : ForEach
|
||||
{
|
||||
[JsonConstructor]
|
||||
public ForEach()
|
||||
{
|
||||
}
|
||||
|
||||
public ForEach(Input<ICollection<T>> items)
|
||||
{
|
||||
Items = items;
|
||||
}
|
||||
|
||||
public ForEach(ICollection<T> items) : this(new Input<ICollection<T>>(items))
|
||||
{
|
||||
}
|
||||
|
||||
[Input]
|
||||
public new Input<ICollection<T>> Items
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
using System.Text.Json.Serialization;
|
||||
using Elsa.Attributes;
|
||||
using Elsa.Contracts;
|
||||
using Elsa.Expressions;
|
||||
|
|
@ -33,7 +34,7 @@ public class Switch : Activity
|
|||
private async Task<SwitchCase?> FindMatchingCaseAsync(ExpressionExecutionContext context)
|
||||
{
|
||||
var expressionEvaluator = context.GetRequiredService<IExpressionEvaluator>();
|
||||
|
||||
|
||||
foreach (var switchCase in Cases)
|
||||
{
|
||||
var result = await expressionEvaluator.EvaluateAsync<bool>(switchCase.Condition, context);
|
||||
|
|
@ -51,11 +52,38 @@ public class Switch : Activity
|
|||
/// </summary>
|
||||
public class SwitchCase
|
||||
{
|
||||
// ReSharper disable once EmptyConstructor
|
||||
[JsonConstructor]
|
||||
public SwitchCase()
|
||||
{
|
||||
}
|
||||
|
||||
public SwitchCase(string label, IExpression condition, IActivity activity)
|
||||
{
|
||||
Label = label;
|
||||
Condition = condition;
|
||||
Activity = activity;
|
||||
}
|
||||
|
||||
public SwitchCase(string label, DelegateReference<bool> condition, IActivity activity) : this(label, new DelegateExpression(condition), activity)
|
||||
{
|
||||
}
|
||||
|
||||
public SwitchCase(string label, Func<ExpressionExecutionContext, ValueTask<bool>> condition, IActivity activity) : this(label, new DelegateReference<bool>(condition), activity)
|
||||
{
|
||||
}
|
||||
|
||||
public SwitchCase(string label, Func<ValueTask<bool>> condition, IActivity activity) : this(label, new DelegateReference<bool>(condition), activity)
|
||||
{
|
||||
}
|
||||
|
||||
public SwitchCase(string label, Func<ExpressionExecutionContext, bool> condition, IActivity activity) : this(label, new DelegateReference<bool>(condition), activity)
|
||||
{
|
||||
}
|
||||
|
||||
public SwitchCase(string label, Func<bool> condition, IActivity activity) : this(label, new DelegateReference<bool>(condition), activity)
|
||||
{
|
||||
}
|
||||
|
||||
public string Label { get; set; } = default!;
|
||||
public IExpression Condition { get; set; } = new LiteralExpression(false);
|
||||
public IActivity? Activity { get; set; }
|
||||
|
|
|
|||
64
src/modules/Elsa.Modules.Scheduling/Activities/RunAt.cs
Normal file
64
src/modules/Elsa.Modules.Scheduling/Activities/RunAt.cs
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
using System;
|
||||
using System.Threading.Tasks;
|
||||
using Elsa.Attributes;
|
||||
using Elsa.Contracts;
|
||||
using Elsa.Models;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace Elsa.Modules.Scheduling.Activities;
|
||||
|
||||
[Activity("Elsa", "Scheduling", "Delay execution for the specified amount of time.")]
|
||||
public class RunAt : Activity
|
||||
{
|
||||
public RunAt()
|
||||
{
|
||||
}
|
||||
|
||||
public RunAt(Input<DateTimeOffset> dateTime) => DateTime = dateTime;
|
||||
|
||||
public RunAt(Func<ExpressionExecutionContext, DateTimeOffset> dateTime) : this(new Input<DateTimeOffset>(dateTime))
|
||||
{
|
||||
}
|
||||
|
||||
public RunAt(Func<ExpressionExecutionContext, ValueTask<DateTimeOffset>> dateTime) : this(new Input<DateTimeOffset>(dateTime))
|
||||
{
|
||||
}
|
||||
|
||||
public RunAt(Func<ValueTask<DateTimeOffset>> dateTime) : this(new Input<DateTimeOffset>(dateTime))
|
||||
{
|
||||
}
|
||||
|
||||
public RunAt(Func<DateTimeOffset> dateTime) : this(new Input<DateTimeOffset>(dateTime))
|
||||
{
|
||||
}
|
||||
|
||||
public RunAt(DateTimeOffset dateTime) => DateTime = new Input<DateTimeOffset>(dateTime);
|
||||
public RunAt(Variable<DateTimeOffset> dateTime) => DateTime = new Input<DateTimeOffset>(dateTime);
|
||||
|
||||
[Input] public Input<DateTimeOffset> DateTime { get; set; } = default!;
|
||||
|
||||
protected override void Execute(ActivityExecutionContext context)
|
||||
{
|
||||
// TODO: Update e.g. ScheduleWorkflows and other places to make sure this activity works correctly when suspending & resuming workflows.
|
||||
|
||||
var executeAt = context.ExpressionExecutionContext.Get(DateTime);
|
||||
var clock = context.ExpressionExecutionContext.GetRequiredService<ISystemClock>();
|
||||
var now = clock.UtcNow;
|
||||
var logger = context.GetRequiredService<ILogger<RunAt>>();
|
||||
|
||||
if (executeAt <= now)
|
||||
{
|
||||
logger.LogDebug("Scheduled trigger time lies in the past ('{Delta}'). Skipping scheduling", now - executeAt);
|
||||
context.JournalData.Add("Executed At", now);
|
||||
return;
|
||||
}
|
||||
|
||||
var payload = new RunAtPayload(executeAt);
|
||||
|
||||
context.CreateBookmark(payload);
|
||||
}
|
||||
|
||||
public static RunAt From(DateTimeOffset value) => new(value);
|
||||
}
|
||||
|
||||
public record RunAtPayload(DateTimeOffset ResumeAt);
|
||||
|
|
@ -10,8 +10,4 @@
|
|||
<ProjectReference Include="..\..\core\Elsa.Jobs\Elsa.Jobs.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Folder Include="Triggers" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
|
|
|||
Loading…
Reference in a new issue