当存在特定条件时,我需要停止发布页面,例如,如果页面名称包含使用事件系统的“一个”。此外,其他页面应继续发布。
我正在考虑使用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!"));
}
答案 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失败”,然后检查模板,并在那里引发错误。这将被视为渲染失败,并允许发布者转到发布事务中的下一个项目。
至于消息?你想要展示什么信息?