public override void ExecuteOption(OptionReport report) { string urlLoginName = _databaseUpdateMailrelayFromContact.urlLoginName; int pageSize = _databaseUpdateMailrelayFromContact.pageSize; Guid? contactId = _databaseUpdateMailrelayFromContact.contactId; DatabaseUrlLogin login = DatabaseUrlLogin.GetUrlLogin(Connection, urlLoginName); DynamicsCrmConnection dynamicsCrmConnection = DynamicsCrmConnection.GetConnection(login.Url, login.Username, login.Password); PagingInformation pagingInformation = new PagingInformation(); List <MailrelayInformation> mailrelayInformations = new List <MailrelayInformation>(); UpdateReport <int> intReport = new UpdateReport <int>(); while (pagingInformation.FirstRun || pagingInformation.MoreRecords) { mailrelayInformations = MailrelayInformation.GetMailrelayFromContact(dynamicsCrmConnection, Config.GetResourcePath, pagingInformation, pageSize, contactId); mailrelayInformations.ForEach(information => UpdateIfNeeded(dynamicsCrmConnection, information, intReport)); } Log.Write(Connection, intReport.AsLogText("UpdateMailrelayFromContact"), typeof(UpdateMailrelayFromContact), DataLayer.MongoData.Config.LogLevelEnum.OptionReport); report.Success = true; return; }
public void SetUp() { Connection.CleanDatabase(); if (Config.Exists(Connection) == false) { Config config = new Config() { EmailPassword = "******", Email = "testEmail", EmailSmtpPort = 0, EmailSmtpHost = "testHost", }; config.Insert(Connection); } UrlLogin urlLogin = UrlLogin.GetUrlLogin(Connection, "test"); DynamicsCrmConnection = DynamicsCrmConnection.GetConnection(urlLogin.Url, urlLogin.Username, urlLogin.Password); _mailrelayConnectionTester = new MailrelayConnectionTester(); _dynamicsCrmConnectionTester = new DynamicsCrmConnectionTester(); _random = new Random(); }
public override void ExecuteOption(OptionReport report) { string urlLoginName = _databaseExportContactToMailrelay.urlLoginName; Guid?crmListId = _databaseExportContactToMailrelay.listId; DatabaseUrlLogin login = DatabaseUrlLogin.GetUrlLogin(Connection, urlLoginName); DynamicsCrmConnection dynamicsCrmConnection = DynamicsCrmConnection.GetConnection(login.Url, login.Username, login.Password); PagingInformation pagingInformation = new PagingInformation(); while (pagingInformation.FirstRun || pagingInformation.MoreRecords) { MarketingList marketingList = MarketingList.GetListForMailrelayUpdate(dynamicsCrmConnection, pagingInformation, crmListId); if (marketingList != null) { UpdateReport <Guid> result = ExportMailrelayContactFromList(dynamicsCrmConnection, marketingList); Log.Write(Connection, result.AsLogText($"ExportContactToMailrelay {marketingList.new_mailrelaygroupid.Value}"), typeof(ExportContactToMailrelay), DataLayer.MongoData.Config.LogLevelEnum.OptionReport); } } report.Success = true; return; }
public void SetUp() { MongoConnection connection = MongoConnection.GetConnection("test"); UrlLogin login = UrlLogin.GetUrlLogin(connection, "test"); _connection = DynamicsCrmConnection.GetConnection(login.Url, login.Username, login.Password); }
private UpdateReport <int> AddOrRemoveMembersFromMailrelayGroup(DynamicsCrmConnection dynamicsCrmConnection, MarketingList marketingList, int groupId) { List <KeyValueEntity <Guid, int?> > crmIdsAndSubscriberIds = marketingList.CrmIdsAndSubscriberIds; List <getSubscribersReply> subscribersToRemoveFromMailrelay = new List <getSubscribersReply>(); Subscriber subscriber = new Subscriber(_mailrelayConnection); getSubscribers getSubscribersFunction = new getSubscribers() { groups = new List <int>() { groupId }, }; IEnumerable <getSubscribersReply> subscribersInMailrelay = subscriber.GetMailrelaySubscribers(getSubscribersFunction, 100); foreach (getSubscribersReply currentInMailrelay in subscribersInMailrelay) { int removed = crmIdsAndSubscriberIds.RemoveAll(idInCrm => currentInMailrelay.id == idInCrm.value.ToString()); if (removed == 0) { subscribersToRemoveFromMailrelay.Add(currentInMailrelay); } } UpdateReport <int> report = new UpdateReport <int>(); RemoveFromMailrelayGroup(report, subscribersToRemoveFromMailrelay, subscriber, groupId); AddToMailrelayGroup(dynamicsCrmConnection, report, subscriber, crmIdsAndSubscriberIds, groupId); return(report); }
private UpdateReport <int> UpdateMailrelayGroupFromList(DynamicsCrmConnection dynamicsCrmConnection, MarketingList marketingList) { int?id = marketingList.new_mailrelaygroupid; if (id.HasValue == false) { id = Subscriber.CreateGroup(_mailrelayConnection, $"crm_{marketingList.listname}", "crm kontrolleret gruppe"); marketingList.new_mailrelaygroupid = id; marketingList.UpdateMailrelaygroupid(dynamicsCrmConnection); } bool needsUpdate = marketingList.RecalculateMarketingListCheck(); if (needsUpdate == false) { return(new UpdateReport <int>()); } UpdateReport <int> report = AddOrRemoveMembersFromMailrelayGroup(dynamicsCrmConnection, marketingList, id.Value); marketingList.UpdateMailrelaycheck(dynamicsCrmConnection); return(report); }
public override void ExecuteOption(OptionReport report) { string urlLoginName = _databaseCreateImportFromStub.urlLoginName; DatabaseSchedule ImportFromStubSchedule = _databaseCreateImportFromStub.ImportFromStubSchedule; DatabaseUrlLogin login = DatabaseUrlLogin.GetUrlLogin(Connection, urlLoginName); DynamicsCrmConnection dynamicsCrmConnection = DynamicsCrmConnection.GetConnection(login.Url, login.Username, login.Password); List <Campaign> campaigns = Campaign.ReadCampaignsToImportStubDataTo(dynamicsCrmConnection); foreach (Campaign campaign in campaigns) { DatabaseWebCampaign webCampaign = ReadOrCreateWebCampaign(campaign); bool importExists = DatabaseImportFromStub.ReadByWebCampaign(Connection, webCampaign).Any(); if (importExists == false) { DatabaseImportFromStub.Create(Connection, webCampaign._id, urlLoginName, campaign.name, ImportFromStubSchedule); } } report.Success = true; return; }
public void TestFixtureSetUp() { _mongoConnection = MongoConnection.GetConnection("test"); _urlLogin = UrlLogin.GetUrlLogin(_mongoConnection, "test"); _dynamicsCrmConnection = DynamicsCrmConnection.GetConnection(_urlLogin.Url, _urlLogin.Username, _urlLogin.Password); _config = Config.GetConfig(_mongoConnection); _mailrelayConnection = new MailrelayConnection(_config.MailrelayUrl, _config.MailrelayApiKey); }
private MailrelayInformation GetInformationFromFetchXml(DynamicsCrmConnection dynamicsCrmConnection, DatabaseWebCampaign webCampaign, string email) { Guid campaignId = webCampaign.FormId; MailrelayInformation information = MailrelayInformation.GetMailrelayFromLead(dynamicsCrmConnection, Config.GetResourcePath, email, campaignId); return(information); }
protected void SetDynamicsCrmConnectionIfEmpty(string urlLoginName) { if (_dynamicsCrmConnection == null) { DatabaseUrlLogin login = DatabaseUrlLogin.GetUrlLogin(Connection, urlLoginName); _dynamicsCrmConnection = DynamicsCrmConnection.GetConnection(login.Url, login.Username, login.Password); } }
protected void SetDynamicsCrmConnectionIfEmpty() { if (_dynamicsCrmConnection == null) { string dynamicsCrmUrl = Config.DynamicsCrmUrl; string dynamicsCrmUsername = Config.DynamicsCrmUsername; string dynamicsCrmPassword = Config.DynamicsCrmPassword; _dynamicsCrmConnection = DynamicsCrmConnection.GetConnection(dynamicsCrmUrl, dynamicsCrmUsername, dynamicsCrmPassword); } }
private void AddToMailrelayGroup(DynamicsCrmConnection dynamicsCrmConnection, UpdateReport <int> report, Subscriber subscriber, List <KeyValueEntity <Guid, int?> > crmIdsAndSubscriberIds, int groupInCrm) { foreach (KeyValueEntity <Guid, int?> idPair in crmIdsAndSubscriberIds) { MailrelayInformation mailrelayInformation = MailrelayInformation.GetMailrelayFromContact(dynamicsCrmConnection, Config.GetResourcePath, new PagingInformation(), 1, idPair.key).Single(); UpdateResultEnum result = subscriber.UpdateIfNeeded(idPair.value.Value, mailrelayInformation.fullname, mailrelayInformation.emailaddress1, mailrelayInformation.GetCustomFields(), groupInCrm); report.CollectUpdate(result, idPair.value.Value); } }
public override void ExecuteOption(OptionReport report) { string urlLoginName = _databaseMaterialeBehovAssignment.urlLoginName; int updateProgressFrequency = _databaseMaterialeBehovAssignment.updateProgressFrequency; DatabaseUrlLogin login = DatabaseUrlLogin.GetUrlLogin(Connection, urlLoginName); DynamicsCrmConnection dynamicsCrmConnection = DynamicsCrmConnection.GetConnection(login.Url, login.Username, login.Password); Materiale materiale = Materiale.ReadCalculationNeed(dynamicsCrmConnection, Config.GetResourcePath); if (materiale == null) { report.Success = true; return; } materiale.FindBehovDefinitioner(Config.GetResourcePath); int total = CountTotalAccountsToUpdate(dynamicsCrmConnection, materiale); int staleMaterialeBehovCount = materiale.CountStaleMaterialeBehov(Config.GetResourcePath); total += staleMaterialeBehovCount; materiale.new_beregningsstatus = 0; materiale.Update(); materiale.RemoveStaleMaterialeBehov(Config.GetResourcePath, currentProgress => updateProgress(materiale, currentProgress, total), updateProgressFrequency); int progress = staleMaterialeBehovCount; int materialeAddedCurrent = -1; MaterialeProcessState state = new MaterialeProcessState(); state.pagingInformation = new PagingInformation(); state.owningbusinessunit = materiale.owningbusinessunitGuid.Value; while (materialeAddedCurrent != 0) { materiale.AddMissingMateriale(state, Config.GetResourcePath); materialeAddedCurrent = state.AccountsProcessed; progress += materialeAddedCurrent; updateProgress(materiale, progress, total); } materialeAddedCurrent = -1; materiale.behovsberegning = Materiale.behovsberegningEnum.Afsluttet; materiale.new_beregningsstatus = null; materiale.Update(); report.Success = true; return; }
public override void ExecuteOption(OptionReport report) { string urlLoginName = _databaseImportFromStub.urlLoginName; DatabaseUrlLogin login = DatabaseUrlLogin.GetUrlLogin(Connection, urlLoginName); DynamicsCrmConnection dynamicsCrmConnection = DynamicsCrmConnection.GetConnection(login.Url, login.Username, login.Password); DatabaseWebCampaign webCampaign = DatabaseWebCampaign.ReadByIdBytesSingleOrDefault(Connection, _databaseImportFromStub.WebCampaignIdValue()); DatabaseWebCampaign.CollectTypeEnum collectType; DatabaseStub stub; if (webCampaign == null) { collectType = DatabaseWebCampaign.CollectTypeEnum.Lead; stub = DatabaseStub.ReadFirst(Connection); } else { collectType = webCampaign.CollectType; stub = DatabaseStub.ReadFirst(Connection, webCampaign); } if (stub == null) { report.Success = true; return; } try { ImportStub(dynamicsCrmConnection, stub, webCampaign, collectType); stub.Delete(Connection); report.Success = true; return; } catch (Exception exception) { Log.Write(Connection, exception.Message, typeof(ImportFromStub), exception.StackTrace, DataLayer.MongoData.Config.LogLevelEnum.OptionError); stub.ImportAttempt++; stub.Update(Connection); report.Success = false; return; } }
private void UpdateIfNeeded(DynamicsCrmConnection dynamicsCrmConnection, MailrelayInformation information, UpdateReport <int> report) { bool needsUpdate = information.RecalculateContactCheck(); int id = information.new_mailrelaysubscriberid.Value; if (needsUpdate == false) { report.CollectUpdate(UpdateResultEnum.AlreadyUpToDate, id); return; } information.UpdateContactMailrelaycheck(dynamicsCrmConnection); Subscriber subscriber = new Subscriber(_mailrelayConnection); UpdateResultEnum result = subscriber.UpdateIfNeeded(id, information.fullname, information.emailaddress1, information.GetCustomFields()); report.CollectUpdate(result, id); }
private int CountTotalAccountsToUpdate(DynamicsCrmConnection dynamicsCrmConnection, Materiale materiale) { int total = 0; if (materiale.BehovDefinitioner.Any(definition => definition.behovtype == MaterialeBehovDefinition.behovtypeEnum.ForventetAntalIndsamlere2016)) { total += Account.CountForventetAntalIndsamlere2016(dynamicsCrmConnection, Config.GetResourcePath); } if (materiale.BehovDefinitioner.Any(definition => definition.behovtype == MaterialeBehovDefinition.behovtypeEnum.Indsamlingshjaelper)) { total += Account.CountIndsamlingshjaelper(dynamicsCrmConnection, Config.GetResourcePath); } if (materiale.BehovDefinitioner.Any(definition => definition.behovtype == MaterialeBehovDefinition.behovtypeEnum.Indsamlingssted)) { total += Account.CountIndsamlingssteder(dynamicsCrmConnection, Config.GetResourcePath); } return(total); }
private UpdateResultEnum AddToMailrelay(DynamicsCrmConnection dynamicsCrmConnection, MailrelayInformation mailrelayInformation, int groupId) { if (mailrelayInformation.new_mailrelaysubscriberid != null) { return(UpdateResultEnum.AlreadyUpToDate); } Subscriber subscriber = new Subscriber(_mailrelayConnection); try { getSubscribersReply reply = subscriber.GetMailrelaySubscribers(mailrelayInformation.emailaddress1); if (reply == null) { mailrelayInformation.new_mailrelaysubscriberid = subscriber.AddNewSubscriber(mailrelayInformation.fullname, mailrelayInformation.emailaddress1, new List <int>() { groupId }, mailrelayInformation.GetCustomFields()); } else { reply.groups.Add(groupId.ToString()); subscriber.UpdateFromReply(reply); mailrelayInformation.new_mailrelaysubscriberid = int.Parse(reply.id); } } catch (Exception exception) { Log.Write(Connection, exception.Message, typeof(ExportContactToMailrelay), exception.StackTrace, DataLayer.MongoData.Config.LogLevelEnum.OptionError); return(UpdateResultEnum.Failed); } mailrelayInformation.UpdateContactMailrelaySubscriberid(dynamicsCrmConnection); return(UpdateResultEnum.Updated); }
private UpdateReport <Guid> ExportMailrelayContactFromList(DynamicsCrmConnection dynamicsCrmConnection, MarketingList marketingList) { if (marketingList.new_mailrelaygroupid.HasValue == false) { marketingList.new_mailrelaygroupid = Subscriber.CreateGroup(_mailrelayConnection, $"crm_{marketingList.listname}", "crm kontrolleret gruppe"); marketingList.UpdateMailrelaygroupid(dynamicsCrmConnection); } IEnumerable <Guid> contactIdsToUpdate = marketingList.ContentIdsForNonMailrelaySubscribers; UpdateReport <Guid> updateReport = new UpdateReport <Guid>(); foreach (Guid contactId in contactIdsToUpdate) { MailrelayInformation mailrelayInformation = MailrelayInformation.GetInformationNotInMailrelayFromContact(dynamicsCrmConnection, Config.GetResourcePath, contactId); UpdateResultEnum result = AddToMailrelay(dynamicsCrmConnection, mailrelayInformation, marketingList.new_mailrelaygroupid.Value); updateReport.CollectUpdate(result, contactId); } return(null); }
public override void ExecuteOption(OptionReport report) { string urlLoginName = _databaseExposeData.urlLoginName; string fetchXmlPath = _databaseExposeData.fetchXmlPath; string exposePath = _databaseExposeData.exposePath; string exposeName = _databaseExposeData.exposeName; DatabaseUrlLogin login = DatabaseUrlLogin.GetUrlLogin(Connection, urlLoginName); DynamicsCrmConnection dynamicsCrmConnection = DynamicsCrmConnection.GetConnection(login.Url, login.Username, login.Password); string fullFetchXmlPath = Config.GetResourcePath(fetchXmlPath); string fullExposePath = Config.GetResourcePath(exposePath); List <dynamic> dataList = DynamicFetch.ReadFromFetchXml(dynamicsCrmConnection, fullFetchXmlPath, new PagingInformation()); JsonSerializerSettings settings = new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore, StringEscapeHandling = StringEscapeHandling.EscapeNonAscii, }; string json = JsonConvert.SerializeObject(dataList, Formatting.None, settings); json = json.Replace("\\r\\n", "\\n"); if (Directory.Exists(fullExposePath) == false) { Directory.CreateDirectory(fullExposePath); } File.WriteAllText(fullExposePath + "/" + exposeName, json, Encoding.UTF8); report.Success = true; return; }
private void ImportStub(DynamicsCrmConnection dynamicsCrmConnection, DatabaseStub stub, DatabaseWebCampaign webCampaign, DatabaseWebCampaign.CollectTypeEnum collectType) { List <string> keyFields; if (webCampaign == null) { keyFields = new List <string>(); } else { keyFields = webCampaign.KeyFields; } List <DatabaseStubElement> contentList = Utilities.LinqExtension.DistinctBy(stub.Contents, content => content.Key).ToList(); contentList = contentList.Where(content => content.Key != null).ToList(); Dictionary <string, string> allContent = contentList.ToDictionary(content => content.Key, content => content.Value); Dictionary <string, string> keyContent = allContent.Where(content => keyFields.Contains(content.Key)).ToDictionary(content => content.Key, content => content.Value); Contact contact = null; int?numberOfMatchingContacts = null; if (keyContent.Any()) { List <Contact> matchingContacts = Contact.ReadFromFetchXml(dynamicsCrmConnection, new List <string> { "contactid", "ownerid" }, keyContent); numberOfMatchingContacts = matchingContacts.Count; if (numberOfMatchingContacts == 1) { contact = matchingContacts.Single(); } } Lead lead = Lead.Create(dynamicsCrmConnection, allContent); Guid?owner = null; if (webCampaign != null) { lead.campaign = webCampaign.FormId; owner = webCampaign.FormOwner; } if (contact != null && owner.HasValue == false) { if (owner.HasValue == false) { owner = contact.owner; } } switch (collectType) { case DatabaseWebCampaign.CollectTypeEnum.LeadOgContactHvisContactIkkeFindes: if (contact == null && numberOfMatchingContacts == 0) { contact = Contact.Create(dynamicsCrmConnection, allContent); contact.InsertWithoutRead(); if (owner.HasValue) { contact.owner = owner; contact.Assign(); } } break; } lead.subject = _databaseImportFromStub.Name; if (contact != null) { lead.parentcontact = contact.Id; } lead.InsertWithoutRead(); if (owner.HasValue) { lead.owner = owner; lead.Assign(); } if (webCampaign != null && webCampaign.mailrelaygroupid.HasValue) { AddMailrelaySubscriberFromLead.CreateIfValid(Connection, lead.Id, $"Auto subscribe from {_databaseImportFromStub.Name}", _databaseImportFromStub.urlLoginName, lead.emailaddress1, webCampaign); } }
public override void ExecuteOption(OptionReport report) { string urlLoginName = _databaseAddMailrelaySubscriberFromLead.urlLoginName; string email = _databaseAddMailrelaySubscriberFromLead.email; Guid leadId = _databaseAddMailrelaySubscriberFromLead.leadId; DatabaseUrlLogin login = DatabaseUrlLogin.GetUrlLogin(Connection, urlLoginName); DynamicsCrmConnection dynamicsCrmConnection = DynamicsCrmConnection.GetConnection(login.Url, login.Username, login.Password); DatabaseWebCampaign webCampaign = DatabaseWebCampaign.ReadByIdBytesSingleOrDefault(Connection, _databaseAddMailrelaySubscriberFromLead.WebCampaignIdValue()); if (webCampaign == null) { Log.Write(Connection, $"Could not find campaign for {_databaseAddMailrelaySubscriberFromLead.Name}", typeof(AddMailrelaySubscriberFromLead), DataLayer.MongoData.Config.LogLevelEnum.OptionError); report.Success = false; return; } MailrelayInformation information = GetInformationFromFetchXml(dynamicsCrmConnection, webCampaign, email); if (information == null) { Log.Write(Connection, $"Information for lead {leadId} on {email} could not be found", typeof(AddMailrelaySubscriberFromLead), DataLayer.MongoData.Config.LogLevelEnum.OptionMessage); report.Success = true; return; } if (information.campaign_new_mailrelaygroupid.HasValue == false) { Log.Write(Connection, $"Subscriber not added, campaign {webCampaign.FormId} has no group", typeof(AddMailrelaySubscriberFromLead), DataLayer.MongoData.Config.LogLevelEnum.OptionMessage); report.Success = true; return; } getSubscribersReply ExistingSubscriber = GetExistingSubscribers(email); int subscriberId; if (ExistingSubscriber == null) { addSubscriber add = GetSubscriberFromFetchXml(information, email); subscriberId = SendSubscriberToMailrelay(add); } else { subscriberId = int.Parse(ExistingSubscriber.id); UdpateExistingSubscriberIfNeeded(information, ExistingSubscriber, email, subscriberId); } try { Lead.UpdateSubscriberId(dynamicsCrmConnection, leadId, subscriberId); } catch (Exception exception) { Log.Write(Connection, exception.Message, typeof(AddMailrelaySubscriberFromLead), exception.StackTrace, DataLayer.MongoData.Config.LogLevelEnum.OptionError); } report.Success = true; }