Skip to content

Commit

Permalink
Fix output mapping naming collision
Browse files Browse the repository at this point in the history
  • Loading branch information
sfmskywalker committed Nov 15, 2023
1 parent e4d6ad2 commit 3a4b15b
Show file tree
Hide file tree
Showing 7 changed files with 41 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -77,8 +77,10 @@ private async ValueTask OnChildCompletedAsync(ActivityCompletedContext context)
var value = variable.Get(activityExecutionContext);

// Assign the value to the output synthetic property.
// Make sure to select a parent scope to avoid naming collisions between outputs defined on the current scope and outputs defined on parent scopes.
var parentActivityExecutionContext = activityExecutionContext.ParentActivityExecutionContext ?? activityExecutionContext;
var output = SyntheticProperties.TryGetValue(outputDescriptor.Name, out var outputValue) ? (Output?)outputValue : default;
activityExecutionContext.Set(output, value);
parentActivityExecutionContext.Set(output, value);
}

// Complete this activity with the signal value.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,18 @@
<None Update="Scenarios\ParentChildCompletion\Workflows\parent.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Scenarios\ParentChildOutputMapping\Workflows\a.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Scenarios\ParentChildOutputMapping\Workflows\b.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Scenarios\ParentChildOutputMapping\Workflows\c.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Scenarios\ParentChildOutputMapping\Workflows\d.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>



Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,4 +41,26 @@ public async Task Test1()
var lines = _capturingTextWriter.Lines.ToList();
Assert.Equal(new[] { "Result: 9" }, lines);
}

