事件系统处理程序代码
[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);
}
}
Run Code Online (Sandbox Code Playgroud)
使用上面的代码,当发布多个页面并且Event System即将阻止其中一个(通过抛出异常)时,所有页面都被有效地阻止发布."生成可发布内容时忽略失败"复选框不会影响此行为.
如何防止任何给定页面发布但仍允许发布所有其他页面?
编辑
根据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();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,有些反对意见(或者说是后续问题):
编辑2
在研究标准解析器的实现之后:
您不应该在事件系统中执行此操作,而是在自定义解析程序中执行此操作.这是一段代码,用于确定将项目放入发布队列时应有效发布哪些页面/组件.在这里,您可以过滤掉您不想发布的任何页面或组件.
请参阅如何使用Tridion Resolver从发布中删除项目?.
| 归档时间: |
|
| 查看次数: |
509 次 |
| 最近记录: |