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 IEnumerable<LocalizedString> Execute(WorkflowContext workflowContext, ActivityContext activityContext) { // wait for all incoming branches to trigger the Execute before returning the result var branchesState = workflowContext.GetStateFor<string>(activityContext.Record, "Branches"); if (String.IsNullOrWhiteSpace(branchesState)) { yield break; } var branches = GetBranches(branchesState); var inboundActivities = workflowContext.GetInboundTransitions(activityContext.Record); var done = inboundActivities .All(x => branches.Contains(GetTransitionKey(x))); if(done) { yield return T("Done"); } }
public override IEnumerable <LocalizedString> Execute(WorkflowContext workflowContext, ActivityContext activityContext) { // wait for all incoming branches to trigger the Execute before returning the result var branchesState = workflowContext.GetStateFor <string>(activityContext.Record, "Branches"); if (String.IsNullOrWhiteSpace(branchesState)) { yield break; } var branches = GetBranches(branchesState); var inboundActivities = workflowContext.GetInboundTransitions(activityContext.Record); var done = inboundActivities .All(x => branches.Contains(GetTransitionKey(x))); if (done) { yield return(T("Done")); } }