Tridion 2011事件系统如何阻止单个页面的发布?
事件系统处理程序代码:Tridion 2011事件系统如何阻止单个页面的发布?,tridion,Tridion,事件系统处理程序代码: [TcmExtension("My Handler")] public sealed class EventSystem : TcmExtension { public EventSystem() { EventSystem.Subscribe<Page, PublishEventArgs>((page, e, phases) => { if (shouldTerminatePublishing(p
[TcmExtension("My Handler")]
public sealed class EventSystem : TcmExtension
{
public EventSystem()
{
EventSystem.Subscribe<Page, PublishEventArgs>((page, e, phases) => {
if (shouldTerminatePublishing(page))
{
throw new Exception(ex, page);
}
}, EventPhases.Initiated, EventSubscriptionOrder.Normal);
}
}
[TcmExtension(“我的处理程序”)]
公共密封类事件系统:TcmExtension
{
公共事件系统()
{
EventSystem.Subscribe((第页,e,阶段)=>{
如果(应终止发布(第页))
{
抛出新异常(例如,第页);
}
},EventPhases.Initiated,EventSubscriptionOrder.Normal);
}
}
使用上面的代码,当发布多个页面时,事件系统只会阻止其中一个页面(通过抛出异常),那么所有页面也会被有效地阻止发布。“生成可发布内容时忽略失败”复选框不影响此行为
如何阻止任何给定页面的发布,但仍允许发布所有其他页面
编辑
根据Quirijn的建议更新代码:
public class MyResolver: IResolver
{
public void Resolve(
IdentifiableObject item,
ResolveInstruction instruction,
PublishContext context,
ISet<ResolvedItem> resolvedItems)
{
var page = item as Page;
if (null != page && instruction.Purpose == ResolvePurpose.Publish)
{
try
{
// Evaluate whether publishing is allowed
}
catch (Exception ex)
{
resolvedItems.Clear();
}
}
}
}
公共类MyResolver:IResolver
{
公共无效解决方案(
可识别的对象项,
解析指令指令,
出版语境,
ISet(解析数据集)
{
var page=项目作为页面;
if(null!=页面和指令.Purpose==解析目的.Publish)
{
尝试
{
//评估是否允许发布
}
捕获(例外情况除外)
{
resolvedItems.Clear();
}
}
}
}
迄今为止的一些反对意见(或者更确切地说是后续问题):
您不应该在事件系统中执行此操作,而应该在自定义解析器中执行此操作。这是一段代码,执行该代码可以确定在将项目放入发布队列时应有效发布哪些页面/组件。 在这里,您可以筛选出不希望发布的任何页面或组件 看