Implement scoped naming for composite activity children

Fixes #1071
This commit is contained in:
Sipke Schoorstra 2021-06-08 21:11:55 +02:00
parent eae633c102
commit a33cb1bc88
3 changed files with 17 additions and 5 deletions

View file

@ -24,7 +24,7 @@ namespace Elsa.Builders
IActivityBuilder Add<T>(string activityTypeName, Action<ISetupActivity<T>>? setup = default, [CallerLineNumber] int lineNumber = default, [CallerFilePath] string? sourceFile = default) where T : class, IActivity;
IOutcomeBuilder When(string outcome);
IActivityBuilder Then(IActivityBuilder targetActivity);
IConnectionBuilder ThenNamed(string activityName);
IActivityBuilder ThenNamed(string activityName);
IActivityBuilder WithId(string? value);
IActivityBuilder WithName(string? value);
IActivityBuilder WithDisplayName(string? value);

View file

@ -76,11 +76,15 @@ namespace Elsa.Builders
return this;
}
public virtual IConnectionBuilder ThenNamed(string activityName) =>
public virtual IActivityBuilder ThenNamed(string activityName)
{
WorkflowBuilder.Connect(
() => this,
() => WorkflowBuilder.Activities.First(x => x.Name == activityName));
return this;
}
public IActivityBuilder WithId(string? value)
{
ActivityId = value!;

View file

@ -160,6 +160,12 @@ namespace Elsa.Builders
return connectionBuilder;
}
public override IActivityBuilder ThenNamed(string activityName)
{
var compositeName = GetCompositeName(activityName)!;
return base.ThenNamed(compositeName);
}
public ICompositeActivityBlueprint Build(string activityIdPrefix = "activity")
{
var compositeActivityBlueprint = new CompositeActivityBlueprint
@ -240,14 +246,16 @@ namespace Elsa.Builders
}
}
private static IActivityBlueprint BuildActivityBlueprint(IActivityBuilder builder, ICompositeActivityBlueprint parent)
private IActivityBlueprint BuildActivityBlueprint(IActivityBuilder builder, ICompositeActivityBlueprint parent)
{
var isComposite = typeof(CompositeActivity).IsAssignableFrom(builder.ActivityType);
return isComposite
? new CompositeActivityBlueprint(builder.ActivityId, parent, builder.Name, builder.DisplayName, builder.Description, builder.ActivityTypeName, builder.PersistWorkflowEnabled, builder.LoadWorkflowContextEnabled,
? new CompositeActivityBlueprint(builder.ActivityId, parent, GetCompositeName(builder.Name), builder.DisplayName, builder.Description, builder.ActivityTypeName, builder.PersistWorkflowEnabled, builder.LoadWorkflowContextEnabled,
builder.SaveWorkflowContextEnabled, builder.PersistOutputEnabled, builder.Source)
: new ActivityBlueprint(builder.ActivityId, parent, builder.Name, builder.DisplayName, builder.Description, builder.ActivityTypeName, builder.PersistWorkflowEnabled, builder.LoadWorkflowContextEnabled,
: new ActivityBlueprint(builder.ActivityId, parent, GetCompositeName(builder.Name), builder.DisplayName, builder.Description, builder.ActivityTypeName, builder.PersistWorkflowEnabled, builder.LoadWorkflowContextEnabled,
builder.SaveWorkflowContextEnabled, builder.PersistOutputEnabled, builder.Source);
}
private string? GetCompositeName(string? activityName) => activityName == null ? null : $"{ActivityId}:{activityName}";
}
}