Fix Join activity to clear ALL blocking activities in ancestor paths
Fixes #1342
This commit is contained in:
parent
8deef4755e
commit
0222c20d7d
|
|
@ -60,10 +60,10 @@ namespace Elsa.Activities.ControlFlow
|
|||
var ancestorActivityIds = workflowExecutionContext.GetInboundActivityPath(Id).ToList();
|
||||
var activities = workflowExecutionContext.WorkflowBlueprint.Activities.ToDictionary(x => x.Id);
|
||||
var ancestors = ancestorActivityIds.Select(x => activities[x]).ToList();
|
||||
var fork = ancestors.FirstOrDefault(x => x.Type == nameof(Fork));
|
||||
var forks = ancestors.Where(x => x.Type == nameof(Fork)).ToList();
|
||||
|
||||
await RemoveBlockingActivitiesAsync(workflowExecutionContext, fork);
|
||||
await RemoveScopeActivitiesAsync(workflowExecutionContext, ancestors, fork);
|
||||
await RemoveBlockingActivitiesAsync(workflowExecutionContext, forks);
|
||||
await RemoveScopeActivitiesAsync(workflowExecutionContext, ancestors, forks);
|
||||
|
||||
// Clear the recorded inbound transitions. This is necessary in case we're in a looping construct.
|
||||
InboundTransitions = new List<string>();
|
||||
|
|
@ -83,6 +83,12 @@ namespace Elsa.Activities.ControlFlow
|
|||
};
|
||||
}
|
||||
|
||||
private async Task RemoveBlockingActivitiesAsync(WorkflowExecutionContext workflowExecutionContext, IEnumerable<IActivityBlueprint> forks)
|
||||
{
|
||||
foreach (var fork in forks)
|
||||
await RemoveBlockingActivitiesAsync(workflowExecutionContext, fork);
|
||||
}
|
||||
|
||||
private async Task RemoveBlockingActivitiesAsync(WorkflowExecutionContext workflowExecutionContext, IActivityBlueprint? fork)
|
||||
{
|
||||
var blockingActivities = workflowExecutionContext.WorkflowInstance.BlockingActivities.ToList();
|
||||
|
|
@ -105,6 +111,12 @@ namespace Elsa.Activities.ControlFlow
|
|||
}
|
||||
}
|
||||
|
||||
private async Task RemoveScopeActivitiesAsync(WorkflowExecutionContext workflowExecutionContext, ICollection<IActivityBlueprint> ancestors, IEnumerable<IActivityBlueprint> forks)
|
||||
{
|
||||
foreach (var fork in forks)
|
||||
await RemoveScopeActivitiesAsync(workflowExecutionContext, ancestors, fork);
|
||||
}
|
||||
|
||||
private async Task RemoveScopeActivitiesAsync(WorkflowExecutionContext workflowExecutionContext, ICollection<IActivityBlueprint> ancestors, IActivityBlueprint? fork)
|
||||
{
|
||||
var scopes = workflowExecutionContext.WorkflowInstance.Scopes.AsEnumerable().Reverse().ToList();
|
||||
|
|
|
|||
|
|
@ -20,6 +20,8 @@ export namespace Components {
|
|||
interface ElsaActivityEditorModal {
|
||||
"culture": string;
|
||||
}
|
||||
interface ElsaActivityPickerModal {
|
||||
}
|
||||
interface ElsaCheckListProperty {
|
||||
"propertyDescriptor": ActivityPropertyDescriptor;
|
||||
"propertyModel": ActivityDefinitionProperty;
|
||||
|
|
@ -303,6 +305,12 @@ declare global {
|
|||
prototype: HTMLElsaActivityEditorModalElement;
|
||||
new (): HTMLElsaActivityEditorModalElement;
|
||||
};
|
||||
interface HTMLElsaActivityPickerModalElement extends Components.ElsaActivityPickerModal, HTMLStencilElement {
|
||||
}
|
||||
var HTMLElsaActivityPickerModalElement: {
|
||||
prototype: HTMLElsaActivityPickerModalElement;
|
||||
new (): HTMLElsaActivityPickerModalElement;
|
||||
};
|
||||
interface HTMLElsaCheckListPropertyElement extends Components.ElsaCheckListProperty, HTMLStencilElement {
|
||||
}
|
||||
var HTMLElsaCheckListPropertyElement: {
|
||||
|
|
@ -593,6 +601,7 @@ declare global {
|
|||
};
|
||||
interface HTMLElementTagNameMap {
|
||||
"elsa-activity-editor-modal": HTMLElsaActivityEditorModalElement;
|
||||
"elsa-activity-picker-modal": HTMLElsaActivityPickerModalElement;
|
||||
"elsa-check-list-property": HTMLElsaCheckListPropertyElement;
|
||||
"elsa-checkbox-property": HTMLElsaCheckboxPropertyElement;
|
||||
"elsa-confirm-dialog": HTMLElsaConfirmDialogElement;
|
||||
|
|
@ -647,6 +656,8 @@ declare namespace LocalJSX {
|
|||
interface ElsaActivityEditorModal {
|
||||
"culture"?: string;
|
||||
}
|
||||
interface ElsaActivityPickerModal {
|
||||
}
|
||||
interface ElsaCheckListProperty {
|
||||
"propertyDescriptor"?: ActivityPropertyDescriptor;
|
||||
"propertyModel"?: ActivityDefinitionProperty;
|
||||
|
|
@ -918,6 +929,7 @@ declare namespace LocalJSX {
|
|||
}
|
||||
interface IntrinsicElements {
|
||||
"elsa-activity-editor-modal": ElsaActivityEditorModal;
|
||||
"elsa-activity-picker-modal": ElsaActivityPickerModal;
|
||||
"elsa-check-list-property": ElsaCheckListProperty;
|
||||
"elsa-checkbox-property": ElsaCheckboxProperty;
|
||||
"elsa-confirm-dialog": ElsaConfirmDialog;
|
||||
|
|
@ -973,6 +985,7 @@ declare module "@stencil/core" {
|
|||
export namespace JSX {
|
||||
interface IntrinsicElements {
|
||||
"elsa-activity-editor-modal": LocalJSX.ElsaActivityEditorModal & JSXBase.HTMLAttributes<HTMLElsaActivityEditorModalElement>;
|
||||
"elsa-activity-picker-modal": LocalJSX.ElsaActivityPickerModal & JSXBase.HTMLAttributes<HTMLElsaActivityPickerModalElement>;
|
||||
"elsa-check-list-property": LocalJSX.ElsaCheckListProperty & JSXBase.HTMLAttributes<HTMLElsaCheckListPropertyElement>;
|
||||
"elsa-checkbox-property": LocalJSX.ElsaCheckboxProperty & JSXBase.HTMLAttributes<HTMLElsaCheckboxPropertyElement>;
|
||||
"elsa-confirm-dialog": LocalJSX.ElsaConfirmDialog & JSXBase.HTMLAttributes<HTMLElsaConfirmDialogElement>;
|
||||
|
|
|
|||
Loading…
Reference in a new issue