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); }
private static void MakeContactKnown(IXdbContext client, Sitecore.XConnect.Contact contact) { if (contact.IsKnown) { return; } client.AddContactIdentifier(contact, new ContactIdentifier("exm-known", Guid.NewGuid().ToString("N"), ContactIdentifierType.Known)); }
public void UpdateContactFacets_ShouldUpdateTracker(ITracker tracker, Contact contact, Sitecore.XConnect.Contact xdbContact, IXdbContextFactory xdbContextFactory, IXdbContext xdbContext, IContactManagerService contactManager, IContactFacetUpdater facetUpdater, string source, string identifier) { // Arrange contact.Identifiers.Returns(new List <ContactIdentifier> { new ContactIdentifier(source, identifier, ContactIdentificationLevel.Known) }.AsReadOnly()); tracker.Contact.Returns(contact); xdbContext.GetAsync <Sitecore.XConnect.Contact>(Arg.Any <IdentifiedContactReference>(), Arg.Any <ContactExpandOptions>()).Returns(Task.FromResult(xdbContact)); xdbContextFactory.CreateContext().Returns(xdbContext); var userProfile = Substitute.For <Sitecore.Security.UserProfile>(); facetUpdater.SetFacets(userProfile, xdbContact, xdbContext).Returns(true); var facetsService = new UpdateContactFacetsService(xdbContextFactory, contactManager, new List <IContactFacetUpdater> { facetUpdater }); // Act using (new TrackerSwitcher(tracker)) { facetsService.UpdateContactFacets(userProfile); } // Assert contactManager.Received(1).SaveContact(); contactManager.Received(1).ReloadContact(); }