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);
                    }
                }
            }
        }
コード例 #2
0
        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);
                    }
                }
            }
        }
コード例 #3
0
        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()));
            }
        }
コード例 #4
0
        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()));
            }
        }