コード例 #1
0
        public async void Feed(Message message)
        {
            if (message.LeadScoreConditionType == (int)LeadScoreConditionType.WorkflowActivated)
            {
                IEnumerable <Message> messages = await loadWorkflow((short)message.EntityId, message.AccountId);

                client.Complete(message.LockToken);

                foreach (var feedMessage in messages)
                {
                    blockingCollection.Add(feedMessage);
                }
            }
            else if (message.LeadScoreConditionType == (int)LeadScoreConditionType.WorkflowInactive || message.LeadScoreConditionType == (int)LeadScoreConditionType.WorkflowPaused)
            {
                AutomationWorkflow workflow = null;
                bool result = automationWorkflows.TryRemove(message.EntityId, out workflow);
                if (message.ConditionValue != null && message.ConditionValue.Equals("delayed") && message.ConditionValue.Equals("delayed"))
                {
                    workflowService.DeactivateWorkflow(new DeactivateWorkflowRequest()
                    {
                        WorkflowId = message.EntityId
                    });
                }

                if (result && workflow != null)
                {
                    client.Complete(message.LockToken);
                }
            }
            else
            {
                blockingCollection.Add(message);
            }
        }
コード例 #2
0
        void loadWorkflows()
        {
            automationWorkflows = new ConcurrentDictionary <int, AutomationWorkflow>();

            var workflowsResponse = workflowService.GetAllActiveWorkflows(
                new GetActiveWorkflowsRequest()
            {
                PageNumber = 1, Limit = 5000
            });

            if (workflowsResponse.Workflows != null)
            {
                foreach (var workflowVM in workflowsResponse.Workflows)
                {
                    if (workflowVM == null)
                    {
                        continue;
                    }
                    var workflowResponse = workflowService.GetWorkFlow(new GetWorkflowRequest()
                    {
                        AccountId  = workflowVM.AccountID,
                        WorkflowID = workflowVM.WorkflowID,
                        RequestFromAutomationService = true
                    });

                    if (workflowResponse.WorkflowViewModel == null)
                    {
                        continue;
                    }
                    var endState = workflowService.GetEndState(new GetWorkflowEndStateRequest()
                    {
                        WorkflowId = workflowVM.WorkflowID
                    });
                    if (endState.WorkflowActionViewModel == null)
                    {
                        continue;
                    }
                    endState.WorkflowActionViewModel.OrderNumber = workflowResponse.WorkflowViewModel.WorkflowActions.Max(s => s.OrderNumber) + 1;
                    var workflowActions = workflowResponse.WorkflowViewModel.WorkflowActions.ToList();
                    endState.WorkflowActionViewModel.OrderNumber = workflowActions.Max(w => w.OrderNumber) + 1;
                    workflowActions.Add(endState.WorkflowActionViewModel);
                    workflowResponse.WorkflowViewModel.WorkflowActions = workflowActions;

                    var workflowDomain = Mapper.Map <WorkFlowViewModel, Workflow>(workflowResponse.WorkflowViewModel);
                    AutomationWorkflow automationWorkflow = new AutomationWorkflow(workflowDomain, workflowService, tagService,
                                                                                   campaignService, contactService, leadScoreService, pubSubService, communicationService);
                    automationWorkflows.AddOrUpdate(workflowDomain.WorkflowID, automationWorkflow, (a, w) => { return(w); });
                }
            }
        }
コード例 #3
0
 void consumeCamapaignMessage(Message message)
 {
     try
     {
         AutomationWorkflow workflow = automationWorkflows.Values.Where(w => w.WorkflowId == message.WorkflowId).FirstOrDefault();
         if (workflow != null)
         {
             workflow.ProcessMessage(message, workflow.WorkflowId);
         }
     }
     catch (Exception ex)
     {
         Logger.Current.Error("An error ocured while processing campaign sent message : " + ex);
     }
 }
コード例 #4
0
        async Task <IEnumerable <Message> > loadWorkflow(short workflowId, int accountId)
        {
            var workflowResponse = workflowService.GetWorkFlow(new GetWorkflowRequest()
            {
                AccountId  = accountId,
                WorkflowID = workflowId,
                RequestFromAutomationService = true
            });
            IList <Message> messages = new List <Message>();

            if (workflowResponse.WorkflowViewModel != null)
            {
                var endState = workflowService.GetEndState(new GetWorkflowEndStateRequest()
                {
                    WorkflowId = workflowId
                });
                if (endState.WorkflowActionViewModel != null)
                {
                    endState.WorkflowActionViewModel.OrderNumber = workflowResponse.WorkflowViewModel.WorkflowActions.Max(s => s.OrderNumber) + 1;
                    var workflowActions = workflowResponse.WorkflowViewModel.WorkflowActions.ToList();
                    workflowActions.Add(endState.WorkflowActionViewModel);
                    workflowResponse.WorkflowViewModel.WorkflowActions = workflowActions;

                    var workflowDomain = Mapper.Map <WorkFlowViewModel, Workflow>(workflowResponse.WorkflowViewModel);
                    AutomationWorkflow automationWorkflow = new AutomationWorkflow(workflowDomain, workflowService, tagService, campaignService,
                                                                                   contactService, leadScoreService, pubSubService, communicationService);
                    if (!automationWorkflows.ContainsKey(workflowId))
                    {
                        automationWorkflows.AddOrUpdate(workflowId, automationWorkflow, (a, w) => { return(w); });
                    }

                    var sentCampaignTriggers = workflowDomain.Triggers.Where(t => t.TriggerTypeID == WorkflowTriggerType.Campaign && t.CampaignID.HasValue && t.IsStartTrigger);
                    if (sentCampaignTriggers != null && sentCampaignTriggers.Any())
                    {
                        foreach (var campaignId in sentCampaignTriggers.Select(t => t.CampaignID.Value))
                        {
                            IEnumerable <Message> campaignMessages = FeedContactsAffectedByCampaign(campaignId, workflowDomain.WorkflowID, workflowDomain.AccountID);
                            foreach (Message message in campaignMessages)
                            {
                                campaignblockingCollection.Add(message);
                            }
                        }
                    }

                    var savedSearchTriggers = workflowDomain.Triggers.Where(t => t.TriggerTypeID == WorkflowTriggerType.SmartSearch && t.SearchDefinitionID.HasValue && t.IsStartTrigger);
                    if (savedSearchTriggers != null && savedSearchTriggers.Any())
                    {
                        foreach (var searchDefinitionId in savedSearchTriggers.Select(t => t.SearchDefinitionID.Value))
                        {
                            IEnumerable <Message> savedSearchMessages = await FeedContactsAffectedBySavedSearch(searchDefinitionId, workflowDomain.WorkflowID, workflowDomain.AccountID);

                            foreach (Message message in savedSearchMessages)
                            {
                                searchblockingCollection.Add(message);
                            }
                        }
                    }

                    var opportunityStageChangeTrigger = workflowDomain.Triggers.Where(t => t.TriggerTypeID == WorkflowTriggerType.OpportunityStatusChanged && t.OpportunityStageID.HasValue && t.IsStartTrigger);
                    if (opportunityStageChangeTrigger != null && opportunityStageChangeTrigger.Any())
                    {
                        IEnumerable <Message> opportunityChangeMessages = FeedContactsAffectedByOpportunityChange(opportunityStageChangeTrigger.FirstOrDefault().OpportunityStageID.Value,
                                                                                                                  workflowDomain.WorkflowID, workflowDomain.AccountID);
                        messages = messages.Concat(opportunityChangeMessages).ToList();
                    }
                }
            }
            return(messages);
        }