private bool IsExpired(WorkflowContext workflowContext, ActivityContext activityContext) { DateTime started; if (!workflowContext.HasStateFor(activityContext.Record, "StartedUtc")) { workflowContext.SetStateFor(activityContext.Record, "StartedUtc", started = _clock.UtcNow); } else { started = workflowContext.GetStateFor<DateTime>(activityContext.Record, "StartedUtc"); } var amount = activityContext.GetState<int>("Amount"); var type = activityContext.GetState<string>("Unity"); return _clock.UtcNow > When(started, amount, type); }
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 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 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())); } }
private bool IsExpired(WorkflowContext workflowContext, ActivityContext activityContext) { DateTime started; if (!workflowContext.HasStateFor(activityContext.Record, "StartedUtc")) { workflowContext.SetStateFor(activityContext.Record, "StartedUtc", started = _clock.UtcNow); } else { started = workflowContext.GetStateFor <DateTime>(activityContext.Record, "StartedUtc"); } var amount = activityContext.GetState <int>("Amount"); var type = activityContext.GetState <string>("Type"); return(_clock.UtcNow > When(started, amount, type)); }
private bool IsExpired(WorkflowContext workflowContext, ActivityContext activityContext) { DateTime started; if (!workflowContext.HasStateFor(activityContext.Record, "StartedUtc")) { var dateString = activityContext.GetState<string>("Date"); var date = _dateServices.ConvertFromLocalizedString(dateString); started = date ?? _clock.UtcNow; workflowContext.SetStateFor(activityContext.Record, "StartedUtc", started); } else { started = workflowContext.GetStateFor<DateTime>(activityContext.Record, "StartedUtc"); } var amount = activityContext.GetState<int>("Amount"); var type = activityContext.GetState<string>("Unity"); return _clock.UtcNow > When(started, amount, type); }
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")); } }
private bool IsExpired(WorkflowContext workflowContext, ActivityContext activityContext) { DateTime started; if (!workflowContext.HasStateFor(activityContext.Record, "StartedUtc")) { var dateString = activityContext.GetState <string>("Date"); var date = _dateServices.ConvertFromLocalizedString(dateString); started = date ?? _clock.UtcNow; workflowContext.SetStateFor(activityContext.Record, "StartedUtc", started); } else { started = workflowContext.GetStateFor <DateTime>(activityContext.Record, "StartedUtc"); } var amount = activityContext.GetState <int>("Amount"); var type = activityContext.GetState <string>("Unity"); return(_clock.UtcNow > When(started, amount, type)); }
private int PopNextWatcherId(WorkflowContext workflowContext, ActivityContext activityContext) { TrySetupWatcherIdsState(workflowContext, activityContext); var watcherIdsSerialized = workflowContext.GetStateFor <string>(activityContext.Record, _stateKey); var split = watcherIdsSerialized.Split(new[] { ',' }, 2, StringSplitOptions.RemoveEmptyEntries); if (split.Length == 0) { return(0); // No more IDs } if (split.Length == 1) { workflowContext.SetStateFor(activityContext.Record, _stateKey, string.Empty); } else { workflowContext.SetStateFor(activityContext.Record, _stateKey, split[1]); } return(int.Parse(split[0])); }
private int PopNextWatcherId(WorkflowContext workflowContext, ActivityContext activityContext) { TrySetupWatcherIdsState(workflowContext, activityContext); var watcherIdsSerialized = workflowContext.GetStateFor<string>(activityContext.Record, _stateKey); var split = watcherIdsSerialized.Split(new[] { ',' }, 2, StringSplitOptions.RemoveEmptyEntries); if (split.Length == 0) return 0; // No more IDs if (split.Length == 1) { workflowContext.SetStateFor(activityContext.Record, _stateKey, string.Empty); } else { workflowContext.SetStateFor(activityContext.Record, _stateKey, split[1]); } return int.Parse(split[0]); }