private bool HasCurrentActivityBeforeActivity(WorkflowActivityInput input, WorkflowDefinition definition, IWorkflowActivityBase activity, List<WorkflowTransition> checkedTransitions) { var inboundTransitions = definition.GetInboundTransitions(activity); if (inboundTransitions.Any(t => input.Instance.CurrentActivityIds.Contains(t.From))) return true; checkedTransitions.AddRange(inboundTransitions); foreach (var transition in inboundTransitions) { if (HasCurrentActivityBeforeActivity(input, definition, definition.GetActivityById(transition.From), checkedTransitions)) return true; } return false; }
private bool HasCurrentActivityBeforeActivity(WorkflowActivityInput input, WorkflowDefinition definition, IWorkflowActivityBase activity, List <WorkflowTransition> checkedTransitions) { var inboundTransitions = definition.GetInboundTransitions(activity); if (inboundTransitions.Any(t => input.Instance.CurrentActivityIds.Contains(t.From))) { return(true); } checkedTransitions.AddRange(inboundTransitions); foreach (var transition in inboundTransitions) { if (HasCurrentActivityBeforeActivity(input, definition, definition.GetActivityById(transition.From), checkedTransitions)) { return(true); } } return(false); }
/// <summary>Called when the previous activity has been executed. /// The method may be called multiple times when there are multiple incoming transitions. </summary> /// <param name="input">The input. </param> /// <param name="definition">The workflow definition. </param> /// <returns>True when the activity should be automatically and immediately executed (with no args). </returns> internal override Task <bool> PrepareAsync(WorkflowActivityInput input, WorkflowDefinition definition) { var immediatelyExecute = !HasCurrentActivityBeforeActivity(input, definition, this, new List <WorkflowTransition>()); return(Task.FromResult(immediatelyExecute)); }
/// <summary>Called when the previous activity has been executed. /// The method may be called multiple times when there are multiple incoming transitions. </summary> /// <param name="input">The input. </param> /// <returns>True when the activity should be automatically and immediately executed (with no args). </returns> public override Task<bool> PrepareAsync(WorkflowActivityInput input) { return Task.FromResult(true); }
/// <summary>Called when the previous activity has been executed. /// The method may be called multiple times when there are multiple incoming transitions. </summary> /// <param name="input">The input. </param> /// <returns>True when the activity should be automatically and immediately executed (with no args). </returns> public override Task <bool> PrepareAsync(WorkflowActivityInput input) { return(Task.FromResult(true)); }
/// <summary>Called when the previous activity has been executed. /// The method may be called multiple times when there are multiple incoming transitions. </summary> /// <param name="input">The input. </param> /// <param name="definition">The workflow definition. </param> /// <returns>True when the activity should be automatically and immediately executed (with no args). </returns> internal override Task<bool> PrepareAsync(WorkflowActivityInput input, WorkflowDefinition definition) { var immediatelyExecute = !HasCurrentActivityBeforeActivity(input, definition, this, new List<WorkflowTransition>()); return Task.FromResult(immediatelyExecute); }