Update Finish activity to only clear blocking activities of current container unless it's the root workflow, in which case ALL blocking activities are removed
This commit is contained in:
parent
c645e77e14
commit
717ced918f
|
|
@ -1,3 +1,4 @@
|
|||
using System.Linq;
|
||||
using Elsa.ActivityResults;
|
||||
using Elsa.Attributes;
|
||||
using Elsa.Services;
|
||||
|
|
@ -8,7 +9,7 @@ namespace Elsa.Activities.ControlFlow
|
|||
{
|
||||
[Activity(
|
||||
Category = "Workflows",
|
||||
Description = "Removes any blocking activities and sets the status of the workflow to Completed."
|
||||
Description = "Removes any blocking activities from the current container (workflow or composite activity)."
|
||||
)]
|
||||
public class Finish : Activity
|
||||
{
|
||||
|
|
@ -17,8 +18,13 @@ namespace Elsa.Activities.ControlFlow
|
|||
|
||||
protected override IActivityExecutionResult OnExecute(ActivityExecutionContext context)
|
||||
{
|
||||
context.WorkflowExecutionContext.WorkflowInstance.BlockingActivities.Clear();
|
||||
var parentBlueprint = context.ActivityBlueprint.Parent;
|
||||
var blockingActivities = context.WorkflowExecutionContext.WorkflowInstance.BlockingActivities;
|
||||
var blockingActivityIds = blockingActivities.Select(x => x.ActivityId).ToList();
|
||||
var containedBlockingActivityIds = parentBlueprint == null ? blockingActivityIds : parentBlueprint.Activities.Where(x => blockingActivityIds.Contains(x.Id)).Select(x => x.Id).ToList();
|
||||
|
||||
blockingActivities.RemoveWhere(x => containedBlockingActivityIds.Contains(x.ActivityId));
|
||||
|
||||
return Done(OutputValue);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,7 +34,9 @@ namespace Elsa.Samples.Timers.Activities
|
|||
.WriteLine("Timer C went off")
|
||||
.Then("Join1");
|
||||
})
|
||||
.Add<Join>(join => join.WithMode(Join.JoinMode.WaitAny)).WithName("Join1").WriteLine("Container 1 Joined!");
|
||||
.Add<Join>(join => join.WithMode(Join.JoinMode.WaitAny)).WithName("Join1")
|
||||
.WriteLine("Container 1 Joined!")
|
||||
.Finish();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -20,22 +20,23 @@ namespace Elsa.Samples.Timers.Activities
|
|||
fork.When("C")
|
||||
.Then<MyContainer1>()
|
||||
.Then("Join2");
|
||||
|
||||
|
||||
fork
|
||||
.When("D")
|
||||
.While(true, @while => @while
|
||||
.Timer(Duration.FromSeconds(1))
|
||||
.WriteLine("Timer D went off"))
|
||||
.Then("Join2");
|
||||
|
||||
|
||||
fork
|
||||
.When("E")
|
||||
.Timer(Duration.FromSeconds(15))
|
||||
.WriteLine("Timer E went off. Exiting fork.")
|
||||
.Then("Join2");
|
||||
})
|
||||
.Add<Join>(join => join.WithMode(Join.JoinMode.WaitAny)).WithName("Join2").WriteLine("Container 2 Joined!")
|
||||
;
|
||||
.Add<Join>(join => join.WithMode(Join.JoinMode.WaitAny)).WithName("Join2")
|
||||
.WriteLine("Container 2 Joined!")
|
||||
.Finish();
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue