예제 #1
0
        private bool HasMetricDetailsToMember(IOrganizationService service, find_metric metric, EntityReference memberReference)
        {
            QueryExpression QEfind_metricdetails = new QueryExpression("find_metricdetails");

            QEfind_metricdetails.ColumnSet.AddColumns("find_name");
            QEfind_metricdetails.Criteria.AddCondition("find_metric", "find_metricid", ConditionOperator.Equal, metric.Id);
            QEfind_metricdetails.AddLink("find_metric", "find_lookupmetric", "find_metricid");

            switch (memberReference.LogicalName)
            {
            case "account":
                QEfind_metricdetails.Criteria.AddCondition("account", "accountid", ConditionOperator.Equal, memberReference.Id);
                QEfind_metricdetails.AddLink("account", "find_lookupaccount", "accountid");
                break;

            case "contact":
                QEfind_metricdetails.Criteria.AddCondition("contact", "contactid", ConditionOperator.Equal, memberReference.Id);
                QEfind_metricdetails.AddLink("contact", "find_lookupcontact", "contactid");
                break;

            case "lead":
                QEfind_metricdetails.Criteria.AddCondition("lead", "leadid", ConditionOperator.Equal, memberReference.Id);
                QEfind_metricdetails.AddLink("contact", "find_lookuplead", "leadid");
                break;
            }
            return(service.RetrieveMultiple(QEfind_metricdetails).Entities.Count != 0);
        }
예제 #2
0
        private void CreateMetricDetails(IOrganizationService service, find_metric metric, EntityReference memberReference)
        {
            find_metricdetails metricDetails = new find_metricdetails(Guid.NewGuid());

            metricDetails.find_LookUpMetric = metric.ToEntityReference();
            metricDetails.find_NumberClick  = 0;
            metricDetails.find_NumberOpens  = 0;
            metricDetails.find_name         = "metricDetail " + memberReference.Id;

            switch (memberReference.LogicalName)
            {
            case "account":
                metricDetails.find_LookUpAccount = memberReference;
                break;

            case "contact":
                metricDetails.find_LookUpContact = memberReference;
                break;

            case "lead":
                metricDetails.find_LookUpLead = memberReference;
                break;
            }

            service.Create(metricDetails);
        }
예제 #3
0
        protected override void Execute(CodeActivityContext context)
        {
            ITracingService      tracing         = context.GetExtension <ITracingService>();
            IWorkflowContext     workflowContext = context.GetExtension <IWorkflowContext>();
            IOrganizationService service         = context.GetExtension <IOrganizationServiceFactory>().CreateOrganizationService(workflowContext.InitiatingUserId);

            FuncLibrary aux = new FuncLibrary();
            find_marketingautomationintegration sendGridAccount = aux.GetMailchimpInfo(service);

            Apihelper.InitializeClient(sendGridAccount.find_SendGridIntegration);
            ApiRoot apiRoot = new ApiRoot();


            List            list            = service.Retrieve(MarketingList.Get(context).LogicalName, MarketingList.Get(context).Id, new ColumnSet("find_sendgridid")).ToEntity <List>();
            Campaign        campaign        = service.Retrieve(Campaign.Get(context).LogicalName, Campaign.Get(context).Id, new ColumnSet("name")).ToEntity <Campaign>();
            EntityReference memberReference = new EntityReference(MemberType.Get(context), new Guid(MemberId.Get(context)));
            find_metric     metric          = GetMetricByCampaign(service, campaign);


            if (HasMetricDetailsToMember(service, metric, memberReference))
            {
                return;
            }

            CreateMetricDetails(service, metric, memberReference);
            SyncMemberTypeToSendGrid(service, memberReference, list, apiRoot, tracing);
        }
예제 #4
0
        private void CreateMetric(IOrganizationService service, CrmEarlyBound.Campaign campaign)
        {
            find_metric metric = new find_metric(Guid.NewGuid());

            metric.find_lookupCampaign = campaign.ToEntityReference();
            metric.find_name           = campaign.Name + " metric";
            service.Create(metric);
        }
예제 #5
0
        protected override void Execute(CodeActivityContext context)
        {
            ITracingService      tracing         = context.GetExtension <ITracingService>();
            IWorkflowContext     workflowContext = context.GetExtension <IWorkflowContext>();
            IOrganizationService service         = context.GetExtension <IOrganizationServiceFactory>().CreateOrganizationService(workflowContext.InitiatingUserId);

            FuncLibrary aux = new FuncLibrary();
            find_marketingautomationintegration accountObj = aux.GetMailchimpInfo(service);

            Apihelper.InitializeClient(accountObj.find_SendGridIntegration);
            ApiRoot root = new ApiRoot();

            Campaign    campaign = service.Retrieve(Campaign.Get(context).LogicalName, Campaign.Get(context).Id, new ColumnSet("name", "find_sendgridid")).ToEntity <Campaign>();
            find_metric metric   = GetMetricByCampaign(service, campaign);

            UpdateMetric(service, root, campaign, metric, tracing);
        }
