public void UpdateOrCreateXConnectContactWithEmail(IXConnectContactWithEmail xConnectContact)
        {
            if (xConnectContact == null)
            {
                throw new ArgumentNullException(nameof(xConnectContact));
            }

            using (var client = SitecoreXConnectClientConfiguration.GetClient())
            {
                var contactReference = new IdentifiedContactReference(xConnectContact.IdentifierSource, xConnectContact.IdentifierValue);
                var contact          = client.Get(contactReference, new ContactExpandOptions(PersonalInformation.DefaultFacetKey, EmailAddressList.DefaultFacetKey));
                if (contact == null)
                {
                    var newContact = new Sitecore.XConnect.Contact(new ContactIdentifier(contactReference.Source, contactReference.Identifier, ContactIdentifierType.Known));
                    SetEmail(newContact, xConnectContact, client);
                    client.AddContact(newContact);
                    client.Submit();

                    if (Tracker.Current != null && Tracker.Current.Contact != null)
                    {
                        SaveNewContactToCollectionDb(Tracker.Current.Contact);
                    }
                }
                else
                {
                    if (contact.Emails()?.PreferredEmail.SmtpAddress == xConnectContact.IdentifierValue)
                    {
                        return;
                    }

                    SetEmail(contact, xConnectContact, client);
                    client.Submit();
                }
            }
        }
        private static void SetEmail(Sitecore.XConnect.Contact contact, IXConnectContactWithEmail xConnectContact, IXdbContext client)
        {
            if (string.IsNullOrEmpty(xConnectContact.Email))
            {
                return;
            }

            var facet = contact.Emails();

            if (facet == null)
            {
                facet = new EmailAddressList(new EmailAddress(xConnectContact.Email, false), "Preferred");
            }
            else
            {
                if (facet.PreferredEmail?.SmtpAddress == xConnectContact.IdentifierValue)
                {
                    return;
                }

                facet.PreferredEmail = new EmailAddress(xConnectContact.Email, false);
            }

            client.SetEmails(contact, facet);
        }
Exemplo n.º 3
0
 public void UpdateOrCreateContact(IXConnectContactWithEmail contact)
 {
     CheckIdentifier(contact);
     _xConnectContactRepository.UpdateOrCreateXConnectContactWithEmail(contact);
 }