From 997fb53b081751d1b2fd069538e138f151b78779 Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Sun, 10 Jan 2021 17:10:04 +0100 Subject: [PATCH] Fix WorkfowSelector by retaining existing triggers when updating triggers for a single workflow instance --- .../Elsa.Core/Triggers/WorkflowSelector.cs | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/core/Elsa.Core/Triggers/WorkflowSelector.cs b/src/core/Elsa.Core/Triggers/WorkflowSelector.cs index cacb88355..eb2f6f4db 100644 --- a/src/core/Elsa.Core/Triggers/WorkflowSelector.cs +++ b/src/core/Elsa.Core/Triggers/WorkflowSelector.cs @@ -143,17 +143,28 @@ namespace Elsa.Triggers private async Task> BuildDescriptorsForAsync(IWorkflowBlueprint workflowBlueprint, string? workflowInstanceId, CancellationToken cancellationToken) { var descriptors = new List(); - + + if (workflowInstanceId != null) + { + descriptors = _descriptors![workflowBlueprint.Id].ToList(); + descriptors.RemoveAll(x => x.WorkflowInstanceId == workflowInstanceId); + + var workflowInstance = await _workflowInstanceStore.FindByIdAsync(workflowInstanceId, cancellationToken); + var blockingActivities = workflowBlueprint.GetBlockingActivities(workflowInstance!); + var resumeTriggers = await BuildDescriptorsAsync(workflowBlueprint, blockingActivities, workflowInstance, cancellationToken); + descriptors.AddRange(resumeTriggers); + + return descriptors; + } + // Build triggers for workflow blue prints. var startTriggers = await BuildDescriptorsAsync(workflowBlueprint, cancellationToken).ToList(); descriptors.AddRange(startTriggers); // Build triggers for workflow instances. - var specification = workflowInstanceId == null - ? new WorkflowInstanceDefinitionIdSpecification(workflowBlueprint.Id) + var specification = new WorkflowInstanceDefinitionIdSpecification(workflowBlueprint.Id) .WithTenant(workflowBlueprint.TenantId) - .WithStatus(WorkflowStatus.Suspended) - : new WorkflowInstanceIdSpecification(workflowInstanceId); + .WithStatus(WorkflowStatus.Suspended); var workflowInstances = await _workflowInstanceStore .FindManyAsync(specification, cancellationToken: cancellationToken)