public void By_default_execution_exceptions_are_unhandled() { var workflowTasks = WorkflowTask.CreateFor(DecisionTasksWithSignalEvents("token"), _domain); var hostedWorkflows = new WorkflowHost(_domain, new[] { new WorkflowThrowsExceptionOnSignal(new ApplicationException("")) }); Assert.ThrowsAsync <ApplicationException>(async() => await workflowTasks.ExecuteForAsync(hostedWorkflows)); }
public void Delete(WorkflowTask request) { using (Execute) { Execute.Run(ssn => { if (!(request?.Id > 0)) { throw new HttpError(HttpStatusCode.NotFound, $"No Id provided for delete."); } var en = DocEntityWorkflowTask.GetWorkflowTask(request?.Id); if (null == en) { throw new HttpError(HttpStatusCode.NotFound, $"No WorkflowTask could be found for Id {request?.Id}."); } if (en.IsRemoved) { return; } if (!DocPermissionFactory.HasPermission(en, currentUser, DocConstantPermission.DELETE)) { throw new HttpError(HttpStatusCode.Forbidden, "You do not have DELETE permission for this route."); } en.Remove(); DocCacheClient.RemoveSearch(DocConstantModelName.WORKFLOWTASK); DocCacheClient.RemoveById(request.Id); }); } }
public WorkflowTask Post(WorkflowTask request) { if (request == null) { throw new HttpError(HttpStatusCode.NotFound, "Request cannot be null."); } request.VisibleFields = request.VisibleFields ?? new List <string>(); WorkflowTask ret = null; using (Execute) { Execute.Run(ssn => { if (!DocPermissionFactory.HasPermissionTryAdd(currentUser, "WorkflowTask")) { throw new HttpError(HttpStatusCode.Forbidden, "You do not have ADD permission for this route."); } ret = _AssignValues(request, DocConstantPermission.ADD, ssn); }); } return(ret); }
private WorkflowTask GetWorkflowTask(WorkflowTask request) { var id = request?.Id; WorkflowTask ret = null; var query = DocQuery.ActiveQuery ?? Execute; DocPermissionFactory.SetVisibleFields <WorkflowTask>(currentUser, "WorkflowTask", request.VisibleFields); DocEntityWorkflowTask entity = null; if (id.HasValue) { entity = DocEntityWorkflowTask.GetWorkflowTask(id.Value); } if (null == entity) { throw new HttpError(HttpStatusCode.NotFound, $"No WorkflowTask found for Id {id.Value}"); } if (!DocPermissionFactory.HasPermission(entity, currentUser, DocConstantPermission.VIEW)) { throw new HttpError(HttpStatusCode.Forbidden, "You do not have VIEW permission for this route."); } ret = entity?.ToDto(); return(ret); }
public void should_create_workflow() { var initialTask = new WorkflowTask("task 1"); initialTask.AssignTo(new Responsibility("*****@*****.**")); var endTask = new WorkflowTask("task 2"); endTask.AssignTo(new Responsibility("*****@*****.**")); endTask.DependsOn(initialTask); var workflow = new Workflow("workflow"); workflow.AddTask(initialTask); workflow.AddTask(endTask); ResolveSession().Save(workflow); ResolveSession().Clear(); workflow = ResolveSession().Query <Workflow>().Single(); Assert.True(workflow.Id > 0); Assert.Equal("workflow", workflow.Name); Assert.Equal(2, workflow.Tasks.Count); Assert.Equal("task 1", workflow.Tasks[0].Name); Assert.Single(workflow.Tasks[0].Responsibilities); Assert.Equal("*****@*****.**", workflow.Tasks[0].Responsibilities[0].Email); Assert.Equal("task 2", workflow.Tasks[1].Name); Assert.Single(workflow.Tasks[1].Responsibilities); Assert.Equal("*****@*****.**", workflow.Tasks[1].Responsibilities[0].Email); Assert.Single(workflow.Tasks[1].TaskDependsOns); }
public async Task On_execution_send_decisions_to_amazon_swf() { var hostedWorkflows = new WorkflowHost(_domain, new[] { new WorkflowCompleteOnSignal("result") }); var workflowTasks = WorkflowTask.CreateFor(DecisionTasksWithSignalEvents("token"), _domain); await workflowTasks.ExecuteForAsync(hostedWorkflows); AssertThatInterpretedDecisionsAreSentOverWorkflowClient("token", Times.Once()); }
public async Task Throws_exception_when_workflow_history_events_are_queried_after_execution() { var hostedWorkflow = new WorkflowCompleteOnSignal(); var hostedWorkflows = new WorkflowHost(_domain, new[] { hostedWorkflow }); var workflowTasks = WorkflowTask.CreateFor(DecisionTasksWithSignalEvents("token"), _domain); await workflowTasks.ExecuteForAsync(hostedWorkflows); Assert.Throws <InvalidOperationException>(() => hostedWorkflow.AccessHistoryEvents()); }
/// <summary> /// Converts a list of workflowTaskInstances into a list of UI-ready workflowTasks /// </summary> /// <param name="taskInstances"></param> /// <param name="sorted">Depending on the caller, the response may not be sorted</param> /// <param name="instance"></param> /// <returns></returns> public List <WorkflowTask> ConvertToWorkflowTaskList(List <WorkflowTaskInstancePoco> taskInstances, bool sorted = true, WorkflowInstancePoco instance = null) { List <WorkflowTask> workflowItems = new List <WorkflowTask>(); if (!taskInstances.Any()) { return(workflowItems); } bool useInstanceFromTask = instance == null; foreach (WorkflowTaskInstancePoco taskInstance in taskInstances) { instance = useInstanceFromTask ? taskInstance.WorkflowInstance : instance; // ignore workflows where node has been deleted if (instance.Node == null || instance.Node.Path.Contains(Constants.System.RecycleBinContentString)) { continue; } var item = new WorkflowTask { InstanceGuid = instance.Guid, TaskId = taskInstance.Id, Type = instance.TypeDescription, TypeId = instance.Type, CurrentStep = taskInstance.ApprovalStep, Status = taskInstance.Status, StatusName = taskInstance.StatusName, CssStatus = taskInstance.StatusName.ToLower().Replace(' ', '-'), InstanceStatus = instance.WorkflowStatus.ToString().ToLower(), NodeId = instance.NodeId, NodeName = instance.Node.Name, RequestedById = instance.AuthorUserId, RequestedBy = instance.AuthorUser?.Name, RequestedOn = taskInstance.CreatedDate.ToFriendlyDate(), Comment = useInstanceFromTask || string.IsNullOrEmpty(taskInstance.Comment) ? instance.AuthorComment : taskInstance.Comment, ApprovalGroupId = taskInstance.UserGroup?.GroupId, ApprovalGroup = taskInstance.UserGroup?.Name, CompletedBy = taskInstance.ActionedByUser?.Name, CompletedOn = taskInstance.CompletedDate?.ToFriendlyDate(), Permissions = _configService.GetRecursivePermissionsForNode(instance.Node) }; workflowItems.Add(item); } return(sorted ? workflowItems.OrderByDescending(x => x.CurrentStep).ToList() : workflowItems.ToList()); }
public async Task <WorkflowTask> CompleteTask(WorkflowTask workFlowTask) { var payloadAsJson = (new { Action = "complete", Variables = workFlowTask.Variables }); var serialized = JsonConvert.SerializeObject(payloadAsJson, new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() }); var stringContent = new StringContent(serialized); stringContent.Headers.ContentType = new MediaTypeHeaderValue("application/json"); var response = await _client.PostAsync($"runtime/tasks/{workFlowTask.Id}", stringContent); if (response.StatusCode == System.Net.HttpStatusCode.OK) { var responseString = response.Content.ReadAsStringAsync().Result; var workFlowTaskResponse = JsonConvert.DeserializeObject <WorkflowTask>(responseString); return(workFlowTaskResponse); } if (response.StatusCode == System.Net.HttpStatusCode.BadRequest) { throw new ExceptionWithFeedback(new FeedbackItem() { Description = $"The task could not be completed. Received a bad request from Workflow engine.", Type = FeedbackType.Error }); } if (response.StatusCode == System.Net.HttpStatusCode.InternalServerError) { throw new ExceptionWithFeedback(new FeedbackItem() { Description = $"The task could not be completed. Received an internal server error from workflow engine.", Type = FeedbackType.Error }); } if (response.StatusCode == System.Net.HttpStatusCode.NotFound) { throw new EntityNotFoundException($"The endpoint to complete the task could not be found"); } if (response.StatusCode != HttpStatusCode.OK) { throw new EntityNotFoundException($"The endpoint to complete the task could not be found, activity responsecode {response.StatusCode}"); } return(workFlowTask); }
public void Invalid_history_events_tests() { var decisionTask = new DecisionTask() { Events = new List <HistoryEvent>(), TaskToken = "token" }; Assert.Throws <ArgumentException>(() => WorkflowTask.Create(decisionTask)); decisionTask.Events = new List <HistoryEvent>(); Assert.Throws <ArgumentException>(() => WorkflowTask.Create(decisionTask)); }
public async Task Execution_exception_can_handled_to_retry() { var workflowTasks = WorkflowTask.CreateFor(DecisionTasksWithSignalEvents("token"), _domain); var hostedWorkflows = new WorkflowHost(_domain, new[] { new WorkflowThrowsExceptionOnSignal(new ApplicationException("")) }); workflowTasks.OnExecutionError(ErrorHandler.Default(e => ErrorAction.Retry)); await workflowTasks.ExecuteForAsync(hostedWorkflows); AssertThatInterpretedDecisionsAreSentOverWorkflowClient("token", Times.Once()); }
public List <TaskVariable> CompleteTask(int id, List <TaskVariable> taskVariables) { var workflowTask = new WorkflowTask(); workflowTask.Id = id; workflowTask.Variables = taskVariables.Select(x => new WorkflowTaskVariable() { Name = x.Name, Type = x.Type, Value = x.Value }).ToList(); _workflowService.CompleteTask(workflowTask); return(taskVariables); }
public WorkflowTask Post(WorkflowTaskCopy request) { WorkflowTask ret = null; using (Execute) { Execute.Run(ssn => { var entity = DocEntityWorkflowTask.GetWorkflowTask(request?.Id); if (null == entity) { throw new HttpError(HttpStatusCode.NoContent, "The COPY request did not succeed."); } if (!DocPermissionFactory.HasPermission(entity, currentUser, DocConstantPermission.ADD)) { throw new HttpError(HttpStatusCode.Forbidden, "You do not have ADD permission for this route."); } var pAssignee = entity.Assignee; var pData = entity.Data; var pDescription = entity.Description; if (!DocTools.IsNullOrEmpty(pDescription)) { pDescription += " (Copy)"; } var pDueDate = entity.DueDate; var pReporter = entity.Reporter; var pStatus = entity.Status; var pType = entity.Type; var pWorkflow = entity.Workflow; #region Custom Before copyWorkflowTask #endregion Custom Before copyWorkflowTask var copy = new DocEntityWorkflowTask(ssn) { Hash = Guid.NewGuid() , Assignee = pAssignee , Data = pData , Description = pDescription , DueDate = pDueDate , Reporter = pReporter , Status = pStatus , Type = pType , Workflow = pWorkflow }; #region Custom After copyWorkflowTask #endregion Custom After copyWorkflowTask copy.SaveChanges(DocConstantPermission.ADD); ret = copy.ToDto(); }); } return(ret); }
private static void ConfirmWorkflowTaskWithPrefilledValue(Organization organization) { Console.WriteLine("ConfirmWorkflowTasks"); string workflowId = "00000000-0000-0000-0000-000000000000"; Platform.ServerClient.Workflow workflow = organization.GetWorkflowsFromWorkflowsRelation().Workflow.FirstOrDefault(wf => wf.Id == workflowId)?.GetWorkflowFromSelfRelation(); if (workflow == null) { Console.WriteLine("Workflow is null!"); } else { WorkflowTask task = workflow.GetWorkflowTasksFromTasksRelation().Task.FirstOrDefault(); if (task == null) { Console.WriteLine("Task is null!"); } else { task = task.TaskOperations.BaseTaskOperations.GetWorkflowTaskFromSelfRelation(); Decision firstDecision = task.Decisions.FirstOrDefault(); if (firstDecision == null) { Console.WriteLine("FirstDecision is null!"); } else { //it returns all fields and prefills in the decision Decision fullLoadedDecision = firstDecision.DecisionOperations.BaseDecisionOperations.GetDecisionFromSelfRelation(); var confirmedData = new ConfirmedData() { ConfirmedFields = new List <ConfirmedField>() }; foreach (var field in fullLoadedDecision.TaskFormField.Where(f => f.Item.FormFieldType != FormTypeEnum.Description && f.Item.FormFieldType != FormTypeEnum.Link)) { confirmedData.ConfirmedFields.Add(new ConfirmedField() { Id = field.Item.Id, Value = GetPrefilledFieldValue(field) }); } string returnValue = fullLoadedDecision.DecisionOperations.ExtendedDecisionOperations.PostToConfirmRelationForString(confirmedData); } } } }
public void Can_Get_Task_By_id() { Scaffold.Config(); _service.InsertTask(Scaffold.Task()); List <WorkflowTask> tasks = _service.GetPendingTasks(new[] { 1, 2, 3 }, 10, 1); int id = tasks.First().TaskId; WorkflowTask task = _service.GetTask(id); Assert.NotNull(task); Assert.Equal(id, task.TaskId); }
public async Task Response_exception_can_be_handled_to_continue() { _amazonWorkflowClient.SetupSequence(c => c.RespondDecisionTaskCompletedAsync(It.IsAny <RespondDecisionTaskCompletedRequest>(), It.IsAny <CancellationToken>())) .Throws(new UnknownResourceException("msg")) .Returns(Task.FromResult(new RespondDecisionTaskCompletedResponse())); var hostedWorkflows = new WorkflowHost(_domain, new[] { new WorkflowCompleteOnSignal() }); hostedWorkflows.OnResponseError(e => ErrorAction.Continue); var workflowTasks = WorkflowTask.CreateFor(DecisionTasksWithSignalEvents("token"), _domain); await workflowTasks.ExecuteForAsync(hostedWorkflows); AssertThatInterpretedDecisionsAreSentOverWorkflowClient("token", Times.Once()); }
private void PopulateOfflineWorkflow() { OfflineWorkflow = new Workflow(); OfflineWorkflow.Version = "1.4"; OfflineWorkflow.FirstTask = "T0"; List <TaskAnswer> answers = new List <TaskAnswer>(); answers.Add(new TaskAnswer("![smooth_triple_flat.png](https://panoptes-uploads.zooniverse.org/staging/project_attached_image/810958cc-54bc-40f5-8871-628a5b0257ea.png) Smooth _Gradually fades from the center_")); answers.Add(new TaskAnswer("![features_or_disk.png](https://panoptes-uploads.zooniverse.org/staging/project_attached_image/4a4333a4-3e8b-42d3-9b81-8d6a2d296d16.png) Features _Irregularities; not smooth_")); answers.Add(new TaskAnswer("![star_inverted.png](https://panoptes-uploads.zooniverse.org/staging/project_attached_image/f0900323-83f1-4971-829c-6437ba6dd63a.png) Not a Galaxy _Star or artifact_")); WorkflowTask offlineTask = new WorkflowTask("Choose an Answer", answers); OfflineWorkflow.Tasks = new Dictionary <string, WorkflowTask>(); OfflineWorkflow.Tasks.Add("T0", offlineTask); }
/// <summary> /// /// </summary> /// <param name="taskInstances"></param> /// <param name="instance"></param> /// <returns></returns> public static List <WorkflowTask> ToWorkflowTaskList(this List <WorkflowTaskInstancePoco> taskInstances, WorkflowInstancePoco instance = null) { List <WorkflowTask> workflowItems = new List <WorkflowTask>(); if (!taskInstances.Any()) { return(workflowItems.OrderByDescending(x => x.CurrentStep).ToList()); } bool useInstanceFromTask = instance == null; foreach (WorkflowTaskInstancePoco taskInstance in taskInstances) { instance = useInstanceFromTask ? taskInstance.WorkflowInstance : instance; GetPermissionsForNode(instance.Node); string instanceNodeName = instance.Node?.Name ?? "NODE NO LONGER EXISTS"; string typeDescription = instance.TypeDescription; var item = new WorkflowTask { Status = taskInstance.StatusName, CssStatus = taskInstance.StatusName.ToLower().Split(' ')[0], Type = typeDescription, NodeId = instance.NodeId, InstanceGuid = instance.Guid, ApprovalGroupId = taskInstance.UserGroup.GroupId, NodeName = instanceNodeName, RequestedBy = instance.AuthorUser.Name, RequestedById = instance.AuthorUser.Id, RequestedOn = taskInstance.CreatedDate.ToString(), ApprovalGroup = taskInstance.UserGroup.Name, Comments = useInstanceFromTask ? instance.AuthorComment : taskInstance.Comment, ActiveTask = taskInstance.StatusName, Permissions = _perms, CurrentStep = taskInstance.ApprovalStep }; workflowItems.Add(item); } return(workflowItems.OrderByDescending(x => x.CurrentStep).ToList()); }
public WorkflowTask Patch(WorkflowTask request) { if (true != (request?.Id > 0)) { throw new HttpError(HttpStatusCode.NotFound, "Please specify a valid Id of the WorkflowTask to patch."); } request.VisibleFields = request.VisibleFields ?? new List <string>(); WorkflowTask ret = null; using (Execute) { Execute.Run(ssn => { ret = _AssignValues(request, DocConstantPermission.EDIT, ssn); }); } return(ret); }
public WorkflowHistoryEvents Result() { var totalEvents = _newEvents.Concat(_processedEvents).ToList(); var decisionTask = new DecisionTask() { Events = totalEvents, WorkflowExecution = new WorkflowExecution() { RunId = _workflowRunId, WorkflowId = _workflowId }, TaskToken = "dummy token" }; if (_newEvents.Count > 0) { decisionTask.PreviousStartedEventId = _newEvents.Last().EventId - 1; decisionTask.StartedEventId = _newEvents.First().EventId; } return(new WorkflowHistoryEvents(WorkflowTask.Create(decisionTask))); }
private void ConvertFromXMLForTasks(WorkflowProcess process, XElement element) { //Get list UserTask IEnumerable <XElement> userTaskList = element.Descendants(XMLNodeName.userTask.ToString()); foreach (XElement xTask in userTaskList) { // Convertor WorkflowUserTask userTask = _workflowProcessUserTasksConvertor.ConvertFromString(xTask.ToString()); process.AddTask(userTask); } //Get list ServiceTask IEnumerable <XElement> serviceTaskList = element.Descendants(XMLNodeName.serviceTask.ToString()); foreach (XElement xTask in serviceTaskList) { // Convertor WorkflowServiceTask serviceTask = _workflowProcessServiceTasksConvertor.ConvertFromString(xTask.ToString()); process.AddTask(serviceTask); } //Get list ScriptTask IEnumerable <XElement> scriptTaskList = element.Descendants(XMLNodeName.scriptTask.ToString()); foreach (XElement xTask in scriptTaskList) { // Convertor WorkflowScriptTask scriptTask = _workflowProcessScriptTasksConvertor.ConvertFromString(xTask.ToString()); process.AddTask(scriptTask); } //Get list Task IEnumerable <XElement> taskList = element.Descendants(XMLNodeName.task.ToString()); foreach (XElement xTask in taskList) { // Convertor WorkflowTask task = _workflowProcessTasksConvertor.ConvertFromString(xTask.ToString()); process.AddTask(task); } }
public void Setup() { var decisionTask = new DecisionTask() { Events = new List <HistoryEvent>(), TaskToken = "token" }; decisionTask.WorkflowExecution = new WorkflowExecution() { WorkflowId = "wid", RunId = "rid" }; decisionTask.Events.Add(new HistoryEvent() { EventId = 5, EventType = EventType.DecisionTaskStarted }); decisionTask.Events.Add(new HistoryEvent() { EventId = 4 }); decisionTask.Events.Add(new HistoryEvent() { EventId = 3 }); decisionTask.Events.Add(new HistoryEvent() { EventId = 2 }); decisionTask.Events.Add(new HistoryEvent() { EventId = 1 }); decisionTask.PreviousStartedEventId = 2; decisionTask.StartedEventId = 5; _workflowTask = WorkflowTask.Create(decisionTask); }
private WorkflowTask _AssignValues(WorkflowTask request, DocConstantPermission permission, Session session) { if (permission != DocConstantPermission.ADD && (request == null || request.Id <= 0)) { throw new HttpError(HttpStatusCode.NotFound, $"No record"); } if (permission == DocConstantPermission.ADD && !DocPermissionFactory.HasPermissionTryAdd(currentUser, "WorkflowTask")) { throw new HttpError(HttpStatusCode.Forbidden, "You do not have ADD permission for this route."); } request.VisibleFields = request.VisibleFields ?? new List <string>(); WorkflowTask ret = null; request = _InitAssignValues <WorkflowTask>(request, permission, session); //In case init assign handles create for us, return it if (permission == DocConstantPermission.ADD && request.Id > 0) { return(request); } var cacheKey = GetApiCacheKey <WorkflowTask>(DocConstantModelName.WORKFLOWTASK, nameof(WorkflowTask), request); //First, assign all the variables, do database lookups and conversions var pAssignee = (request.Assignee?.Id > 0) ? DocEntityUser.GetUser(request.Assignee.Id) : null; var pData = request.Data; var pDescription = request.Description; var pDueDate = request.DueDate; var pReporter = (request.Reporter?.Id > 0) ? DocEntityUser.GetUser(request.Reporter.Id) : null; DocEntityLookupTable pStatus = GetLookup(DocConstantLookupTable.WORKFLOWSTATUS, request.Status?.Name, request.Status?.Id); DocEntityLookupTable pType = GetLookup(DocConstantLookupTable.WORKFLOWTASKTYPE, request.Type?.Name, request.Type?.Id); var pWorkflow = (request.Workflow?.Id > 0) ? DocEntityWorkflow.GetWorkflow(request.Workflow.Id) : null; DocEntityWorkflowTask entity = null; if (permission == DocConstantPermission.ADD) { var now = DateTime.UtcNow; entity = new DocEntityWorkflowTask(session) { Created = now, Updated = now }; } else { entity = DocEntityWorkflowTask.GetWorkflowTask(request.Id); if (null == entity) { throw new HttpError(HttpStatusCode.NotFound, $"No record"); } } //Special case for Archived var pArchived = true == request.Archived; if (DocPermissionFactory.IsRequestedHasPermission <bool>(currentUser, request, pArchived, permission, DocConstantModelName.WORKFLOWTASK, nameof(request.Archived))) { if (DocPermissionFactory.IsRequested(request, pArchived, entity.Archived, nameof(request.Archived))) { if (DocResources.Metadata.IsInsertOnly(DocConstantModelName.WORKFLOWTASK, nameof(request.Archived)) && DocConstantPermission.ADD != permission) { throw new HttpError(HttpStatusCode.Forbidden, $"{nameof(request.Archived)} cannot be modified once set."); } } if (DocTools.IsNullOrEmpty(pArchived) && DocResources.Metadata.IsRequired(DocConstantModelName.WORKFLOWTASK, nameof(request.Archived))) { throw new HttpError(HttpStatusCode.BadRequest, $"{nameof(request.Archived)} requires a value."); } entity.Archived = pArchived; if (DocPermissionFactory.IsRequested <bool>(request, pArchived, nameof(request.Archived)) && !request.VisibleFields.Matches(nameof(request.Archived), ignoreSpaces: true)) { request.VisibleFields.Add(nameof(request.Archived)); } } if (DocPermissionFactory.IsRequestedHasPermission <DocEntityUser>(currentUser, request, pAssignee, permission, DocConstantModelName.WORKFLOWTASK, nameof(request.Assignee))) { if (DocPermissionFactory.IsRequested(request, pAssignee, entity.Assignee, nameof(request.Assignee))) { if (DocResources.Metadata.IsInsertOnly(DocConstantModelName.WORKFLOWTASK, nameof(request.Assignee)) && DocConstantPermission.ADD != permission) { throw new HttpError(HttpStatusCode.Forbidden, $"{nameof(request.Assignee)} cannot be modified once set."); } } if (DocTools.IsNullOrEmpty(pAssignee) && DocResources.Metadata.IsRequired(DocConstantModelName.WORKFLOWTASK, nameof(request.Assignee))) { throw new HttpError(HttpStatusCode.BadRequest, $"{nameof(request.Assignee)} requires a value."); } entity.Assignee = pAssignee; if (DocPermissionFactory.IsRequested <DocEntityUser>(request, pAssignee, nameof(request.Assignee)) && !request.VisibleFields.Matches(nameof(request.Assignee), ignoreSpaces: true)) { request.VisibleFields.Add(nameof(request.Assignee)); } } if (DocPermissionFactory.IsRequestedHasPermission <string>(currentUser, request, pData, permission, DocConstantModelName.WORKFLOWTASK, nameof(request.Data))) { if (DocPermissionFactory.IsRequested(request, pData, entity.Data, nameof(request.Data))) { if (DocResources.Metadata.IsInsertOnly(DocConstantModelName.WORKFLOWTASK, nameof(request.Data)) && DocConstantPermission.ADD != permission) { throw new HttpError(HttpStatusCode.Forbidden, $"{nameof(request.Data)} cannot be modified once set."); } } if (DocTools.IsNullOrEmpty(pData) && DocResources.Metadata.IsRequired(DocConstantModelName.WORKFLOWTASK, nameof(request.Data))) { throw new HttpError(HttpStatusCode.BadRequest, $"{nameof(request.Data)} requires a value."); } entity.Data = pData; if (DocPermissionFactory.IsRequested <string>(request, pData, nameof(request.Data)) && !request.VisibleFields.Matches(nameof(request.Data), ignoreSpaces: true)) { request.VisibleFields.Add(nameof(request.Data)); } } if (DocPermissionFactory.IsRequestedHasPermission <string>(currentUser, request, pDescription, permission, DocConstantModelName.WORKFLOWTASK, nameof(request.Description))) { if (DocPermissionFactory.IsRequested(request, pDescription, entity.Description, nameof(request.Description))) { if (DocResources.Metadata.IsInsertOnly(DocConstantModelName.WORKFLOWTASK, nameof(request.Description)) && DocConstantPermission.ADD != permission) { throw new HttpError(HttpStatusCode.Forbidden, $"{nameof(request.Description)} cannot be modified once set."); } } if (DocTools.IsNullOrEmpty(pDescription) && DocResources.Metadata.IsRequired(DocConstantModelName.WORKFLOWTASK, nameof(request.Description))) { throw new HttpError(HttpStatusCode.BadRequest, $"{nameof(request.Description)} requires a value."); } entity.Description = pDescription; if (DocPermissionFactory.IsRequested <string>(request, pDescription, nameof(request.Description)) && !request.VisibleFields.Matches(nameof(request.Description), ignoreSpaces: true)) { request.VisibleFields.Add(nameof(request.Description)); } } if (DocPermissionFactory.IsRequestedHasPermission <DateTime?>(currentUser, request, pDueDate, permission, DocConstantModelName.WORKFLOWTASK, nameof(request.DueDate))) { if (DocPermissionFactory.IsRequested(request, pDueDate, entity.DueDate, nameof(request.DueDate))) { if (DocResources.Metadata.IsInsertOnly(DocConstantModelName.WORKFLOWTASK, nameof(request.DueDate)) && DocConstantPermission.ADD != permission) { throw new HttpError(HttpStatusCode.Forbidden, $"{nameof(request.DueDate)} cannot be modified once set."); } } if (DocTools.IsNullOrEmpty(pDueDate) && DocResources.Metadata.IsRequired(DocConstantModelName.WORKFLOWTASK, nameof(request.DueDate))) { throw new HttpError(HttpStatusCode.BadRequest, $"{nameof(request.DueDate)} requires a value."); } entity.DueDate = pDueDate; if (DocPermissionFactory.IsRequested <DateTime?>(request, pDueDate, nameof(request.DueDate)) && !request.VisibleFields.Matches(nameof(request.DueDate), ignoreSpaces: true)) { request.VisibleFields.Add(nameof(request.DueDate)); } } if (DocPermissionFactory.IsRequestedHasPermission <DocEntityUser>(currentUser, request, pReporter, permission, DocConstantModelName.WORKFLOWTASK, nameof(request.Reporter))) { if (DocPermissionFactory.IsRequested(request, pReporter, entity.Reporter, nameof(request.Reporter))) { if (DocResources.Metadata.IsInsertOnly(DocConstantModelName.WORKFLOWTASK, nameof(request.Reporter)) && DocConstantPermission.ADD != permission) { throw new HttpError(HttpStatusCode.Forbidden, $"{nameof(request.Reporter)} cannot be modified once set."); } } if (DocTools.IsNullOrEmpty(pReporter) && DocResources.Metadata.IsRequired(DocConstantModelName.WORKFLOWTASK, nameof(request.Reporter))) { throw new HttpError(HttpStatusCode.BadRequest, $"{nameof(request.Reporter)} requires a value."); } entity.Reporter = pReporter; if (DocPermissionFactory.IsRequested <DocEntityUser>(request, pReporter, nameof(request.Reporter)) && !request.VisibleFields.Matches(nameof(request.Reporter), ignoreSpaces: true)) { request.VisibleFields.Add(nameof(request.Reporter)); } } if (DocPermissionFactory.IsRequestedHasPermission <DocEntityLookupTable>(currentUser, request, pStatus, permission, DocConstantModelName.WORKFLOWTASK, nameof(request.Status))) { if (DocPermissionFactory.IsRequested(request, pStatus, entity.Status, nameof(request.Status))) { if (DocResources.Metadata.IsInsertOnly(DocConstantModelName.WORKFLOWTASK, nameof(request.Status)) && DocConstantPermission.ADD != permission) { throw new HttpError(HttpStatusCode.Forbidden, $"{nameof(request.Status)} cannot be modified once set."); } } if (DocTools.IsNullOrEmpty(pStatus) && DocResources.Metadata.IsRequired(DocConstantModelName.WORKFLOWTASK, nameof(request.Status))) { throw new HttpError(HttpStatusCode.BadRequest, $"{nameof(request.Status)} requires a value."); } entity.Status = pStatus; if (DocPermissionFactory.IsRequested <DocEntityLookupTable>(request, pStatus, nameof(request.Status)) && !request.VisibleFields.Matches(nameof(request.Status), ignoreSpaces: true)) { request.VisibleFields.Add(nameof(request.Status)); } } if (DocPermissionFactory.IsRequestedHasPermission <DocEntityLookupTable>(currentUser, request, pType, permission, DocConstantModelName.WORKFLOWTASK, nameof(request.Type))) { if (DocPermissionFactory.IsRequested(request, pType, entity.Type, nameof(request.Type))) { if (DocResources.Metadata.IsInsertOnly(DocConstantModelName.WORKFLOWTASK, nameof(request.Type)) && DocConstantPermission.ADD != permission) { throw new HttpError(HttpStatusCode.Forbidden, $"{nameof(request.Type)} cannot be modified once set."); } } if (DocTools.IsNullOrEmpty(pType) && DocResources.Metadata.IsRequired(DocConstantModelName.WORKFLOWTASK, nameof(request.Type))) { throw new HttpError(HttpStatusCode.BadRequest, $"{nameof(request.Type)} requires a value."); } entity.Type = pType; if (DocPermissionFactory.IsRequested <DocEntityLookupTable>(request, pType, nameof(request.Type)) && !request.VisibleFields.Matches(nameof(request.Type), ignoreSpaces: true)) { request.VisibleFields.Add(nameof(request.Type)); } } if (DocPermissionFactory.IsRequestedHasPermission <DocEntityWorkflow>(currentUser, request, pWorkflow, permission, DocConstantModelName.WORKFLOWTASK, nameof(request.Workflow))) { if (DocPermissionFactory.IsRequested(request, pWorkflow, entity.Workflow, nameof(request.Workflow))) { if (DocResources.Metadata.IsInsertOnly(DocConstantModelName.WORKFLOWTASK, nameof(request.Workflow)) && DocConstantPermission.ADD != permission) { throw new HttpError(HttpStatusCode.Forbidden, $"{nameof(request.Workflow)} cannot be modified once set."); } } if (DocTools.IsNullOrEmpty(pWorkflow) && DocResources.Metadata.IsRequired(DocConstantModelName.WORKFLOWTASK, nameof(request.Workflow))) { throw new HttpError(HttpStatusCode.BadRequest, $"{nameof(request.Workflow)} requires a value."); } entity.Workflow = pWorkflow; if (DocPermissionFactory.IsRequested <DocEntityWorkflow>(request, pWorkflow, nameof(request.Workflow)) && !request.VisibleFields.Matches(nameof(request.Workflow), ignoreSpaces: true)) { request.VisibleFields.Add(nameof(request.Workflow)); } } if (request.Locked) { entity.Locked = request.Locked; } entity.SaveChanges(permission); DocPermissionFactory.SetVisibleFields <WorkflowTask>(currentUser, nameof(WorkflowTask), request.VisibleFields); ret = entity.ToDto(); var cacheExpires = DocResources.Metadata.GetCacheExpiration(DocConstantModelName.WORKFLOWTASK); DocCacheClient.Set(key: cacheKey, value: ret, entityId: request.Id, entityType: DocConstantModelName.WORKFLOWTASK, cacheExpires); return(ret); }
private WorkflowTask BuildWorkflowTaskDcosDeploy(CreateReleaseDefinitionQuery message, Model.Environment environment) { var task = new WorkflowTask { TaskId = Guid.Parse("5d5d4670-4126-417e-9b7f-ed5f99f9baef"), Name = "Deploy service to DCOS", //"Task group: VO.TG.MarathonApp.DCOS.Deploy $(DCOSBuildVersion)", RefName = "VOTGMarathonAppDCOSDeploy_1", Version = "1.*", Enabled = true, AlwaysRun = true, ContinueOnError = false, TimeoutInMinutes = 0, DefinitionType = "metaTask", Inputs = new Dictionary <string, string> { { "DCOSBuildVersion", "$(DCOSBuildVersion)" }, { "ARTIFACT_PATH", "$(ArtifactAlias)" }, { "DCOS_URL", "$(DCOS_URL)" }, { "MARATHON_APP_DEF_ARTIFACT_PATH", $"{message.ServiceName.ToLower()}.json" }, { "TFS_USER", "" }, { "TFS_PAT", "$(TFS_PAT)" }, { "APP_NAME", "$(AppName)" }, { "APP_INSTANCES", "1" }, { "WATCH_DEPLOY", "" } } }; /* * if (message.IsProdPath) * { * task.Inputs.Add("DCOS_USERNAME", ""); * task.Inputs.Add("DCOS_PRIVATE_KEY_B64", ""); * task.Inputs.Add("CONFIG_REPO_BRANCH", "master"); * task.Inputs.Add("ENV_CONFIG_FILE", ""); * } * else*/ { task.Inputs.Add("DCOS_USERNAME", "$(DCOS_USERNAME)"); switch (environment.EnvironmentTag) { case Model.EnvironmentTag.Prod: task.Inputs.Add("DCOS_PRIVATE_KEY_B64", "$(DCOS_PRIVATE_KEY_B64)"); break; case Model.EnvironmentTag.Alpha: case Model.EnvironmentTag.QA: task.Inputs.Add("DCOS_PRIVATE_KEY_B64", "$(B64_KEY_QA)"); break; case Model.EnvironmentTag.Dev: task.Inputs.Add("DCOS_PRIVATE_KEY_B64", "$(B64_KEY_QA)"); break; } if (message.IsProdPath) { task.Inputs.Add("CONFIG_REPO_BRANCH", "master"); //todo: should Alpha use release? } else { task.Inputs.Add("CONFIG_REPO_BRANCH", "dev"); } var configurationFolder = message.ConfigurationFolder; if (message.IsProdPath) { configurationFolder = $"/json/DCOS/{environment.TAG}"; } task.Inputs.Add("ENV_CONFIG_FILE", $"{configurationFolder}/{message.ServiceName.ToLower()}.json"); } return(task); }
/// <summary> /// Initiaze the global variable /// </summary> /// <param name="category">Selected task element</param> public CreateLabels_WorkflowTask(WorkflowTask task) { this.task = task; }
private WorkflowTask WorkflowTaskWithEvents(DateTime decisionTaskTime, double downloadFactor) { return(WorkflowTask.Create(BuildDecisionTask(decisionTaskTime), downloadFactor)); }
private WorkflowTask WorkflowTaskWithEvents(DateTime decisionTaskTime) { return(WorkflowTask.Create(BuildDecisionTask(decisionTaskTime))); }
private List<WorkflowTask> SaveOldTasks(SPListItem eventDataItem, SPWorkflowTaskCollection oldTasks) { SourceTasks sourceTasks = new SourceTasks(); if (eventDataItem[SPFieldName.TasksHistory].AsString().IsNullOrWhitespace()) { foreach (SPWorkflowTask task in oldTasks) { if (task[SPBuiltInFieldId.TaskStatus].AsString() == "Completed") { lastTaskCompleteDate = task[SPBuiltInFieldId.Modified].AsString(); } WorkflowTask workflowTask = new WorkflowTask(); workflowTask.Add(WorkflowTaskFieldName.Title, task.Title); workflowTask.Add(WorkflowTaskFieldName.AssignedTo, task[SPBuiltInFieldId.AssignedTo].AsString()); workflowTask.Add(WorkflowTaskFieldName.Status, task[SPBuiltInFieldId.TaskStatus].AsString()); workflowTask.Add(WorkflowTaskFieldName.Created, task[SPBuiltInFieldId.Created].AsString()); workflowTask.Add(WorkflowTaskFieldName.CreatedBy, task[SPBuiltInFieldId.Author].AsString()); workflowTask.Add(WorkflowTaskFieldName.StartDate, task[SPBuiltInFieldId.StartDate].AsString()); workflowTask.Add(WorkflowTaskFieldName.CompleteDate, task[SPBuiltInFieldId.Modified].AsString()); workflowTask.Add(WorkflowTaskFieldName.Outcome, task[SPBuiltInFieldId.WorkflowOutcome].AsString()); workflowTask.Add(WorkflowTaskFieldName.Comments, task[SPBuiltInFieldId.Body].AsString()); workflowTask.Add(WorkflowTaskFieldName.UIVersion, task[SPBuiltInFieldId._UIVersion].AsString()); Hashtable extendedPropertiesAsHashtable = SPWorkflowTask.GetExtendedPropertiesAsHashtable(task); workflowTask.Add(WorkflowTaskFieldName.WorkflowVariables, extendedPropertiesAsHashtable["__WorkflowVaribales"].AsString().Replace('\"', '\'')); sourceTasks.tasks.Add(workflowTask); } eventDataItem[SPFieldName.TasksHistory] = SerializeUtil.Serialize(sourceTasks); eventDataItem.Update(); } else { sourceTasks = SerializeUtil.Deserialize(typeof(SourceTasks), eventDataItem[SPFieldName.TasksHistory].AsString()) as SourceTasks; foreach (WorkflowTask sourceTask in sourceTasks.tasks) { if (sourceTask[WorkflowTaskFieldName.Status].AsString() == "Completed") { lastTaskCompleteDate = sourceTask[WorkflowTaskFieldName.CompleteDate].AsString(); } } } return sourceTasks.tasks; }
private async Task ExecuteWorkflowOnSignalEvent(Workflow workflow, string workflowId, string runId) { var hostedWorkflows = new WorkflowHost(_domain, new[] { workflow }); var workflowTasks = WorkflowTask.CreateFor(DecisionTasksWithSignalEvents(workflowId, runId), _domain); await workflowTasks.ExecuteForAsync(hostedWorkflows); }
public object Get(WorkflowTask request) => GetEntityWithCache <WorkflowTask>(DocConstantModelName.WORKFLOWTASK, request, GetWorkflowTask);
public WorkflowTask Put(WorkflowTask request) { return(Patch(request)); }