From 7a76323c8121c375a2f41b5bcb35bb10848db620 Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Mon, 21 Jun 2021 15:53:55 +0200 Subject: [PATCH] Ensure parent of composite activities is set --- .../Workflows/WorkflowBlueprintMaterializer.cs | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/core/Elsa.Core/Services/Workflows/WorkflowBlueprintMaterializer.cs b/src/core/Elsa.Core/Services/Workflows/WorkflowBlueprintMaterializer.cs index e2d8404e8..35be7389a 100644 --- a/src/core/Elsa.Core/Services/Workflows/WorkflowBlueprintMaterializer.cs +++ b/src/core/Elsa.Core/Services/Workflows/WorkflowBlueprintMaterializer.cs @@ -43,7 +43,7 @@ namespace Elsa.Services.Workflows connections.AddRange(workflowDefinition.Connections.Select(x => ResolveConnection(x, activityBlueprints)).Where(x => x != null).Select(x => x!)); propertyProviders.AddRange(await CreatePropertyProviders(workflowDefinition, cancellationToken)); - return new WorkflowBlueprint( + var workflowBlueprint = new WorkflowBlueprint( workflowDefinition.DefinitionId, workflowDefinition.Version, workflowDefinition.TenantId, @@ -63,6 +63,11 @@ namespace Elsa.Services.Workflows connections, new ActivityPropertyProviders(propertyProviders.ToDictionary(x => x.Key, x => x.Value)) ); + + foreach (var compositeActivityBlueprint in compositeActivityBlueprints) + ((CompositeActivityBlueprint) compositeActivityBlueprint).Parent = workflowBlueprint; + + return workflowBlueprint; } private async Task CreatePropertyProviders(ICompositeActivityDefinition compositeActivityDefinition, CancellationToken cancellationToken) @@ -79,7 +84,7 @@ namespace Elsa.Services.Workflows foreach (var property in activityDefinition.Properties) { var propertyDescriptor = propertyDescriptors.FirstOrDefault(x => x.Name == property.Name); - + if (propertyDescriptor == null) { _logger.LogWarning("Could not find the specified property '{PropertyName}' for activity type {ActivityTypeName}", property.Name, activityType.TypeName); @@ -116,7 +121,7 @@ namespace Elsa.Services.Workflows { var list = new List(); var activityType = await _activityTypeService.GetActivityTypeAsync(activityDefinition.Type, cancellationToken); - + if (activityDefinition is CompositeActivityDefinition compositeActivityDefinition) { var manyActivityBlueprints = await Task.WhenAll(compositeActivityDefinition.Activities.Select(async x => await CreateBlueprintsAsync(x, cancellationToken))); @@ -160,14 +165,14 @@ namespace Elsa.Services.Workflows SaveWorkflowContextEnabled = activityDefinition.SaveWorkflowContext, PropertyStorageProviders = activityDefinition.PropertyStorageProviders }; - + compositeActivity.Build(compositeActivityBuilder); var compositeActivityBlueprint = compositeActivityBuilder.Build($"{activityDefinition.ActivityId}:activity"); list.Add(compositeActivityBlueprint); list.AddRange(compositeActivityBlueprint.Activities); - + // Connect the composite activity to its starting activities. var startActivities = _startingActivitiesProvider.GetStartActivities(compositeActivityBlueprint).ToList(); compositeActivityBlueprint.Connections.AddRange(startActivities.Select(x => new Connection(compositeActivityBlueprint, x, CompositeActivity.Enter)));