Make descriptor building resilient
This commit is contained in:
parent
17eea86c70
commit
43cfe431f1
|
|
@ -25,11 +25,20 @@ namespace Elsa.Services.Models
|
|||
{
|
||||
}
|
||||
|
||||
public async ValueTask<T> GetPropertyValueAsync<T>(Expression<Func<TActivity, T>> propertyExpression, CancellationToken cancellationToken = default)
|
||||
public async ValueTask<T?> GetPropertyValueAsync<T>(Expression<Func<TActivity, T>> propertyExpression, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var workflowBlueprint = ActivityExecutionContext.WorkflowExecutionContext.WorkflowBlueprint;
|
||||
var activityId = ActivityExecutionContext.ActivityBlueprint.Id;
|
||||
return await workflowBlueprint.GetActivityPropertyValue(activityId, propertyExpression, ActivityExecutionContext, cancellationToken);
|
||||
|
||||
// Computed property setters that depend on actual workflow state might fault, since we are using a fake activity execution context.
|
||||
try
|
||||
{
|
||||
return await workflowBlueprint.GetActivityPropertyValue(activityId, propertyExpression, ActivityExecutionContext, cancellationToken);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
return default;
|
||||
}
|
||||
}
|
||||
|
||||
public T? GetState<T>(Expression<Func<TActivity, T>> propertyExpression)
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ namespace Elsa.Services.Models
|
|||
|
||||
public interface IActivityBlueprintWrapper<TActivity> : IActivityBlueprintWrapper where TActivity:IActivity
|
||||
{
|
||||
ValueTask<T> GetPropertyValueAsync<T>(Expression<Func<TActivity, T>> propertyExpression, CancellationToken cancellationToken = default);
|
||||
ValueTask<T?> GetPropertyValueAsync<T>(Expression<Func<TActivity, T>> propertyExpression, CancellationToken cancellationToken = default);
|
||||
T? GetState<T>(Expression<Func<TActivity, T>> propertyExpression);
|
||||
}
|
||||
}
|
||||
|
|
@ -17,11 +17,14 @@ namespace Elsa.Samples.ProgrammaticCompositeActivitiesConsole.Activities
|
|||
public override void Build(ICompositeActivityBuilder composite)
|
||||
{
|
||||
composite
|
||||
.WriteLine("Turn left or right?")
|
||||
.StartWith(GetInstructions)
|
||||
.WriteLine(context => (string)context.Input)
|
||||
.ReadLine()
|
||||
.Finish(context => (string) context.Input);
|
||||
}
|
||||
|
||||
protected override IActivityExecutionResult Complete(ActivityExecutionContext context) => Outcome(((string) context.WorkflowExecutionContext.WorkflowInstance.Output)!);
|
||||
|
||||
private static void GetInstructions(ActivityExecutionContext context) => context.Output = "Turn left or right?";
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue