Поставщик профиля вызова по имени в профиле конфигурации - PullRequest
0 голосов
/ 27 февраля 2012

У меня есть устаревшая система (sitecore 6.1), в которой уже есть один провайдер профилей на плате в качестве профиля по умолчанию для раздела администратора.

Теперь мне нужно внедрить другого настроенного провайдера профилей SQL (в другой таблице).) для обычного пользователя.

Но мой вопрос: как система дозирования узнает, какого поставщика профиля использовать в коде?

Могу ли я сделать что-то похожее на:

System.Web.Security.Membership.Providers[providerString];

Чтобы я мог соответствующим образом вызывать провайдера настроенного профиля в своем коде.

Или, что было бы лучше в этом случае.

Я потратил впустую, как 1 час, пытаясь пройти через sitecoreдокументы, но там не так много.

1 Ответ

0 голосов
/ 13 марта 2012

Вот код, который я недавно сделал, чтобы настроить некоторые пользовательские профили для клиента с помощью диспетчера кампании электронной почты. Этот код использует некоторые классы, специфичные для ECM, создает нового пользователя, инициализирует класс профиля и затем назначает этот профиль новому пользователю. Затем он устанавливает некоторые пользовательские свойства для только что созданного пользователя. Он показывает вам, как вызвать профиль на основе пользователя, а также назначить профиль для использования для этого пользователя. Это может помочь или, возможно, помочь кому-то еще.

   public static void Process(List<Subscriber> userItems, Item targetAudienceDefinitionItem)
    {
        foreach (Subscriber user in userItems)
        {
            // you can also just pass it the id of the target audience as a string
            Sitecore.Modules.EmailCampaign.TargetAudienceBase target = Sitecore.Modules.EmailCampaign.TargetAudience.FromItem(targetAudienceDefinitionItem);

            string campaignname = target.ManagerRoot.Settings.CommonDomain;
            string realUsername = campaignname + "\\" + user.UserName;

            using (new SecurityDisabler())
            {
                User newUser;
                if (!Sitecore.Security.Accounts.User.Exists(realUsername))
                {
                    // create a new user and assign it to the email domain specified in the manager root item
                    newUser = Sitecore.Security.Accounts.User.Create(campaignname + "\\" + user.UserName, System.Web.Security.Membership.GeneratePassword(8,1));
                }
                else
                    // get back the existing user
                    newUser = User.FromName(realUsername, false);

                // get back the current user profile  
                UserProfile subscriber = newUser.Profile;

                // reset the profile to be the profile specified in the manager root
                subscriber.ProfileItemId = target.ManagerRoot.Settings.SubscriberProfile;
                subscriber.Save();

                // built in properties are set like this
                subscriber.Email = user.Email;

                // set custom property value 
                subscriber["Address"] = user.Address;


                // or long method 
                subscriber.SetCustomProperty("Address", user.Address);

                subscriber.Save();
                // now subscribe the user to the target audience subscriber list
                target.Subscribe(Contact.FromName(newUser.Name));

            }
        }
    }
...