diff --git a/src/modules/Elsa.Workflows.Management/Activities/WorkflowDefinitionActivity/WorkflowDefinitionActivity.cs b/src/modules/Elsa.Workflows.Management/Activities/WorkflowDefinitionActivity/WorkflowDefinitionActivity.cs
index 407da6f25..3d8402881 100644
--- a/src/modules/Elsa.Workflows.Management/Activities/WorkflowDefinitionActivity/WorkflowDefinitionActivity.cs
+++ b/src/modules/Elsa.Workflows.Management/Activities/WorkflowDefinitionActivity/WorkflowDefinitionActivity.cs
@@ -30,11 +30,11 @@ public class WorkflowDefinitionActivity : Composite, IInitializable
///
protected override async ValueTask ExecuteAsync(ActivityExecutionContext context)
{
- CopyInputToVariables(context);
+ CopyInputOutputToVariables(context);
await context.ScheduleActivityAsync(Root, OnChildCompletedAsync);
}
- private void CopyInputToVariables(ActivityExecutionContext context)
+ private void CopyInputOutputToVariables(ActivityExecutionContext context)
{
foreach (var inputDescriptor in context.ActivityDescriptor.Inputs)
{
@@ -52,13 +52,26 @@ public class WorkflowDefinitionActivity : Composite, IInitializable
context.ExpressionExecutionContext.Memory.Declare(variable);
variable.Set(context, evaluatedExpression);
}
+
+ foreach (var outputDescriptor in context.ActivityDescriptor.Outputs)
+ {
+ // Create a local scope variable for each output property.
+ var variable = new Variable
+ {
+ Id = outputDescriptor.Name,
+ Name = outputDescriptor.Name
+ };
+
+ context.ExpressionExecutionContext.Memory.Declare(variable);
+ }
}
- private void DefineInputAsVariables(InitializationContext context)
+ private void DeclareInputOutputAsVariables(InitializationContext context)
{
var activityRegistry = context.ServiceProvider.GetRequiredService();
var activityDescriptor = activityRegistry.Find(Type, Version)!;
-
+
+ // Declare input variables.
foreach (var inputDescriptor in activityDescriptor.Inputs)
{
// Create a local scope variable for each input property.
@@ -70,6 +83,18 @@ public class WorkflowDefinitionActivity : Composite, IInitializable
Variables.Declare(variable);
}
+
+ // Declare output variables.
+ foreach (var outputDescriptor in activityDescriptor.Outputs)
+ {
+ // Create a local scope variable for each output property.
+ var variable = new Variable(outputDescriptor.Name)
+ {
+ Name = outputDescriptor.Name
+ };
+
+ Variables.Declare(variable);
+ }
}
private async ValueTask OnChildCompletedAsync(ActivityExecutionContext context, ActivityExecutionContext childContext)
@@ -115,7 +140,7 @@ public class WorkflowDefinitionActivity : Composite, IInitializable
var materializer = serviceProvider.GetRequiredService();
var root = await materializer.MaterializeAsync(workflowDefinition, cancellationToken);
- DefineInputAsVariables(context);
+ DeclareInputOutputAsVariables(context);
Root = root;
}