如何在创建新的PublisherException时获取Tridion LocalizableMessage的resourceName?

时间:2012-11-28 11:39:31

标签: tridion

当存在特定条件时,我需要停止发布页面,例如,如果页面名称包含使用事件系统的“一个”。此外,其他页面应继续发布。

我正在考虑使用PublisherException而不是一般的异常。

问题是我不知道LocalizableMessage的resourceName。有什么想法吗?

if (item.Title.ToString().Contains("one"))
{
     Localization.LocalizableMessage errResource = new Localization.LocalizableMessage("error");
     throw new PublisherException(errResource, new Exception("Can't get there from here!"));
} 

2 个答案:

答案 0 :(得分:7)

事件系统可以停止发布,但没有中间地带,当你抛出异常时,它会停止整个交易。

像Puntero提到的那样,如果你想从发布交易中删除一个项目,那就是Custom Resolver进来的地方。从这里你无法回复发布交易,但是你可以访问Tridion Logger (事件日志):

Tridion.Logging.Logger.Write("your message string", "MyResolver", LoggingCategory.General, TraceEventType.Information);

关于Event System中的LocalizableMessage,您应该能够执行以下操作:

throw new PublisherException(new LocalizableMessage(Properties.Resources.ResourceManager, "PagePublishErrorMessage"));

其中resourceName指向项目中的String资源的名称。

答案 1 :(得分:3)

我同意@Puntero,如果您希望发布操作中的其他页面通过,则应使用解析程序而不是事件处理程序。

我尝试发出警告,提醒用户一个项目未解决,但失败了。但是在这里可能会有一些很好的提示/想法:Raising a “warning” status during SDL Tridion 2011 publishing

最后,我可以获得任何工作的唯一方法是设置“允许X失败”,然后检查模板,并在那里引发错误。这将被视为渲染失败,并允许发布者转到发布事务中的下一个项目。

至于消息?你想要展示什么信息?