示例#1
0
        // returns all the actions associated with a specific state
        private static IEnumerable <string> ListAction(AwaitingActivityRecord x)
        {
            var    state       = FormParametersHelper.FromJsonString(x.ActivityRecord.State);
            string actionState = state.Actions ?? "";

            return(actionState.Split(',').Select(action => action.Trim()));
        }
示例#2
0
        // whether a user is in an accepted role for this state
        private static bool UserIsInRole(AwaitingActivityRecord x, IUser user)
        {
            var    state      = FormParametersHelper.FromJsonString(x.ActivityRecord.State);
            string rolesState = state.Roles ?? "";

            // "Any" if string is empty
            if (string.IsNullOrWhiteSpace(rolesState))
            {
                return(true);
            }
            var roles = rolesState.Split(',').Select(role => role.Trim());

            return(UserTaskActivity.UserIsInRole(user, roles));
        }
示例#3
0
        private void ResumeWorkflow(AwaitingActivityRecord awaitingActivityRecord, WorkflowContext workflowContext, IDictionary <string, object> tokens)
        {
            // signal every activity that the workflow is about to be resumed
            var cancellationToken = new CancellationToken();

            InvokeActivities(activity => activity.OnWorkflowResuming(workflowContext, cancellationToken));

            if (cancellationToken.IsCancelled)
            {
                // workflow is aborted
                return;
            }

            // signal every activity that the workflow is resumed
            InvokeActivities(activity => activity.OnWorkflowResumed(workflowContext));

            var workflow = awaitingActivityRecord.WorkflowRecord;

            workflowContext.Record = workflow;

            workflow.AwaitingActivities.Remove(awaitingActivityRecord);

            var blockedOn = ExecuteWorkflow(workflowContext, awaitingActivityRecord.ActivityRecord, tokens).ToList();

            // is the workflow halted on a blocking activity, and there is no more awaiting activities
            if (!blockedOn.Any() && !workflow.AwaitingActivities.Any())
            {
                // no, delete the workflow
                _workflowRepository.Delete(awaitingActivityRecord.WorkflowRecord);
            }
            else
            {
                // add the new ones
                foreach (var blocking in blockedOn)
                {
                    workflow.AwaitingActivities.Add(new AwaitingActivityRecord {
                        ActivityRecord = blocking,
                        WorkflowRecord = workflow
                    });
                }
            }
        }