[Fact(DisplayName = "Multiple parent/child workflows receive output from child workflows even when using same output names.")]
public async Task Test2()
{
// Populate registries.
await _services.PopulateRegistriesAsync();

// Import workflows.
await _services.ImportWorkflowDefinitionAsync("Scenarios/ParentChildOutputMapping/Workflows/a.json");
await _services.ImportWorkflowDefinitionAsync("Scenarios/ParentChildOutputMapping/Workflows/b.json");
await _services.ImportWorkflowDefinitionAsync("Scenarios/ParentChildOutputMapping/Workflows/c.json");

// Import root workflow.
var workflowDefinition = await _services.ImportWorkflowDefinitionAsync("Scenarios/ParentChildOutputMapping/Workflows/d.json");

// Execute.
await _services.RunWorkflowUntilEndAsync(workflowDefinition.DefinitionId);

// Assert expected output.
var lines = _capturingTextWriter.Lines.ToList();
Assert.Equal(new[] { "FooBar" }, lines);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"id":"5d8015cea7b44c96","definitionId":"7fe314161d2d2ac6","name":"A","createdAt":"2023-11-15T13:55:38.86581+00:00","version":1,"toolVersion":"3.0.0.0","variables":[],"inputs":[],"outputs":[{"type":"Object","name":"Output1","displayName":"Output 1","category":"Primitives","isArray":false}],"outcomes":[],"customProperties":{"Elsa:WorkflowContextProviderTypes":[]},"isReadonly":false,"isLatest":true,"isPublished":true,"options":{"usableAsActivity":true,"autoUpdateConsumingWorkflows":true},"root":{"type":"Elsa.Flowchart","version":1,"id":"d84ccfca1b90bc0c","nodeId":"Workflow1:d84ccfca1b90bc0c","metadata":{},"customProperties":{"source":"FlowchartJsonConverter.cs:47","notFoundConnections":[],"canStartWorkflow":false,"runAsynchronously":false},"activities":[{"outputName":{"typeName":"String","expression":{"type":"Literal","value":"Output1"},"memoryReference":{"id":"a6389a28e986c6ff:input-0"}},"outputValue":{"typeName":"Object","expression":{"type":"Literal","value":"Foo"},"memoryReference":{"id":"a6389a28e986c6ff:input-1"}},"id":"a6389a28e986c6ff","nodeId":"Workflow1:d84ccfca1b90bc0c:a6389a28e986c6ff","name":"SetOutput1","type":"Elsa.SetOutput","version":1,"customProperties":{"canStartWorkflow":false,"runAsynchronously":false},"metadata":{"designer":{"position":{"x":-60,"y":240},"size":{"width":107.734375,"height":50}}}}],"connections":[]}}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"id":"d5221501eeb78037","definitionId":"8c751e0c53821439","name":"B","createdAt":"2023-11-15T13:59:18.773434+00:00","version":1,"toolVersion":"3.0.0.0","variables":[],"inputs":[],"outputs":[{"type":"Object","name":"Output1","displayName":"Output 1","category":"Primitives","isArray":false}],"outcomes":[],"customProperties":{"Elsa:WorkflowContextProviderTypes":[]},"isReadonly":false,"isLatest":true,"isPublished":true,"options":{"usableAsActivity":true,"autoUpdateConsumingWorkflows":true},"root":{"type":"Elsa.Flowchart","version":1,"id":"49a24a01a4c318de","nodeId":"Workflow1:49a24a01a4c318de","metadata":{},"customProperties":{"source":"FlowchartJsonConverter.cs:47","notFoundConnections":[],"canStartWorkflow":false,"runAsynchronously":false},"activities":[{"script":{"typeName":"String","expression":{"type":"Literal","value":"return \u0022Bar\u0022;"},"memoryReference":{"id":"247da1e267d76f80:input-0"}},"possibleOutcomes":null,"result":{"typeName":"Object","memoryReference":{"id":"Output1"}},"id":"247da1e267d76f80","nodeId":"Workflow1:49a24a01a4c318de:247da1e267d76f80","name":"RunCSharp1","type":"Elsa.RunCSharp","version":1,"customProperties":{"canStartWorkflow":false,"runAsynchronously":false},"metadata":{"designer":{"position":{"x":-200,"y":-140},"size":{"width":83.640625,"height":50}}}}],"connections":[]}}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"id":"c4041d72854d317c","definitionId":"8472bcf9ca261e55","name":"C","createdAt":"2023-11-15T14:05:30.708042+00:00","version":6,"toolVersion":"3.0.0.0","variables":[],"inputs":[],"outputs":[{"type":"Object","name":"Output1","displayName":"Output 1","category":"Primitives","isArray":false},{"type":"Object","name":"Output2","displayName":"Output 2","category":"Primitives","isArray":false}],"outcomes":[],"customProperties":{"Elsa:WorkflowContextProviderTypes":[]},"isReadonly":false,"isLatest":true,"isPublished":true,"options":{"usableAsActivity":true,"autoUpdateConsumingWorkflows":true},"root":{"type":"Elsa.Flowchart","version":1,"id":"6ee60c9988b58904","nodeId":"Workflow1:6ee60c9988b58904","metadata":{},"customProperties":{"source":"FlowchartJsonConverter.cs:47","notFoundConnections":[],"canStartWorkflow":false,"runAsynchronously":false},"activities":[{"workflowDefinitionId":"7fe314161d2d2ac6","workflowDefinitionVersionId":"5d8015cea7b44c96","latestAvailablePublishedVersion":1,"latestAvailablePublishedVersionId":"5d8015cea7b44c96","id":"67daca2a2fc729b6","nodeId":"Workflow1:6ee60c9988b58904:67daca2a2fc729b6","name":"A1","type":"A","version":1,"customProperties":{"canStartWorkflow":false,"runAsynchronously":false},"metadata":{"designer":{"position":{"x":-311.5,"y":-145},"size":{"width":41.59375,"height":50}}},"output1":{"typeName":"Object","memoryReference":{"id":"Output1"}}},{"workflowDefinitionId":"8c751e0c53821439","workflowDefinitionVersionId":"d5221501eeb78037","latestAvailablePublishedVersion":1,"latestAvailablePublishedVersionId":"d5221501eeb78037","id":"d152d5815dcdea0d","nodeId":"Workflow1:6ee60c9988b58904:d152d5815dcdea0d","name":"B1","type":"B","version":1,"customProperties":{"canStartWorkflow":false,"runAsynchronously":false},"metadata":{"designer":{"position":{"x":-194.5,"y":-145},"size":{"width":41.125,"height":50}}},"output1":{"typeName":"Object","memoryReference":{"id":"Output2"}}}],"connections":[{"source":{"activity":"67daca2a2fc729b6","port":"Done"},"target":{"activity":"d152d5815dcdea0d","port":"In"}}]}}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"id":"cbf12a4a3d1a52ef","definitionId":"133353946cd83e1d","name":"D","createdAt":"2023-11-15T14:07:04.052579+00:00","version":1,"toolVersion":"3.0.0.0","variables":[{"id":"f1106ece80fd17a8","name":"Variable1","typeName":"Object","isArray":false,"storageDriverTypeName":"Elsa.Workflows.Core.Services.WorkflowStorageDriver, Elsa.Workflows.Core"},{"id":"3a8b25edc9bf109","name":"Variable2","typeName":"Object","isArray":false,"storageDriverTypeName":"Elsa.Workflows.Core.Services.WorkflowStorageDriver, Elsa.Workflows.Core"}],"inputs":[],"outputs":[],"outcomes":[],"customProperties":{"Elsa:WorkflowContextProviderTypes":[]},"isReadonly":false,"isLatest":true,"isPublished":true,"options":{"autoUpdateConsumingWorkflows":false},"root":{"type":"Elsa.Flowchart","version":1,"id":"26838161a6f32e2e","nodeId":"Workflow1:26838161a6f32e2e","metadata":{},"customProperties":{"source":"FlowchartJsonConverter.cs:47","notFoundConnections":[],"canStartWorkflow":false,"runAsynchronously":false},"activities":[{"workflowDefinitionId":"8472bcf9ca261e55","workflowDefinitionVersionId":"c4041d72854d317c","latestAvailablePublishedVersion":6,"latestAvailablePublishedVersionId":"c4041d72854d317c","id":"db7bda6a28d8de82","nodeId":"Workflow1:26838161a6f32e2e:db7bda6a28d8de82","name":"C1","type":"C","version":6,"customProperties":{"canStartWorkflow":false,"runAsynchronously":false},"metadata":{"designer":{"position":{"x":-298.5,"y":-168},"size":{"width":41.578125,"height":50}}},"output1":{"typeName":"Object","memoryReference":{"id":"f1106ece80fd17a8"}},"output2":{"typeName":"Object","memoryReference":{"id":"3a8b25edc9bf109"}}},{"text":{"typeName":"String","expression":{"type":"CSharp","value":"return $\u0022{Variable.Variable1}{Variable.Variable2}\u0022;"},"memoryReference":{"id":"a815c4cf1e668419:input-0"}},"id":"a815c4cf1e668419","nodeId":"Workflow1:26838161a6f32e2e:a815c4cf1e668419","name":"WriteLine1","type":"Elsa.WriteLine","version":1,"customProperties":{"canStartWorkflow":false,"runAsynchronously":false},"metadata":{"designer":{"position":{"x":-139.5,"y":-168},"size":{"width":139.296875,"height":50}}}}],"connections":[{"source":{"activity":"db7bda6a28d8de82","port":"Done"},"target":{"activity":"a815c4cf1e668419","port":"In"}}]}}

0 comments on commit 3a4b15b

Please sign in to comment.