From a3eb17b0ac66ac04cc56d7c191a7536cf5ca84c7 Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Thu, 3 Dec 2020 20:01:23 +0100 Subject: [PATCH] Always refresh workflow context when context ID has changed using SetContextId activity --- .../Services/Models/WorkflowExecutionContext.cs | 1 + .../Activities/Primitives/SetContextId/SetContextId.cs | 2 ++ src/core/Elsa.Core/Services/WorkflowRunner.cs | 5 ++++- 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/core/Elsa.Abstractions/Services/Models/WorkflowExecutionContext.cs b/src/core/Elsa.Abstractions/Services/Models/WorkflowExecutionContext.cs index b0986b5c4..0f4b1485d 100644 --- a/src/core/Elsa.Abstractions/Services/Models/WorkflowExecutionContext.cs +++ b/src/core/Elsa.Abstractions/Services/Models/WorkflowExecutionContext.cs @@ -36,6 +36,7 @@ namespace Elsa.Services.Models public bool HasPostScheduledActivities => WorkflowInstance.PostScheduledActivities.Any(); public IWorkflowFault? WorkflowFault { get; private set; } public bool IsFirstPass { get; private set; } + public bool ContextHasChanged { get; set; } public void ScheduleActivities(IEnumerable activityIds, object? input = default) { diff --git a/src/core/Elsa.Core/Activities/Primitives/SetContextId/SetContextId.cs b/src/core/Elsa.Core/Activities/Primitives/SetContextId/SetContextId.cs index 1d49b663a..cc44ec9ff 100644 --- a/src/core/Elsa.Core/Activities/Primitives/SetContextId/SetContextId.cs +++ b/src/core/Elsa.Core/Activities/Primitives/SetContextId/SetContextId.cs @@ -19,7 +19,9 @@ namespace Elsa.Activities.Primitives protected override IActivityExecutionResult OnExecute(ActivityExecutionContext context) { + var originalContextId = context.WorkflowExecutionContext.WorkflowInstance.ContextId; context.WorkflowExecutionContext.WorkflowInstance.ContextId = ContextId; + context.WorkflowExecutionContext.ContextHasChanged = ContextId != originalContextId; return Done(); } } diff --git a/src/core/Elsa.Core/Services/WorkflowRunner.cs b/src/core/Elsa.Core/Services/WorkflowRunner.cs index 0dc789736..aab3adc05 100644 --- a/src/core/Elsa.Core/Services/WorkflowRunner.cs +++ b/src/core/Elsa.Core/Services/WorkflowRunner.cs @@ -271,8 +271,11 @@ namespace Elsa.Services var currentActivityId = scheduledActivity.ActivityId; var activityBlueprint = workflowBlueprint.GetActivity(currentActivityId)!; - if (workflowBlueprint.ContextOptions?.ContextFidelity == WorkflowContextFidelity.Activity || activityBlueprint.LoadWorkflowContext) + if (workflowBlueprint.ContextOptions?.ContextFidelity == WorkflowContextFidelity.Activity || activityBlueprint.LoadWorkflowContext || workflowExecutionContext.ContextHasChanged) + { workflowExecutionContext.WorkflowContext = await LoadWorkflowContextAsync(workflowExecutionContext, WorkflowContextFidelity.Activity, activityBlueprint.LoadWorkflowContext, cancellationToken); + workflowExecutionContext.ContextHasChanged = false; + } var activityExecutionContext = new ActivityExecutionContext(scope, workflowExecutionContext, activityBlueprint, scheduledActivity.Input, cancellationToken); var activity = await activityExecutionContext.ActivateActivityAsync(cancellationToken);