public override void OnActivityExecuted(WorkflowContext workflowContext, ActivityContext activityContext) { // for blocking activities only if (!activityContext.Activity.IsEvent) { return; } // activity records pointing to the executed activity var inboundActivities = workflowContext.GetInboundTransitions(activityContext.Record); // if a direct target of a Branch Activity is executed, then suppress all other direct waiting activities var parentBranchActivities = inboundActivities .Where(x => x.SourceActivityRecord.Name == this.Name) .Select(x => x.SourceActivityRecord) .ToList(); if (parentBranchActivities.Any()) { foreach (var parentBranch in parentBranchActivities) { // remove all other waiting activities after the parent branch var siblings = workflowContext.GetOutboundTransitions(parentBranch).Select(x => x.DestinationActivityRecord).ToList(); var awaitings = workflowContext.Record.AwaitingActivities.Where(x => siblings.Contains(x.ActivityRecord)).ToList(); foreach (var awaiting in awaitings) { workflowContext.Record.AwaitingActivities.Remove(awaiting); } } } }
public override void OnActivityExecuted(WorkflowContext workflowContext, ActivityContext activityContext) { // for blocking activities only if (!activityContext.Activity.IsEvent) { return; } // activity records pointing to the executed activity var inboundActivities = workflowContext.GetInboundTransitions(activityContext.Record); // if a direct target of a Branch Activity is executed, then suppress all other direct waiting activities var parentBranchActivities = inboundActivities .Where(x => x.SourceActivityRecord.Name == this.Name) .Select(x => x.SourceActivityRecord) .ToList(); if (parentBranchActivities.Any()) { foreach (var parentBranch in parentBranchActivities) { // remove all other waiting activities after the parent branch var siblings = workflowContext.GetOutboundTransitions(parentBranch).Select(x => x.DestinationActivityRecord).ToList(); var awaitings = workflowContext.Record.AwaitingActivities.Where(x => siblings.Contains(x.ActivityRecord)); foreach (var awaiting in awaitings) { workflowContext.Record.AwaitingActivities.Remove(awaiting); } } } }
public override void OnActivityExecuted(WorkflowContext workflowContext, ActivityContext activityContext) { // activity records pointed by the executed activity var outboundActivities = workflowContext.GetOutboundTransitions(activityContext.Record); // if a direct target of a Branch Activity is executed, then suppress all other direct waiting activities var childBranches = outboundActivities .Where(x => x.DestinationActivityRecord.Name == this.Name) .ToList(); foreach (var childBranch in childBranches) { var branchesState = workflowContext.GetStateFor<string>(childBranch.DestinationActivityRecord, "Branches"); var branches = GetBranches(branchesState); branches = branches.Union(new[] { GetTransitionKey(childBranch)}).Distinct(); workflowContext.SetStateFor(childBranch.DestinationActivityRecord, "Branches", String.Join(",", branches.ToArray())); } }
public override void OnActivityExecuted(WorkflowContext workflowContext, ActivityContext activityContext) { // activity records pointed by the executed activity var outboundActivities = workflowContext.GetOutboundTransitions(activityContext.Record); // if a direct target of a Branch Activity is executed, then suppress all other direct waiting activities var childBranches = outboundActivities .Where(x => x.DestinationActivityRecord.Name == this.Name) .ToList(); foreach (var childBranch in childBranches) { var branchesState = workflowContext.GetStateFor <string>(childBranch.DestinationActivityRecord, "Branches"); var branches = GetBranches(branchesState); branches = branches.Union(new[] { GetTransitionKey(childBranch) }).Distinct(); workflowContext.SetStateFor(childBranch.DestinationActivityRecord, "Branches", String.Join(",", branches.ToArray())); } }