4

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

我正在考虑使用 PublisherException 而不是通用异常。

问题是我不知道 LocalizableMessage 的资源名称。有任何想法吗?

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!"));
} 
4

2 回答 2

7

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

就像 Puntero 提到的那样,如果您想从 Publish Transaction 中删除一个项目,这就是Custom Resolver的用武之地。从这里您无法与 Publish Transaction 进行通信,但您可以访问 Tridion Logger (eventlog):

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

关于事件系统中的 LocalizableMessage,您应该能够执行以下操作:

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

resourceName 指向您在项目中拥有的字符串资源的名称。

于 2012-11-28T12:21:10.663 回答
3

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

我试图发出警告以提醒用户有一项未解决,但失败了。但这里可能有一些对您有用的提示/想法:在 SDL Tridion 2011 发布期间提高“警告”状态

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

至于消息?您想显示什么信息?

于 2012-11-28T12:06:36.083 回答