elsa-workflows / elsa-workflows/elsa-core
`GetNamedActivityPropertyAsync()` throws NRE when called on `CompositeActivity`
- Dominant language
- C#
- Stars
- 7.9k
- Forks
- 1.5k
- Avg merge
- 15h 22m
- Merged PRs (30d)
- 114
Description
Hi!
When using `CompositeActivity` it seems it's not possible to access activity output by calling `GetNamedActivityPropertyAsync()`. If you move `A1` and `A2` to the parent workflow, it works as expected. Am I missing something?
Reproduced in 2.4.1 and 2.5.0-preview.4.
``` csharp
public class TestWorkflow : IWorkflow
{
public void Build(IWorkflowBuilder builder)
{
builder
// any trigger
.Then();
}
}
public class A0 : CompositeActivity
{
public override void Build(ICompositeActivityBuilder builder)
{
builder
.Then().WithName(nameof(A1))
.Then(s => s.Set(v => v.Input,
async p => await p.GetNamedActivityPropertyAsync(nameof(A1),
a => a.Result)));
}
}
public class A1 : Activity
{
[ActivityOutput]
public string Result { get; set; }
protected override IActivityExecutionResult OnExecute()
{
Result = "test";
return base.OnExecute();
}
}
public class A2 : Activity
{
[ActivityInput]
public string Input
{
get => GetState();
set => SetState(value);
}
protected override IActivityExecutionResult OnExecute()
{
// do smth
return base.OnExecute();
}
}
```
Logs:
``` log
warn: Elsa.Services.Workflows.WorkflowRunner[0]
Failed to run workflow 4baf2f5b63604b52864afad3daafaeb1
Elsa.Exceptions.CannotSetActivityPropertyValueException: An exception was thrown whilst setting 'A2.Input'. See the inner exception for further details.
---> System.NullReferenceException: Object reference not set to an instance of an object.
at Elsa.Services.Models.WorkflowExecutionContext.GetActivityPropertyAsync(IActivityBlueprint activityBlueprint, String propertyName, CancellationToken cancellationToken)
at Elsa.Services.Models.WorkflowExecutionContext.GetNamedActivityPropertyAsync(String activityName, String propertyName, CancellationToken cancellationToken)
at Elsa.Services.Models.WorkflowExecutionContext.GetNamedActivityPropertyAsync[T](String activityName, String propertyName, CancellationToken cancellationToken)
at Elsa.Services.Models.WorkflowExecutionContext.GetNamedActivityPropertyAsync[TActivity,T](String activityName, Expression`1 propertyExpression, CancellationToken cancellationToken)
at Elsa.Services.Models.ActivityExecutionContext.GetNamedActivityPropertyAsync[TActivity,T](String activityName, Expression`1 propertyExpression, CancellationToken cancellationToken)
at ElsaWf.A0.<>c.<b__0_2>d.MoveNext() in TestWorkflow.cs:line 28
--- End of stack trace from previous location ---
at Elsa.Builders.SetupActivity`1.<>c__DisplayClass6_0`1.<b__0>d.MoveNext()
--- End of stack trace from previous location ---
at Elsa.Services.Workflows.DelegateActivityPropertyValueProvider.GetValueAsync(ActivityExecutionContext context, CancellationToken cancellationToken)
at Elsa.Services.ActivityPropertyProviders.SetActivityPropertiesAsync(IActivity activity, ActivityExecutionContext activityExecutionContext, CancellationToken cancellationToken)
--- End of inner exception stack trace ---
at Elsa.Services.ActivityPropertyProviders.SetActivityPropertiesAsync(IActivity activity, ActivityExecutionContext activityExecutionContext, CancellationToken cancellationToken)
at Elsa.Services.Workflows.ActivityActivator.ActivateActivityAsync(ActivityExecutionContext context, Type type, CancellationToken cancellationToken)
at Elsa.Providers.ActivityTypes.TypeBasedActivityProvider.<>c__DisplayClass6_0.<b__0>d.MoveNext()
--- End of stack trace from previous location ---
at Elsa.Services.Workflows.WorkflowRunner.RunCoreAsync(WorkflowExecutionContext workflowExecutionContext, ActivityOperation activityOperation, CancellationToken cancellationToken)
at Elsa.Services.Workflows.WorkflowRunner.RunCoreAsync(WorkflowExecutionContext workflowExecutionContext, ActivityOperation activityOperation, CancellationToken cancellationToken)
at Elsa.Services.Workflows.WorkflowRunner.RunAsync(WorkflowExecutionContext workflowExecutionContext, ActivityOperation activityOperation, CancellationToken cancellationToken)
```
Contributor guide
Assessment
This issue has not been assessed yet.