// 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())); }
// 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)); }
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 }); } } }