Пример 8.1. Простой способ создания списка получателей на основе членов определенной роли Sitecore?
Вопрос: Есть ли уловка "из коробки" для создания нового списка получателей для Email Experience Manager на основе участников из определенной роли Sitecore?
Я провел некоторые исследования, и ListManager в EXM (ECM) позволяет импортировать только контактный файл CSV без интеграции с модулем Sitecore UserManager.
Основываясь на этой статье: http://blog.boro2g.co.uk/sitecore-export-users-role/ можно было бы реализовать экспорт в CSV из "Члены роли" и импортировать его обратно в базу данных EXM.
2 ответа
Это можно сделать с расширением условий для менеджера списков. Предполагается, что преобразование базы данных Google Analytics из DMS в 8 прошло успешно, и у вас есть контакты-пользователь, которые ранее соответствовали вашим посетителям-пользователям. Вы можете создать "Сегментированный список" контактов, который будет соответствовать некоторой роли. Для таблицы сегментации вы должны создать новое пользовательское условие, которое будет фильтровать ваши контакты. (Логика может быть достаточно простой: вы знаете контактный адрес электронной почты, затем вы находите пользователя по этому адресу и проверяете его роли).
Сначала вам нужно добавить поле "Роль пользователя" в ваши контакты в sitecore_analytics_index. Для этого вы должны добавить новое вычисляемое поле в <fields hint="raw:AddComputedIndexField">
раздел Sitecore.ContentSearch.Lucene.Index.Analytics.config
(Я предполагаю, что вы используете Lucene).
Вот пример:
<field fieldName="Contact.ProfileProperties.UserRole" emptyString="_EMPTY_" nullValue="_NULL_" storageType="YES" indexType="UNTOKENIZED">Your.Type.Name, Your.Assembly</field>
Ваш тип должен получить роль индексируемого пользователя по идентификатору.
После этого добавьте новое условие с именем "UserRole" в /sitecore/system/Settings/Rules/Definitions/Elements/Segment Builder, где поле "Text" будет:
where the userrole [operatorid,StringOperator,,compares to] [value,,,specific userrole]
И "Тип" указывает на ваш пользовательский класс, как показано ниже:
public class UserRoleCondition<T> : TypedQueryableStringOperatorCondition<T, IndexedContact> where T : VisitorRuleContext<IndexedContact>
{
protected override Expression<Func<IndexedContact, bool>> GetResultPredicate(T ruleContext)
{
var userrole = this.Value ?? string.Empty;
return
this.GetCompareExpression(
c => (string)c[(ObjectIndexerKey)"contact.profileproperties.userrole"], userrole);
}
}
Теперь вы можете использовать новое условие роли пользователя в сегментации для своего сегментированного списка.