public void GetMailrelaySubscribersAlwaysIncludeGroups() { Subscriber subscriber = new Subscriber(_mailrelayConnection); getSubscribersReply reply = subscriber.GetMailrelaySubscribers("*****@*****.**"); Assert.AreEqual(1, reply.groups.Count); }
public MailrelayBoolReply UpdateFromReply(getSubscribersReply replyToUpdate) { updateSubscriber update = new updateSubscriber() { customFields = replyToUpdate.fields, email = replyToUpdate.email, name = replyToUpdate.name, groups = replyToUpdate.groups.Select(groupString => int.Parse(groupString)).ToList(), id = int.Parse(replyToUpdate.id), }; AbstractMailrelayReply reply = _mailrelayConnection.Send(update); return((MailrelayBoolReply)reply); }
private bool FindNewCustomFields(MailrelayInformation information, getSubscribersReply ExistingSubscriber, Dictionary <string, string> customFieldsResult) { Dictionary <string, string> customFieldsInInformation = information.GetCustomFields(); Dictionary <string, string> customFieldsInExistingSubscriber = ExistingSubscriber.fields; List <string> allKeys = customFieldsInInformation.Keys.Union(customFieldsInExistingSubscriber.Keys).ToList(); bool isChanged = false; foreach (string key in allKeys) { if (customFieldsInExistingSubscriber.ContainsKey(key)) { customFieldsResult.Add(key, customFieldsInExistingSubscriber[key]); continue; } isChanged = true; customFieldsResult.Add(key, customFieldsInInformation[key]); } return(isChanged); }
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 bool FindNewCustomFields(getSubscribersReply subscriberInMailrelay, Dictionary <string, string> customFieldsInCrm, Dictionary <string, string> customFieldsResult) { Dictionary <string, string> customFieldsInSubscriberInMailrelay = subscriberInMailrelay.fields; if (customFieldsInSubscriberInMailrelay == null) { customFieldsInSubscriberInMailrelay = new Dictionary <string, string>(); } List <string> allKeys = customFieldsInCrm.Keys.Union(customFieldsInSubscriberInMailrelay.Keys).ToList(); bool isChanged = false; foreach (string key in allKeys) { if (customFieldsInSubscriberInMailrelay.ContainsKey(key)) { if (customFieldsInCrm.ContainsKey(key) == false) { customFieldsResult.Add(key, customFieldsInSubscriberInMailrelay[key]); continue; } customFieldsResult.Add(key, customFieldsInCrm[key]); if (customFieldsInCrm[key] != customFieldsInSubscriberInMailrelay[key]) { isChanged = true; } continue; } isChanged = true; customFieldsResult.Add(key, customFieldsInCrm[key]); } return(isChanged); }
public UpdateResultEnum UpdateIfNeeded(int id, string fullname, string email, Dictionary <string, string> customFields, int?groupInCrm) { getSubscribersReply subscriberInMailrelay = GetMailrelaySubscribers(id); if (subscriberInMailrelay == null) { return(UpdateResultEnum.Failed); } Dictionary <string, string> customFieldsResult = new Dictionary <string, string>(); bool customFieldsChanged = FindNewCustomFields(subscriberInMailrelay, customFields, customFieldsResult); List <int> groups = subscriberInMailrelay.groups.Select(group => int.Parse(group)).ToList(); bool groupsChanged = false; if (groupInCrm.HasValue && groups.Contains(groupInCrm.Value) == false) { groups.Add(groupInCrm.Value); groupsChanged = true; } if ( customFieldsChanged == true || groupsChanged == true || fullname != subscriberInMailrelay.name || email != subscriberInMailrelay.email ) { UpdateSubscriber(id, email, customFieldsResult, groups, fullname); return(UpdateResultEnum.Updated); } return(UpdateResultEnum.AlreadyUpToDate); }
private void UdpateExistingSubscriberIfNeeded(MailrelayInformation information, getSubscribersReply ExistingSubscriber, string email, int subscriberId) { Dictionary <string, string> customFieldsResult = new Dictionary <string, string>(); bool isChanged = FindNewCustomFields(information, ExistingSubscriber, customFieldsResult); List <int> groups = ExistingSubscriber.groups.Select(group => int.Parse(group)).ToList(); if (groups.Contains(information.campaign_new_mailrelaygroupid.Value) == false) { groups.Add(information.campaign_new_mailrelaygroupid.Value); isChanged = true; } if (information.fullname != ExistingSubscriber.name) { isChanged = true; } if (isChanged) { UpdateSubscriber(email, customFieldsResult, groups, information.fullname, subscriberId); } }
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; }