diff --git a/src/activities/Elsa.Activities.ControlFlow/Activities/Join.cs b/src/activities/Elsa.Activities.ControlFlow/Activities/Join.cs index 4b2ba4424..f72ec547a 100644 --- a/src/activities/Elsa.Activities.ControlFlow/Activities/Join.cs +++ b/src/activities/Elsa.Activities.ControlFlow/Activities/Join.cs @@ -122,6 +122,11 @@ namespace Elsa.Activities.ControlFlow.Activities return $"@{sourceActivityId}_{sourceOutcomeName}"; } + public Task ExecutingActivityAsync( + WorkflowExecutionContext workflowExecutionContext, + IActivity activity, + CancellationToken cancellationToken) => Task.CompletedTask; + Task IWorkflowEventHandler.ActivityExecutedAsync( WorkflowExecutionContext workflowContext, IActivity activity, diff --git a/src/core/Elsa.Abstractions/Services/IWorkflowEventHandler.cs b/src/core/Elsa.Abstractions/Services/IWorkflowEventHandler.cs index c6cd9cf30..2b5c13302 100644 --- a/src/core/Elsa.Abstractions/Services/IWorkflowEventHandler.cs +++ b/src/core/Elsa.Abstractions/Services/IWorkflowEventHandler.cs @@ -9,6 +9,10 @@ namespace Elsa.Services /// public interface IWorkflowEventHandler { + /// + /// Invoked before an activity execution. + /// + Task ExecutingActivityAsync(WorkflowExecutionContext workflowExecutionContext, IActivity activity, CancellationToken cancellationToken); /// /// Invoked when an activity has executed. diff --git a/src/core/Elsa.Abstractions/Services/WorkflowEventHandlerBase.cs b/src/core/Elsa.Abstractions/Services/WorkflowEventHandlerBase.cs index 2155c014f..730a9ff81 100644 --- a/src/core/Elsa.Abstractions/Services/WorkflowEventHandlerBase.cs +++ b/src/core/Elsa.Abstractions/Services/WorkflowEventHandlerBase.cs @@ -6,6 +6,15 @@ namespace Elsa.Services { public abstract class WorkflowEventHandlerBase : IWorkflowEventHandler { + public Task ExecutingActivityAsync( + WorkflowExecutionContext workflowExecutionContext, + IActivity activity, + CancellationToken cancellationToken) + { + ExecutingActivity(workflowExecutionContext, activity); + return Task.CompletedTask; + } + public virtual Task ActivityExecutedAsync( WorkflowExecutionContext workflowExecutionContext, IActivity activity, @@ -41,6 +50,12 @@ namespace Elsa.Services return Task.CompletedTask; } + protected virtual void ExecutingActivity( + WorkflowExecutionContext workflowExecutionContext, + IActivity activity) + { + } + protected virtual void ActivityExecuted(WorkflowExecutionContext workflowExecutionContext, IActivity activity) { } diff --git a/src/core/Elsa.Core/Services/WorkflowInvoker.cs b/src/core/Elsa.Core/Services/WorkflowInvoker.cs index 2180c42c4..b84ab2851 100644 --- a/src/core/Elsa.Core/Services/WorkflowInvoker.cs +++ b/src/core/Elsa.Core/Services/WorkflowInvoker.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Threading; @@ -345,6 +345,11 @@ namespace Elsa.Services IActivity activity, CancellationToken cancellationToken) { + await workflowEventHandlers.InvokeAsync( + async x => await x.ExecutingActivityAsync(workflowContext, activity, cancellationToken), + logger + ); + return await InvokeActivityAsync( workflowContext, activity,