diff --git a/.editorconfig b/.editorconfig
index 2cf348570..593f45591 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -6,3 +6,7 @@ insert_final_newline=false
indent_style=space
indent_size=4
+# ReSharper properties
+resharper_csharp_max_line_length=240
+resharper_keep_user_linebreaks=true
+
diff --git a/Samples.sln b/Samples.sln
index 23f2a93bf..e707556df 100644
--- a/Samples.sln
+++ b/Samples.sln
@@ -80,8 +80,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Samples.CustomActiviti
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Samples.TimesheetApproval", "src\samples\Elsa.Samples.TimesheetApproval\Elsa.Samples.TimesheetApproval.csproj", "{1678743A-9095-4683-8DCD-5763F41924E2}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Samples.WorkflowDefinition", "src\samples\Elsa.Samples.WorkflowDefinition\Elsa.Samples.WorkflowDefinition.csproj", "{7AC91435-7D10-4353-9064-598A6F8EAED6}"
-EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.DistributedLocking.Redis", "src\providers\Elsa.DistributedLocking.Redis\Elsa.DistributedLocking.Redis.csproj", "{EBD49CCA-5400-4C36-B5DF-7B28190AA323}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Samples.DistributedLock", "src\samples\Elsa.Samples.DistributedLock\Elsa.Samples.DistributedLock.csproj", "{4D162E3C-0962-43B9-B193-6E806249F81B}"
@@ -194,10 +192,6 @@ Global
{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
- {7AC91435-7D10-4353-9064-598A6F8EAED6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {7AC91435-7D10-4353-9064-598A6F8EAED6}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {7AC91435-7D10-4353-9064-598A6F8EAED6}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {7AC91435-7D10-4353-9064-598A6F8EAED6}.Release|Any CPU.Build.0 = Release|Any CPU
{EBD49CCA-5400-4C36-B5DF-7B28190AA323}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EBD49CCA-5400-4C36-B5DF-7B28190AA323}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EBD49CCA-5400-4C36-B5DF-7B28190AA323}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -250,7 +244,6 @@ Global
{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}
- {7AC91435-7D10-4353-9064-598A6F8EAED6} = {5E5E1E84-DDBC-40D6-B891-0D563A15A44A}
{4D162E3C-0962-43B9-B193-6E806249F81B} = {5E5E1E84-DDBC-40D6-B891-0D563A15A44A}
{7CD5C8D5-EC78-4A99-A514-F01CA7197AC8} = {DA71CDAA-8DD3-4D5F-9FBD-8E4B37A2D925}
{E20238CE-5C64-4F87-8753-3B4E1EC9A740} = {7CD5C8D5-EC78-4A99-A514-F01CA7197AC8}
diff --git a/Samples.sln.DotSettings b/Samples.sln.DotSettings
index 02f0f6c77..b4bfed986 100644
--- a/Samples.sln.DotSettings
+++ b/Samples.sln.DotSettings
@@ -1,2 +1,4 @@
+ False
+ True
EF
\ No newline at end of file
diff --git a/src/core/Elsa.Abstractions/Builders/IWorkflowBuilder.cs b/src/core/Elsa.Abstractions/Builders/IWorkflowBuilder.cs
index 31ef9c9be..cbd29982a 100644
--- a/src/core/Elsa.Abstractions/Builders/IWorkflowBuilder.cs
+++ b/src/core/Elsa.Abstractions/Builders/IWorkflowBuilder.cs
@@ -30,11 +30,11 @@ namespace Elsa.Builders
where T : class, IActivity;
IActivityBuilder New(
- Action>? setup = default,
+ Action>? setup,
Action? branch = default) where T : class, IActivity;
IActivityBuilder StartWith(
- Action>? setup = default,
+ Action>? setup,
Action? branch = default) where T : class, IActivity;
IActivityBuilder StartWith(Action? branch = default)
diff --git a/src/core/Elsa.Abstractions/Services/Activity.cs b/src/core/Elsa.Abstractions/Services/Activity.cs
index b6c85db50..68b1004f2 100644
--- a/src/core/Elsa.Abstractions/Services/Activity.cs
+++ b/src/core/Elsa.Abstractions/Services/Activity.cs
@@ -11,7 +11,7 @@ namespace Elsa.Services
{
public abstract class Activity : IActivity
{
- public virtual string Type => GetType().Name;
+ public string Type => GetType().Name;
public string Id { get; set; } = default!;
public string? Name { get; set; }
public string? DisplayName { get; set; }
diff --git a/src/core/Elsa.Abstractions/Services/IActivity.cs b/src/core/Elsa.Abstractions/Services/IActivity.cs
index 07cccc1ec..df1da1f25 100644
--- a/src/core/Elsa.Abstractions/Services/IActivity.cs
+++ b/src/core/Elsa.Abstractions/Services/IActivity.cs
@@ -10,7 +10,7 @@ namespace Elsa.Services
///
/// The type name of this activity.
///
- string Type { get; set; }
+ string Type { get;}
///
/// Unique identifier of this activity within the workflow.
diff --git a/src/core/Elsa.Abstractions/Services/IWorkflowProvider.cs b/src/core/Elsa.Abstractions/Services/IWorkflowProvider.cs
index 6316f9748..1476cb399 100644
--- a/src/core/Elsa.Abstractions/Services/IWorkflowProvider.cs
+++ b/src/core/Elsa.Abstractions/Services/IWorkflowProvider.cs
@@ -10,6 +10,6 @@ namespace Elsa.Services
///
public interface IWorkflowProvider
{
- Task> GetWorkflowsAsync(CancellationToken cancellationToken);
+ Task> GetWorkflowsAsync(CancellationToken cancellationToken);
}
}
\ No newline at end of file
diff --git a/src/core/Elsa.Abstractions/Services/IWorkflowSchedulerQueue.cs b/src/core/Elsa.Abstractions/Services/IWorkflowSchedulerQueue.cs
index bb8d4e447..a72a19efd 100644
--- a/src/core/Elsa.Abstractions/Services/IWorkflowSchedulerQueue.cs
+++ b/src/core/Elsa.Abstractions/Services/IWorkflowSchedulerQueue.cs
@@ -4,7 +4,7 @@ namespace Elsa.Services
{
public interface IWorkflowSchedulerQueue
{
- void Enqueue(WorkflowBlueprint workflowBlueprint, IActivity activity, object? input, string? correlationId);
- (WorkflowBlueprint Workflow, IActivity Activity, object? Input, string? CorrelationId)? Dequeue(string workflowDefinitionId, string activityId);
+ void Enqueue(IWorkflowBlueprint workflowBlueprint, IActivityBlueprint activity, object? input, string? correlationId);
+ (IWorkflowBlueprint Workflow, IActivityBlueprint Activity, object? Input, string? CorrelationId)? Dequeue(string workflowDefinitionId, string activityId);
}
}
\ No newline at end of file
diff --git a/src/core/Elsa.Abstractions/Services/Models/ActivityBlueprint.cs b/src/core/Elsa.Abstractions/Services/Models/ActivityBlueprint.cs
index 7f1549d41..cb3dce1d0 100644
--- a/src/core/Elsa.Abstractions/Services/Models/ActivityBlueprint.cs
+++ b/src/core/Elsa.Abstractions/Services/Models/ActivityBlueprint.cs
@@ -11,23 +11,19 @@ namespace Elsa.Services.Models
{
}
- public ActivityBlueprint(
- Func> createActivity) =>
- CreateActivityAsync = createActivity;
+ public ActivityBlueprint(Func> createActivity) => CreateActivityAsync = createActivity;
- public ActivityBlueprint(
- string id,
- Func> createActivity)
+ public ActivityBlueprint(string id, Func> createActivity)
{
Id = id;
CreateActivityAsync = createActivity;
}
public string Id { get; set; } = default!;
+ public string? Name { get; set; }
public string Type { get; set; } = default!;
+ public bool PersistWorkflow { get; set; }
public JObject Data { get; set; } = new JObject();
-
- public Func> CreateActivityAsync { get; set; }
- = default!;
+ public Func> CreateActivityAsync { get; set; } = default!;
}
}
\ No newline at end of file
diff --git a/src/core/Elsa.Abstractions/Services/Models/ExecutionLogEntry.cs b/src/core/Elsa.Abstractions/Services/Models/ExecutionLogEntry.cs
index c030e4b8f..19486eae1 100644
--- a/src/core/Elsa.Abstractions/Services/Models/ExecutionLogEntry.cs
+++ b/src/core/Elsa.Abstractions/Services/Models/ExecutionLogEntry.cs
@@ -4,13 +4,13 @@ namespace Elsa.Services.Models
{
public class ExecutionLogEntry : IExecutionLogEntry
{
- public ExecutionLogEntry(IActivity activity, Instant timestamp)
+ public ExecutionLogEntry(string activityId, Instant timestamp)
{
- Activity = activity;
+ ActivityId = activityId;
Timestamp = timestamp;
}
- public IActivity Activity { get; }
+ public string ActivityId { get; }
public Instant Timestamp { get; }
}
}
\ No newline at end of file
diff --git a/src/core/Elsa.Abstractions/Services/Models/IActivityBlueprint.cs b/src/core/Elsa.Abstractions/Services/Models/IActivityBlueprint.cs
index e2a6f771a..23ba7f4ff 100644
--- a/src/core/Elsa.Abstractions/Services/Models/IActivityBlueprint.cs
+++ b/src/core/Elsa.Abstractions/Services/Models/IActivityBlueprint.cs
@@ -8,7 +8,9 @@ namespace Elsa.Services.Models
public interface IActivityBlueprint
{
public string Id { get; }
+ string? Name { get; }
public string Type { get; }
+ public bool PersistWorkflow { get; }
public JObject Data { get; }
Func> CreateActivityAsync { get; }
}
diff --git a/src/core/Elsa.Abstractions/Services/Models/IExecutionLogEntry.cs b/src/core/Elsa.Abstractions/Services/Models/IExecutionLogEntry.cs
index dcd45b4b1..14b09a178 100644
--- a/src/core/Elsa.Abstractions/Services/Models/IExecutionLogEntry.cs
+++ b/src/core/Elsa.Abstractions/Services/Models/IExecutionLogEntry.cs
@@ -4,7 +4,7 @@ namespace Elsa.Services.Models
{
public interface IExecutionLogEntry
{
- IActivity Activity { get; }
+ string ActivityId { get; }
Instant Timestamp { get; }
}
}
\ No newline at end of file
diff --git a/src/core/Elsa.Abstractions/Services/Models/WorkflowExecutionContext.cs b/src/core/Elsa.Abstractions/Services/Models/WorkflowExecutionContext.cs
index 19d89d559..4aa3cc238 100644
--- a/src/core/Elsa.Abstractions/Services/Models/WorkflowExecutionContext.cs
+++ b/src/core/Elsa.Abstractions/Services/Models/WorkflowExecutionContext.cs
@@ -25,7 +25,7 @@ namespace Elsa.Services.Models
//ICollection scheduledActivities,
//ICollection blockingActivities,
//IEnumerable? executionLog = default
- )
+ )
{
ServiceProvider = serviceProvider;
WorkflowBlueprint = workflowBlueprint;
@@ -49,12 +49,17 @@ namespace Elsa.Services.Models
new ScheduledActivity(scheduledActivityModel.ActivityId, scheduledActivityModel.Input);
public IWorkflowBlueprint WorkflowBlueprint { get; }
+
public IServiceProvider ServiceProvider { get; }
+
// public WorkflowDefinition WorkflowDefinition { get; }
public WorkflowInstance WorkflowInstance { get; }
public WorkflowStatus Status { get; set; }
public Stack ScheduledActivities { get; }
- public HashSet BlockingActivities { get; } = new HashSet(new BlockingActivityEqualityComparer());
+
+ public HashSet BlockingActivities { get; } =
+ new HashSet(new BlockingActivityEqualityComparer());
+
public Variables Variables { get; }
public bool HasScheduledActivities => ScheduledActivities.Any();
public IScheduledActivity? ScheduledActivity { get; private set; }
@@ -87,7 +92,9 @@ namespace Elsa.Services.Models
public ICollection ExecutionLog { get; }
public bool IsFirstPass { get; private set; }
- public bool AddBlockingActivity(IActivity activity) => BlockingActivities.Add(new BlockingActivity(activity.Id, activity.Type));
+ public bool AddBlockingActivity(IActivity activity) =>
+ BlockingActivities.Add(new BlockingActivity(activity.Id, activity.Type));
+
public void SetVariable(string name, object? value) => Variables.Set(name, JToken.FromObject(value!));
public T GetVariable(string name) => (T)GetVariable(name)!;
public object? GetVariable(string name) => Variables.Get(name);
@@ -103,10 +110,12 @@ namespace Elsa.Services.Models
public void Complete() => Status = WorkflowStatus.Completed;
- public IActivityBlueprint? GetActivity(string id) => WorkflowBlueprint.Activities.FirstOrDefault(x => x.Id == id);
+ public IActivityBlueprint? GetActivity(string id) =>
+ WorkflowBlueprint.Activities.FirstOrDefault(x => x.Id == id);
- public void UpdateWorkflowInstance(WorkflowInstance workflowInstance)
+ public WorkflowInstance UpdateWorkflowInstance()
{
+ var workflowInstance = WorkflowInstance;
workflowInstance.Variables = Variables;
workflowInstance.ScheduledActivities = new Stack(
@@ -121,7 +130,7 @@ namespace Elsa.Services.Models
workflowInstance.Output = Output;
var executionLog = workflowInstance.ExecutionLog.Concat(
- ExecutionLog.Select(x => new Elsa.Models.ExecutionLogEntry(x.Activity.Id, x.Timestamp)));
+ ExecutionLog.Select(x => new Elsa.Models.ExecutionLogEntry(x.ActivityId, x.Timestamp)));
workflowInstance.ExecutionLog = executionLog.ToList();
@@ -133,6 +142,8 @@ namespace Elsa.Services.Models
Message = WorkflowFault.Message
};
}
+
+ return workflowInstance;
}
private JObject Serialize(IActivity activity) => JObject.FromObject(activity);
diff --git a/src/core/Elsa.Core/Data/Services/DatabaseWorkflowProvider.cs b/src/core/Elsa.Core/Data/Services/DatabaseWorkflowProvider.cs
index cc8a7de2d..85cf27765 100644
--- a/src/core/Elsa.Core/Data/Services/DatabaseWorkflowProvider.cs
+++ b/src/core/Elsa.Core/Data/Services/DatabaseWorkflowProvider.cs
@@ -25,7 +25,7 @@ namespace Elsa.Data.Services
_activityActivator = activityActivator;
}
- public async Task> GetWorkflowsAsync(CancellationToken cancellationToken)
+ public async Task> GetWorkflowsAsync(CancellationToken cancellationToken)
{
var workflowDefinitions = await _workflowDefinitionManager.ListAsync(cancellationToken);
return workflowDefinitions.Select(CreateWorkflow);
@@ -87,7 +87,6 @@ namespace Elsa.Data.Services
activity.Description = activityDefinition.Description;
activity.Id = activityDefinition.Id;
activity.Name = activityDefinition.Name;
- activity.Type = activityDefinition.Type;
activity.DisplayName = activityDefinition.DisplayName;
activity.PersistWorkflow = activityDefinition.PersistWorkflow;
diff --git a/src/core/Elsa.Core/Messaging/Domain/Handlers/PersistenceWorkflowEventHandler.cs b/src/core/Elsa.Core/Messaging/Domain/Handlers/PersistenceWorkflowEventHandler.cs
index 4de5150ca..fb893b639 100644
--- a/src/core/Elsa.Core/Messaging/Domain/Handlers/PersistenceWorkflowEventHandler.cs
+++ b/src/core/Elsa.Core/Messaging/Domain/Handlers/PersistenceWorkflowEventHandler.cs
@@ -53,8 +53,10 @@ namespace Elsa.Messaging.Domain.Handlers
{
_logger.LogDebug(
"Deleting completed workflow instance {WorkflowInstanceId}",
- workflowExecutionContext.WorkflowInstanceId);
- await _workflowInstanceManager.DeleteAsync(workflowExecutionContext.WorkflowInstance, cancellationToken);
+ workflowExecutionContext.WorkflowInstance.WorkflowInstanceId);
+ await _workflowInstanceManager.DeleteAsync(
+ workflowExecutionContext.WorkflowInstance,
+ cancellationToken);
}
else
{
@@ -62,7 +64,9 @@ namespace Elsa.Messaging.Domain.Handlers
}
}
- private async ValueTask SaveWorkflowAsync(WorkflowExecutionContext workflowExecutionContext, CancellationToken cancellationToken)
+ private async ValueTask SaveWorkflowAsync(
+ WorkflowExecutionContext workflowExecutionContext,
+ CancellationToken cancellationToken)
{
var workflowInstance = workflowExecutionContext.UpdateWorkflowInstance();
await _workflowInstanceManager.SaveAsync(workflowInstance, cancellationToken);
diff --git a/src/core/Elsa.Core/Messaging/Domain/Handlers/WorkflowExecutionLogEventHandler.cs b/src/core/Elsa.Core/Messaging/Domain/Handlers/WorkflowExecutionLogEventHandler.cs
index 03b22ace4..49c5e265e 100644
--- a/src/core/Elsa.Core/Messaging/Domain/Handlers/WorkflowExecutionLogEventHandler.cs
+++ b/src/core/Elsa.Core/Messaging/Domain/Handlers/WorkflowExecutionLogEventHandler.cs
@@ -17,7 +17,9 @@ namespace Elsa.Messaging.Domain.Handlers
public Task Handle(ActivityExecuted notification, CancellationToken cancellationToken)
{
- notification.WorkflowExecutionContext.ExecutionLog.Add(new ExecutionLogEntry(notification.Activity, _clock.GetCurrentInstant()));
+ notification.WorkflowExecutionContext.ExecutionLog.Add(
+ new ExecutionLogEntry(notification.Activity.Id, _clock.GetCurrentInstant()));
+
return Task.CompletedTask;
}
}
diff --git a/src/core/Elsa.Core/Services/WorkflowHost.cs b/src/core/Elsa.Core/Services/WorkflowHost.cs
index b4a2c9a14..2097eadeb 100644
--- a/src/core/Elsa.Core/Services/WorkflowHost.cs
+++ b/src/core/Elsa.Core/Services/WorkflowHost.cs
@@ -68,12 +68,7 @@ namespace Elsa.Services
correlationId,
cancellationToken);
- return await RunWorkflowAsync(
- workflowBlueprint,
- workflowInstance,
- activityId,
- input,
- cancellationToken);
+ return await RunWorkflowAsync(workflowBlueprint, workflowInstance, activityId, input, cancellationToken);
}
@@ -89,8 +84,7 @@ namespace Elsa.Services
cancellationToken);
if (workflowBlueprint == null)
- throw new WorkflowException(
- $"Workflow instance {workflowInstance.Id} references workflow definition {workflowInstance.WorkflowDefinitionId} version {workflowInstance.Version}, but no such workflow definition was found.");
+ throw new WorkflowException($"Workflow instance {workflowInstance.Id} references workflow definition {workflowInstance.WorkflowDefinitionId} version {workflowInstance.Version}, but no such workflow definition was found.");
return await RunWorkflowAsync(workflowBlueprint, workflowInstance, activityId, input, cancellationToken);
}
@@ -147,8 +141,7 @@ namespace Elsa.Services
if (statusEvent != null)
await _mediator.Publish(statusEvent, cancellationToken);
- workflowExecutionContext.UpdateWorkflowInstance(workflowInstance);
- return workflowInstance;
+ return workflowExecutionContext.UpdateWorkflowInstance();
}
private async Task BeginWorkflow(
@@ -204,7 +197,7 @@ namespace Elsa.Services
activityBlueprint,
input);
- var activity = await activityBlueprint.CreateActivityAsync();
+ var activity = await activityBlueprint.CreateActivityAsync(activityExecutionContext, cancellationToken);
return await activity.CanExecuteAsync(activityExecutionContext, cancellationToken);
}
@@ -227,8 +220,7 @@ namespace Elsa.Services
activityBlueprint,
scheduledActivity.Input);
- var activity = await activityBlueprint.CreateActivityAsync();
-
+ var activity = await activityBlueprint.CreateActivityAsync(activityExecutionContext, cancellationToken);
var result = await activityOperation(activityExecutionContext, activity, cancellationToken);
await _mediator.Publish(new ActivityExecuting(activityExecutionContext), cancellationToken);
await result.ExecuteAsync(activityExecutionContext, cancellationToken);
diff --git a/src/core/Elsa.Core/Services/WorkflowScheduler.cs b/src/core/Elsa.Core/Services/WorkflowScheduler.cs
index 5d6b4302e..96b33c3cf 100644
--- a/src/core/Elsa.Core/Services/WorkflowScheduler.cs
+++ b/src/core/Elsa.Core/Services/WorkflowScheduler.cs
@@ -40,7 +40,8 @@ namespace Elsa.Services
_queue = queue;
}
- public async Task ScheduleWorkflowAsync(string instanceId,
+ public async Task ScheduleWorkflowAsync(
+ string instanceId,
string? activityId = default,
object? input = default,
CancellationToken cancellationToken = default) =>
@@ -56,10 +57,10 @@ namespace Elsa.Services
definitionId,
VersionOptions.Published,
cancellationToken);
-
- if(workflow == null)
+
+ if (workflow == null)
throw new WorkflowException($"No workflow definition found by ID {definitionId}");
-
+
var startActivities = workflow.GetStartActivities();
foreach (var activity in startActivities)
@@ -103,7 +104,7 @@ namespace Elsa.Services
where activity.Type == activityType
select (workflow, activity);
- var tuples = (IList<(WorkflowBlueprint Workflow, IActivity Activity)>)query.ToList();
+ var tuples = (IList<(IWorkflowBlueprint Workflow, IActivityBlueprint Activity)>)query.ToList();
tuples = await FilterRunningSingletonsAsync(tuples).ToList();
@@ -164,8 +165,9 @@ namespace Elsa.Services
cancellationToken);
}
- private async Task ScheduleWorkflowAsync(WorkflowBlueprint workflowBlueprint,
- IActivity activity,
+ private async Task ScheduleWorkflowAsync(
+ IWorkflowBlueprint workflowBlueprint,
+ IActivityBlueprint activity,
object? input,
string? correlationId,
CancellationToken cancellationToken)
@@ -175,8 +177,7 @@ namespace Elsa.Services
await ScheduleWorkflowAsync(workflowInstance.WorkflowInstanceId, activity.Id, input, cancellationToken);
}
- private async Task> FilterRunningSingletonsAsync(
- IEnumerable<(WorkflowBlueprint Workflow, IActivity Activity)> tuples)
+ private async Task> FilterRunningSingletonsAsync(IEnumerable<(IWorkflowBlueprint Workflow, IActivityBlueprint Activity)> tuples)
{
var tupleList = tuples.ToList();
var transients = tupleList.Where(x => !x.Workflow.IsSingleton).ToList();
@@ -197,7 +198,7 @@ namespace Elsa.Services
return result;
}
- private async Task> GetStartedWorkflowsAsync(WorkflowBlueprint workflowBlueprint)
+ private async Task> GetStartedWorkflowsAsync(IWorkflowBlueprint workflowBlueprint)
{
var workflowDefinitionId = workflowBlueprint.Id;
@@ -218,8 +219,8 @@ namespace Elsa.Services
public async Task Handle(WorkflowCompleted notification, CancellationToken cancellationToken)
{
var workflowExecutionContext = notification.WorkflowExecutionContext;
- var workflowDefinitionId = workflowExecutionContext.WorkflowDefinitionId;
- var startActivityId = workflowExecutionContext.ExecutionLog.Select(x => x.Activity.Id).FirstOrDefault();
+ var workflowDefinitionId = workflowExecutionContext.WorkflowBlueprint.Id;
+ var startActivityId = workflowExecutionContext.ExecutionLog.Select(x => x.ActivityId).FirstOrDefault();
if (startActivityId == null)
return;
diff --git a/src/core/Elsa.Core/Services/WorkflowSchedulerQueue.cs b/src/core/Elsa.Core/Services/WorkflowSchedulerQueue.cs
index 31376b4ed..e3773a7cf 100644
--- a/src/core/Elsa.Core/Services/WorkflowSchedulerQueue.cs
+++ b/src/core/Elsa.Core/Services/WorkflowSchedulerQueue.cs
@@ -5,15 +5,15 @@ namespace Elsa.Services
{
public class WorkflowSchedulerQueue : IWorkflowSchedulerQueue
{
- private readonly IDictionary<(string WorkflowDefinitionId, string ActivityId), (WorkflowBlueprint Workflow, IActivity Activity, object? Input, string? CorrelationId)> _nextWorkflowInstances;
+ private readonly IDictionary<(string WorkflowDefinitionId, string ActivityId), (IWorkflowBlueprint Workflow, IActivityBlueprint Activity, object? Input, string? CorrelationId)> _nextWorkflowInstances;
public WorkflowSchedulerQueue() =>
- _nextWorkflowInstances = new Dictionary<(string WorkflowDefinitionId, string ActivityId), (WorkflowBlueprint Workflow, IActivity Activity, object? Input, string? CorrelationId)>();
+ _nextWorkflowInstances = new Dictionary<(string WorkflowDefinitionId, string ActivityId), (IWorkflowBlueprint Workflow, IActivityBlueprint Activity, object? Input, string? CorrelationId)>();
- public void Enqueue(WorkflowBlueprint workflowBlueprint, IActivity activity, object? input, string? correlationId)
+ public void Enqueue(IWorkflowBlueprint workflowBlueprint, IActivityBlueprint activity, object? input, string? correlationId)
=> _nextWorkflowInstances[(workflowBlueprint.Id, activity.Id)] = (workflowBlueprint, activity, input, correlationId);
- public (WorkflowBlueprint Workflow, IActivity Activity, object? Input, string? CorrelationId)? Dequeue(string workflowDefinitionId, string activityId)
+ public (IWorkflowBlueprint Workflow, IActivityBlueprint Activity, object? Input, string? CorrelationId)? Dequeue(string workflowDefinitionId, string activityId)
{
var key = (workflowDefinitionId, activityId);
if(!_nextWorkflowInstances.ContainsKey(key))
diff --git a/src/core/Elsa.Core/WorkflowProviders/CodeWorkflowProvider.cs b/src/core/Elsa.Core/WorkflowProviders/CodeWorkflowProvider.cs
index 489558325..d5c4261af 100644
--- a/src/core/Elsa.Core/WorkflowProviders/CodeWorkflowProvider.cs
+++ b/src/core/Elsa.Core/WorkflowProviders/CodeWorkflowProvider.cs
@@ -23,7 +23,7 @@ namespace Elsa.WorkflowProviders
_workflowBuilder = workflowBuilder;
}
- public Task> GetWorkflowsAsync(CancellationToken cancellationToken) => Task.FromResult(GetWorkflows());
- private IEnumerable GetWorkflows() => from workflow in _workflows let builder = _workflowBuilder() select builder.Build(workflow);
+ public Task> GetWorkflowsAsync(CancellationToken cancellationToken) => Task.FromResult(GetWorkflows());
+ private IEnumerable GetWorkflows() => from workflow in _workflows let builder = _workflowBuilder() select builder.Build(workflow);
}
}
\ No newline at end of file
diff --git a/src/samples/Elsa.Samples.WorkflowDefinition/Elsa.Samples.WorkflowDefinition.csproj b/src/samples/Elsa.Samples.WorkflowDefinition/Elsa.Samples.WorkflowDefinition.csproj
deleted file mode 100644
index c1a48a934..000000000
--- a/src/samples/Elsa.Samples.WorkflowDefinition/Elsa.Samples.WorkflowDefinition.csproj
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
- Exe
- netcoreapp3.1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/samples/Elsa.Samples.WorkflowDefinition/Program.cs b/src/samples/Elsa.Samples.WorkflowDefinition/Program.cs
deleted file mode 100644
index 3b5011af0..000000000
--- a/src/samples/Elsa.Samples.WorkflowDefinition/Program.cs
+++ /dev/null
@@ -1,61 +0,0 @@
-using Elsa.Activities.Console;
-using Elsa.Models;
-using Elsa.Services;
-using Elsa.Builders;
-
-using Microsoft.Extensions.DependencyInjection;
-using System;
-using System.Collections.Generic;
-using System.Threading.Tasks;
-using Microsoft.Extensions.Logging;
-
-namespace Elsa.Samples.WorkflowDefinition
-{
- internal class Program
- {
- private static async Task Main(string[] args)
- {
- var services = new ServiceCollection()
- .AddElsa()
- .AddLogging(log => log.AddConsole())
- .AddConsoleActivities()
- .AddSingleton(Console.In)
- .BuildServiceProvider();
-
- var activityResolver = services.GetRequiredService();
- var activity1 = activityResolver.ActivateActivity()
- .WithId("activity-1")
- .WithText("Hello world!");
-
- var activity2 = activityResolver.ActivateActivity()
- .WithId("activity-2")
- .WithText("Goodbye cruel world...!");
-
- // Create Workflow Definition.
- var workflowDefinition = new Models.WorkflowDefinition
- {
- WorkflowDefinitionVersionId = "definition-001",
- IsPublished = true,
- Activities = new List
- {
- ActivityDefinition.FromActivity(activity1),
- ActivityDefinition.FromActivity(activity2)
- },
- Connections = new[]
- {
- new ConnectionDefinition("activity-1", "activity-2", OutcomeNames.Done),
- }
- };
-
- // Register it.
- //var workflowDefinitionStore = services.GetService();
- //await workflowDefinitionStore.AddAsync(workflowDefinition);
-
- // Run it.
- var invoker = services.GetService();
- await invoker.RunWorkflowDefinitionAsync("definition-001");
-
- Console.ReadLine();
- }
- }
-}
\ No newline at end of file
diff --git a/src/scripting/Elsa.Scripting.Liquid/Handlers/CommonLiquidContextHandler.cs b/src/scripting/Elsa.Scripting.Liquid/Handlers/CommonLiquidContextHandler.cs
index 17d5e0272..e14637f10 100644
--- a/src/scripting/Elsa.Scripting.Liquid/Handlers/CommonLiquidContextHandler.cs
+++ b/src/scripting/Elsa.Scripting.Liquid/Handlers/CommonLiquidContextHandler.cs
@@ -1,4 +1,5 @@
-using System.Collections.Generic;
+using System;
+using System.Collections.Generic;
using System.Dynamic;
using System.Linq;
using System.Threading;
@@ -39,9 +40,9 @@ namespace Elsa.Scripting.Liquid.Handlers
"Variables",
x => new LiquidPropertyAccessor(name => ToFluidValue(x.WorkflowExecutionContext.Variables, name)));
- context.MemberAccessStrategy.Register>(
+ context.MemberAccessStrategy.Register>(
"Activities",
- x => new LiquidObjectAccessor(name => GetActivityAsync(x, name)));
+ x => new LiquidObjectAccessor(name => GetActivityAsync(x, name)));
context.MemberAccessStrategy.Register, object>(GetActivityOutput);
@@ -64,10 +65,11 @@ namespace Elsa.Scripting.Liquid.Handlers
private async Task