public virtual async Task <bool> SubscribeContact(string email, IEnumerable <Guid> listIds) { try { using (var client = SitecoreXConnectClientConfiguration.GetClient()) { var contact = await client.GetAsync(new IdentifiedContactReference(Constants.XConnectSourceName, email), new ExpandOptions(ListSubscriptions.DefaultFacetKey)).ConfigureAwait(false); var listSubscriptions = contact.ListSubscriptions() ?? new ListSubscriptions(); foreach (var listId in listIds) { if (listSubscriptions.Subscriptions.Any(s => s.ListDefinitionId == listId)) { continue; } var subscription = new ContactListSubscription(DateTime.UtcNow, true, listId); listSubscriptions.Subscriptions.Add(subscription); } client.SetListSubscriptions(contact, listSubscriptions); await client.SubmitAsync(); return(true); } } catch (Exception) { return(false); } }
public void AddContactToList(Guid listId) { if (Tracker.Current == null) { Tracker.StartTracking(); } try { using (XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient()) { var contact = client.Get <Contact>(GetIdentifier(), new Sitecore.XConnect.ContactExpandOptions("ListSubscriptions")); if (contact == null) { SaveContact(); contact = client.Get <Contact>(GetIdentifier(), new Sitecore.XConnect.ContactExpandOptions("ListSubscriptions")); } if (contact != null) { if (contact.Identifiers.All(x => x.Source != "ListManager")) { client.AddContactIdentifier(contact, new ContactIdentifier("ListManager", Guid.NewGuid().ToString(), ContactIdentifierType.Known)); } var subscriptions = contact.ListSubscriptions() ?? new ListSubscriptions(); var subscription = new ContactListSubscription(DateTime.UtcNow, true, listId); subscriptions.Subscriptions.Add(subscription); client.SetListSubscriptions(contact, subscriptions); } } } catch (XdbExecutionException ex) { // Manage conflicts / exceptions Sitecore.Diagnostics.Log.Error("Error Setting List Subscription", ex, this); } }