예제 #6
0
        protected override void Execute(CodeActivityContext context)
        {
            ITracingService      tracing         = context.GetExtension <ITracingService>();
            IWorkflowContext     workflowContext = context.GetExtension <IWorkflowContext>();
            IOrganizationService service         = context.GetExtension <IOrganizationServiceFactory>().CreateOrganizationService(workflowContext.InitiatingUserId);

            FuncLibrary aux = new FuncLibrary();
            find_marketingautomationintegration mailChimpObj = aux.GetMailchimpInfo(service);

            Apihelper.InitializeClient(mailChimpObj.find_MailChimpIntegration);
            ApiRoot root = new ApiRoot();

            string[] server = mailChimpObj.find_MailChimpIntegration.Split('-');

            Campaign    campaign = service.Retrieve(Campaign.Get(context).LogicalName, Campaign.Get(context).Id, new ColumnSet("name", "find_mailchimpcampaignid")).ToEntity <Campaign>();
            find_metric metric   = GetMetricByCampaign(service, campaign);
            List <find_metricdetails> metricDetailsList = GetMetricDetailsByMetric(service, metric);

            ProcessAtivitiesByMember(service, metricDetailsList, aux, root, server[1], campaign, metric, tracing);
        }
예제 #7
0
        private List <find_metricdetails> GetMetricDetailsByMetric(IOrganizationService service, find_metric metric)
        {
            QueryExpression QEfind_metricdetails = new QueryExpression("find_metricdetails");

            QEfind_metricdetails.ColumnSet.AddColumns("find_name", "find_lookupcontact", "find_lookupaccount", "find_lookuplead", "find_numberclick", "find_numberopens");
            QEfind_metricdetails.Criteria.AddCondition("find_metric", "find_metricid", ConditionOperator.Equal, metric.Id);
            QEfind_metricdetails.AddLink("find_metric", "find_lookupmetric", "find_metricid");

            return(service.RetrieveMultiple(QEfind_metricdetails).Entities.Select(entity => entity.ToEntity <find_metricdetails>()).ToList());
        }
예제 #8
0
        private void UpdateMetric(IOrganizationService service, ApiRoot root, Campaign campaign, find_metric metric, ITracingService tracing)
        {
            Reports report = GetReportOfMetric(root, campaign, tracing);

            metric.find_Bounced              = report.results[0].stats.bounces;
            metric.find_PeopleWhoClicked     = report.results[0].stats.unique_clicks;
            metric.find_PeopleWhoOpened      = report.results[0].stats.unique_opens;
            metric.find_SuccessfulDeliveries = report.results[0].stats.delivered - report.results[0].stats.bounces;
            metric.find_Send             = report.results[0].stats.delivered;
            metric.find_TotalClicks      = report.results[0].stats.clicks;
            metric.find_TotalTimesOpened = report.results[0].stats.opens;
            metric.find_UnOpened         = report.results[0].stats.delivered - report.results[0].stats.unique_opens;
            metric.find_UnSubscribers    = report.results[0].stats.unsubscribes;
            metric.find_ForwardCount     = 0;
            metric.find_ForwardsOpens    = 0;

            service.Update(metric);
        }
예제 #9
0
        private void ProcessAtivitiesByMember(IOrganizationService service, List <find_metricdetails> metricDetailsList, FuncLibrary aux, ApiRoot root, string server, Campaign campaign, find_metric metric, ITracingService tracing)
        {
            bool anyUpdate = false;

            foreach (find_metricdetails metricDetails in metricDetailsList)
            {
                int      numOpens = 0, numClicks = 0;
                string   md5mail    = aux.GetMailMd(GetMailFromMember(service, metricDetails));
                DateTime?lastUpdate = GetLastUpdateByMetricDetail(service, metricDetails);
                List <Class.Reports.Activity> activitiesList = GetlastActivityByMetricDetail(root, server, campaign, md5mail).Activity;

                if (activitiesList.Count != 0 && lastUpdate == null)
                {
                    ProcessAtivities(service, metricDetails, numOpens, numClicks, activitiesList, tracing);
                    anyUpdate = true;
                }
                else if (activitiesList.Count != 0 && GetDateTimeFromLastActivity(activitiesList, (DateTime)lastUpdate).Count != 0)
                {
                    ProcessAtivities(service, metricDetails, numOpens, numClicks, GetDateTimeFromLastActivity(activitiesList, (DateTime)lastUpdate), tracing);
                    anyUpdate = true;
                }
                UpdateOpensAndClicksMetricDetails(service, metricDetails, numOpens, numClicks);
            }

            if (anyUpdate)
            {
                UpdateMetric(service, root, server, campaign, metric);
            }
        }
예제 #10
0
        private void UpdateMetric(IOrganizationService service, ApiRoot root, string server, Campaign campaign, find_metric metric)
        {
            Report report = GetReportOfMetric(root, server, campaign);

            metric.find_Bounced              = report.bounces.hard_bounces + report.bounces.soft_bounces;
            metric.find_PeopleWhoClicked     = report.clicks.unique_clicks;
            metric.find_PeopleWhoOpened      = report.opens.unique_opens;
            metric.find_SuccessfulDeliveries = report.emails_sent - (report.bounces.hard_bounces + report.bounces.soft_bounces);
            metric.find_Send             = report.emails_sent;
            metric.find_TotalClicks      = report.clicks.clicks_total;
            metric.find_TotalTimesOpened = report.opens.opens_total;
            metric.find_UnOpened         = report.emails_sent - report.opens.unique_opens;
            metric.find_UnSubscribers    = report.unsubscribed;
            metric.find_ForwardCount     = report.forwards.forwards_count;
            metric.find_ForwardsOpens    = report.forwards.forwards_opens;

            service.Update(metric);
        }