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);
            }
        }
Beispiel #2
0
        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);
            }
        }