我正在尝试为奥地利网站配置EXM根目录,以使用de-AT语言版本创建新消息,并将 de-AT 语言选为默认语言。
我的问题是:如何在创建新邮件时将EXM配置为自动为de-AT创建语言版本?
到目前为止我做了什么......
我设法通过在消息上下文中使用 语言 - 选择目标语言 字段来自动选择de-AT > 标准字段的部分 - 但创建的实际消息项不包含de-AT版本 - 我在尝试保存消息时收到错误。
错误消息: 无法找到已编辑的语言版本“德语(奥地利)”。它可能已被其他用户删除。
从这个screnshot中可以看出,当我打开EXM并创建新消息时,将自动选择de-AT语言版本。问题是该消息没有分配de-AT语言版本,因此它不允许保存该项目。
答案 0 :(得分:1)
EXM中的模板与Sitecore中的任何位置一样。您的电子邮件应该有以下语言版本:
答案 1 :(得分:0)
没有一个'技巧'我在EXM中创建新消息时自动添加了新的语言版本,因此我添加了一个新的OnItemSave
事件,该事件检查Item是否来自基本消息模板并创建新的语言版本 - 基于自己的业务逻辑。
<强>配置:强>
<configuration xmlns:x="http://www.sitecore.net/xmlconfig/">
<sitecore>
<events>
<event name="item:added">
<handler type="ABC.SitecoreExtensions.Handlers.EmailExperienceExtensions, ABC" method="OnItemAdded" />
</event>
</events>
</sitecore>
<强>代码强>
namespace ABC.SitecoreExtensions.Handlers
{
class EmailExperienceExtensions
{
readonly Sitecore.Data.Database masterDb = Sitecore.Configuration.Factory.GetDatabase("master");
private const string EXM_BASE_EMAIL_TEMPLATE_ID = "{A0EA9681-5C86-43AB-80F7-C522DADF6F12}";
public void OnItemAdded(object sender, EventArgs args)
{
Assert.ArgumentNotNull((object)args, "args");
Item obj1 = Event.ExtractParameter(args, 0) as Item;
if (obj1 == null)
return;
if (obj1.IsDerived(new Sitecore.Data.ID(EXM_BASE_EMAIL_TEMPLATE_ID )))
{
//logic to determine the context site and to pickup the language
....
if (rootItem == null)
{
return;
}
var siteContext = SiteContext.GetSite(rootItem.Name);
var lang = LanguageManager.GetLanguage(siteContext.Language);
Item ca = masterDb.GetItem(obj1.Paths.FullPath, lang);
using (new Sitecore.SecurityModel.SecurityDisabler())
{
try
{
if (0 == ca.Versions.Count)
{
ca.Versions.AddVersion();
}
}
catch (Exception ex)
{
// catch exception
}
}
}
}
}
}