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();
        }
Beispiel #3
0
        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);
        }
Beispiel #5
0
        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);
        }
Beispiel #6
0
        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"));
            }
        }
Beispiel #7
0
        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();
        }
Beispiel #8
0
        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();
        }
Beispiel #9
0
        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();
        }