elsa-workflows / elsa-workflows/elsa-core

`GetNamedActivityPropertyAsync()` throws NRE when called on `CompositeActivity`

Open
#2,702 2 comments 2 reactions 0 assignees View on GitHub
bug triaged
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.