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); }
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); }
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); }
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); }
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); }
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); }
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()); }
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); }
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); } }
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); }