Always refresh workflow context when context ID has changed using SetContextId activity
This commit is contained in:
parent
43cfe431f1
commit
a3eb17b0ac
|
|
@ -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<string> activityIds, object? input = default)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in a new issue