public void ExecuteRecipeStep(RecipeContext recipeContext) { if (!String.Equals(recipeContext.RecipeStep.Name, "Workflows", StringComparison.OrdinalIgnoreCase)) { return; } foreach (var workflowDefinitionElement in recipeContext.RecipeStep.Step.Elements()) { var workflowDefinition = new WorkflowDefinitionRecord { Name = ProbeWorkflowDefinitionName(workflowDefinitionElement.Attribute("Name").Value), Enabled = Boolean.Parse(workflowDefinitionElement.Attribute("Enabled").Value) }; _workflowDefinitionRepository.Create(workflowDefinition); var activitiesElement = workflowDefinitionElement.Element("Activities"); var transitionsElement = workflowDefinitionElement.Element("Transitions"); var activitiesDictionary = new Dictionary <int, ActivityRecord>(); foreach (var activityElement in activitiesElement.Elements()) { var localId = Int32.Parse(activityElement.Attribute("Id").Value); var activity = new ActivityRecord { Name = activityElement.Attribute("Name").Value, Start = Boolean.Parse(activityElement.Attribute("Start").Value), X = Int32.Parse(activityElement.Attribute("X").Value), Y = Int32.Parse(activityElement.Attribute("Y").Value), State = activityElement.Element("State").Value }; activitiesDictionary.Add(localId, activity); workflowDefinition.ActivityRecords.Add(activity); } foreach (var transitionElement in transitionsElement.Elements()) { var sourceActivityId = Int32.Parse(transitionElement.Attribute("SourceActivityId").Value); var sourceEndpoint = transitionElement.Attribute("SourceEndpoint").Value; var destinationActivityId = Int32.Parse(transitionElement.Attribute("DestinationActivityId").Value); var destinationEndpoint = transitionElement.Attribute("DestinationEndpoint").Value; workflowDefinition.TransitionRecords.Add(new TransitionRecord { SourceActivityRecord = activitiesDictionary[sourceActivityId], SourceEndpoint = sourceEndpoint, DestinationActivityRecord = activitiesDictionary[destinationActivityId], DestinationEndpoint = destinationEndpoint }); } } recipeContext.Executed = true; }
private void CleanWorkFlow(WorkflowDefinitionRecord workflowDefinition) { foreach (var activityRecord in workflowDefinition.ActivityRecords) { _activityRepository.Delete(activityRecord); } workflowDefinition.ActivityRecords.Clear(); foreach (var transitionRecord in workflowDefinition.TransitionRecords) { _transitionRepository.Delete(transitionRecord); } workflowDefinition.TransitionRecords.Clear(); }
public ActionResult CreatePost(string name) { if (!Services.Authorizer.Authorize(StandardPermissions.SiteOwner, T("Not authorized to create workflows"))) { return(new HttpUnauthorizedResult()); } var workflowDefinitionRecord = new WorkflowDefinitionRecord { Name = name }; _workflowDefinitionRecords.Create(workflowDefinitionRecord); return(RedirectToAction("Edit", new { workflowDefinitionRecord.Id })); }
private WorkflowDefinitionRecord GetOrCreateWorkflowDefinition(string name) { var workflowDefinition = _workflowDefinitionRepository.Get(x => x.Name == name); if (workflowDefinition == null) { workflowDefinition = new WorkflowDefinitionRecord { Name = name }; _workflowDefinitionRepository.Create(workflowDefinition); } else { CleanWorkFlow(workflowDefinition); } return(workflowDefinition); }
private WorkflowDefinitionViewModel CreateWorkflowDefinitionViewModel(WorkflowDefinitionRecord workflowDefinitionRecord) { if (workflowDefinitionRecord == null) { throw new ArgumentNullException("workflowDefinitionRecord"); } var workflowDefinitionModel = new WorkflowDefinitionViewModel { Id = workflowDefinitionRecord.Id, Name = workflowDefinitionRecord.Name }; dynamic workflow = new JObject(); workflow.Activities = new JArray(workflowDefinitionRecord.ActivityRecords.Select(x => { dynamic activity = new JObject(); activity.Name = x.Name; activity.Id = x.Id; activity.ClientId = x.Name + "_" + x.Id; activity.Left = x.X; activity.Top = x.Y; activity.Start = x.Start; activity.State = FormParametersHelper.FromJsonString(x.State); return(activity); })); workflow.Connections = new JArray(workflowDefinitionRecord.TransitionRecords.Select(x => { dynamic connection = new JObject(); connection.Id = x.Id; connection.SourceId = x.SourceActivityRecord.Name + "_" + x.SourceActivityRecord.Id; connection.TargetId = x.DestinationActivityRecord.Name + "_" + x.DestinationActivityRecord.Id; connection.SourceEndpoint = x.SourceEndpoint; return(connection); })); workflowDefinitionModel.JsonData = FormParametersHelper.ToJsonString(workflow); return(workflowDefinitionModel); }
public ActionResult EditPropertiesPost(AdminEditViewModel adminEditViewModel, int id = 0) { if (!Services.Authorizer.Authorize(StandardPermissions.SiteOwner, T("Not authorized to edit workflows."))) { return(new HttpUnauthorizedResult()); } if (String.IsNullOrWhiteSpace(adminEditViewModel.WorkflowDefinition.Name)) { ModelState.AddModelError("Name", T("The Name can't be empty.").Text); } if (!ModelState.IsValid) { return(View()); } if (id == 0) { var workflowDefinitionRecord = new WorkflowDefinitionRecord { Name = adminEditViewModel.WorkflowDefinition.Name }; _workflowDefinitionRecords.Create(workflowDefinitionRecord); return(RedirectToAction("Edit", new { workflowDefinitionRecord.Id })); } else { var workflowDefinition = _workflowDefinitionRecords.Get(id); workflowDefinition.Name = adminEditViewModel.WorkflowDefinition.Name; return(RedirectToAction("Index")); } }
public void CreateSendEmailToFollowersWorkflow() { WorkflowDefinitionRecord workflow = new WorkflowDefinitionRecord { Name = this.SendEmailToFollowersTicket, Enabled = true }; this.workflowDefinitionRepository.Create(workflow); var emailTemplate = this.emailTemplatesRepository.Table.FirstOrDefault(c => c.TypeId == (int)EmailTemplateType.FollowersNotification); if (emailTemplate == null) { throw new NullReferenceException(); } ActivityRecord itemPublishRecord = new ActivityRecord { WorkflowDefinitionRecord = workflow, Start = true, X = 552, Y = 227, State = "{}", Name = NewActivityStreamActivity.ActivityStreamActivityName }; this.activityRepository.Create(itemPublishRecord); ActivityRecord timerActivity = new ActivityRecord { WorkflowDefinitionRecord = workflow, Start = false, X = 552, Y = 388, State = "{\"Amount\":\"1\",\"Unity\":\"Minute\"}", Name = OrchardCollaborationTimerActivity.ActionName }; this.activityRepository.Create(timerActivity); ActivityRecord sendEmailActivityRecord = new ActivityRecord { State = string.Format( CultureInfo.InvariantCulture, "{{\"{0}\":\"{1}\"}}", EmailTemplateActivityForm.EmailTemplateIdFieldName, emailTemplate.Id.ToString(CultureInfo.InvariantCulture)), Name = "SendEmailToFollowersActivity", WorkflowDefinitionRecord = workflow, X = 494, Y = 588, Start = false }; this.activityRepository.Create(sendEmailActivityRecord); TransitionRecord timerTransitionRecord = new TransitionRecord { WorkflowDefinitionRecord = workflow, DestinationActivityRecord = timerActivity, SourceActivityRecord = itemPublishRecord, DestinationEndpoint = "", SourceEndpoint = "Done" }; this.transitionRepository.Create(timerTransitionRecord); TransitionRecord sendEmailTransitionRecord = new TransitionRecord { WorkflowDefinitionRecord = workflow, DestinationActivityRecord = sendEmailActivityRecord, SourceActivityRecord = timerActivity, DestinationEndpoint = "", SourceEndpoint = "Done" }; this.transitionRepository.Create(sendEmailTransitionRecord); this.workflowDefinitionRepository.Flush(); this.activityRepository.Flush(); this.transitionRepository.Flush(); }
private void CreateCRMCommentWorkflow() { WorkflowDefinitionRecord workflow = new WorkflowDefinitionRecord { Name = this.CreateTicketCommentsWorkflowName, Enabled = true }; this.workflowDefinitionRepository.Create(workflow); var emailTemplate = this.emailTemplatesRepository.Table.FirstOrDefault(c => c.TypeId == (int)EmailTemplateType.NewMessage); if (emailTemplate == null) { throw new NullReferenceException(); } ActivityRecord crmCommentPublishRecord = new ActivityRecord { WorkflowDefinitionRecord = workflow, Start = true, X = 552, Y = 227, State = "{\"ContentTypes\":\"CRMComment\"}", Name = "ContentPublished" }; this.activityRepository.Create(crmCommentPublishRecord); ActivityRecord timerActivity = new ActivityRecord { WorkflowDefinitionRecord = workflow, Start = false, X = 552, Y = 388, State = "{\"Amount\":\"1\",\"Unity\":\"Minute\"}", Name = OrchardCollaborationTimerActivity.ActionName }; this.activityRepository.Create(timerActivity); ActivityRecord sendEmailCRMCommentActivity = new ActivityRecord { State = string.Format( CultureInfo.InvariantCulture, "{{\"{0}\":\"{1}\",\"{2}\":\"true\",\"{3}\":\"true\"}}", EmailTemplateActivityForm.EmailTemplateIdFieldName, emailTemplate.Id.ToString(CultureInfo.InvariantCulture), EmailTemplateActivityForm.SentToRequestingUserFieldName, EmailTemplateActivityForm.SentToOwnerFieldName ), Name = "SendTicketEmailActivity", WorkflowDefinitionRecord = workflow, X = 494, Y = 588, Start = false }; this.activityRepository.Create(sendEmailCRMCommentActivity); TransitionRecord timerTransitionRecord = new TransitionRecord { WorkflowDefinitionRecord = workflow, DestinationActivityRecord = timerActivity, SourceActivityRecord = crmCommentPublishRecord, DestinationEndpoint = "", SourceEndpoint = "Done" }; this.transitionRepository.Create(timerTransitionRecord); TransitionRecord sendEmailCRMCommentTransitionRecord = new TransitionRecord { WorkflowDefinitionRecord = workflow, DestinationActivityRecord = sendEmailCRMCommentActivity, SourceActivityRecord = timerActivity, DestinationEndpoint = "", SourceEndpoint = "Done" }; this.transitionRepository.Create(sendEmailCRMCommentTransitionRecord); this.workflowDefinitionRepository.Flush(); this.activityRepository.Flush(); this.transitionRepository.Flush(); }
private void CreateTicketForReceivedEmailsWorkflow() { WorkflowDefinitionRecord workflow = new WorkflowDefinitionRecord { Name = this.CreateTicketForRecievedEmailWorkflowName, Enabled = true }; this.workflowDefinitionRepository.Create(workflow); ActivityRecord emailReceivedRecord = new ActivityRecord { WorkflowDefinitionRecord = workflow, Start = true, State = "{}", X = 552, Y = 227, Name = IMapEmailReceivedActivity.ActivityName }; this.activityRepository.Create(emailReceivedRecord); ActivityRecord checkEmailBelongToUserActivityRecord = new ActivityRecord { State = "{}", Name = "CheckEmailBelongToUser", WorkflowDefinitionRecord = workflow, X = 494, Y = 538, Start = false }; this.activityRepository.Create(checkEmailBelongToUserActivityRecord); TransitionRecord transitionRecord1 = new TransitionRecord { WorkflowDefinitionRecord = workflow, DestinationActivityRecord = checkEmailBelongToUserActivityRecord, SourceActivityRecord = emailReceivedRecord, DestinationEndpoint = "", SourceEndpoint = "Done" }; this.transitionRepository.Create(transitionRecord1); ActivityRecord createTicketActivityRecord = new ActivityRecord { State = "{\"EditableBy\":\"{EEmail.UserName}\",\"Title\":\"{EEmail.Subject}\",\"Description\":\"{EEmail.Body}\",\"DownloadEmailAttachments\":\"true\"}", Name = CreateTicketActivity.ActivityName, WorkflowDefinitionRecord = workflow, X = 494, Y = 688, Start = false }; this.activityRepository.Create(createTicketActivityRecord); TransitionRecord transitionRecord2 = new TransitionRecord { WorkflowDefinitionRecord = workflow, DestinationActivityRecord = createTicketActivityRecord, SourceActivityRecord = checkEmailBelongToUserActivityRecord, DestinationEndpoint = "", SourceEndpoint = "Yes" }; this.transitionRepository.Create(transitionRecord2); this.workflowDefinitionRepository.Flush(); this.activityRepository.Flush(); this.transitionRepository.Flush(); }