コード例 #1
0
        private static IEnumerable <string> GetInboundActivityPathInternal(this ICompositeActivityBlueprint workflowBlueprintBlueprintInstance, string activityId, HashSet <string> inspectedActivityIds)
        {
            foreach (var connection in workflowBlueprintBlueprintInstance.GetInboundConnections(activityId))
            {
                // Circuit breaker: Detect workflows that implement repeating flows to prevent an infinite loop here.
                if (inspectedActivityIds.Contains(connection.Source.Activity.Id))
                {
                    yield break;
                }

                yield return(connection.Source.Activity.Id);

                foreach (var parentActivityId in workflowBlueprintBlueprintInstance.GetInboundActivityPathInternal(connection.Source.Activity.Id, inspectedActivityIds).Distinct())
                {
                    inspectedActivityIds.Add(parentActivityId);
                    yield return(parentActivityId);
                }
            }
        }
コード例 #2
0
        /// <summary>
        /// Returns the full path of incoming activities.
        /// </summary>
        public static IEnumerable <string> GetInboundActivityPath(this ICompositeActivityBlueprint workflowBlueprint, string activityId)
        {
            var inspectedActivityIds = new HashSet <string>();

            return(workflowBlueprint.GetInboundActivityPathInternal(activityId, inspectedActivityIds).Distinct().ToList());
        }