Поставщик профиля вызова по имени в профиле конфигурации
У меня есть устаревшая система (sitecore 6.1), в которой уже есть один провайдер профилей в качестве профиля по умолчанию для раздела администратора.
Теперь мне нужно внедрить другого настроенного поставщика профиля SQL (в другой таблице) для обычного пользователя.
Но мой вопрос: как система дозирования знает, какого поставщика профиля использовать в коде?
Могу ли я сделать что-то подобное:
System.Web.Security.Membership.Providers[providerString];
Так что я могу позвонить в мой код соответствующим образом в своем коде.
Или что было бы лучшей практикой в этом случае.
Я потратил впустую 1 час, пытаясь пройти через документацию sitecore, но там не так много доступного.
1 ответ
Вот код, который я недавно сделал, чтобы настроить некоторые пользовательские профили для клиента с помощью диспетчера кампании электронной почты. Этот код использует некоторые классы, специфичные для 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));
}
}
}