2012-02-15 25 views
1

有一个管道,我可以添加和/或事件进行拦截,让我来设置锁只有在外部系统的锁是可能的一个项目?如果拦截项目锁定/编辑在Sitecore的

目前,我们正在提供同步功能与Sitecore的项目,我通过使用案例清单运行,以确定可行性[主要与媒体库中的这项功能感兴趣。锁定项目目前需要锁定外部系统中的项目。

我读约翰·韦斯特的blog post解释商品更新的拦截。

如果您需要能够阻止保存操作,请考虑saveUI管道,项目:保存事件或字段验证程序。如果需要防止用户界面中显示Sitecore已保存选定项目的视觉效果,请考虑saveUI管道或字段验证程序。

这对我后来很有用,当我需要可能由于外部系统中的错误而导致保存某个项目时,但它不会在锁定/编辑开始时声明任何内容。

我还对约翰的Important Pipelines博客文章指出,没有“uiEditItem”或任何似乎注意到项目编辑管道。

回答

2

你可以propably把你自己的处理器在saveUI节“Sitecore.Pipelines.Save.CheckItemLock”之前。

在你的处理器,你可以通过调用AbortPipeline方法中止一个项目的保存。 如果你想检查保存的项目被锁定,您可以检查是否锁定字段已经改变。

下面是一些示例代码:

<processor mode="on" type="Sitecore.Pipelines.Save.ParseXml, Sitecore.Kernel" /> 
<processor mode="on" type="YourAssembly.CheckForeignLock, YourAssembly" /> 
<processor mode="on" type="Sitecore.Pipelines.Save.CheckItemLock, Sitecore.Kernel" /> 

public class CheckForeignLock { 
    protected bool UserIsTryingToLockItem(SaveArgs args) { 
     var lockfield = args.Fields.SingleOrDefault(x => x.ID == FieldIDs.Lock); 
     return lockfield != null && lockfield.OriginalValue != lockfield.Value;     
    } 
    protected bool CanLock() { 
     // your code 
    } 
    public void Process(SaveArgs args) { 
     if(UserIsTryingToLockItem(args) && !CanLock()) { 
      args.AbortPipeline(); 
     } 
    } 
} 

在这里,你可以注册你的处理器的地方

相关问题