【问题标题】:Where To Intercept Item Locking/Editing In Sitecore在 Sitecore 中拦截项目锁定/编辑的位置
【发布时间】:2012-02-15 21:10:45
【问题描述】:

是否有我可以添加的管道和/或要拦截的事件,仅当外部系统中的锁定可能时才允许我设置项目的锁定? [主要对媒体库中的此功能感兴趣]

我们目前正在寻求提供与 Sitecore 项目同步的功能,并且我正在通过一个用例清单来确定可行性。锁定物品目前需要锁定外地系统中的物品。

我阅读了 John West 的 blog post 解释了项目更新的拦截。

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

这对我以后很有用,因为我可能由于外部系统中的错误而需要阻止项目的保存,但在锁定/编辑开始时它没有说明任何内容。

我还在 John 的 Important Pipelines 博客文章中指出,没有“uiEditItem”或任何似乎注意到带有项目编辑的管道的内容。

【问题讨论】:

    标签: sitecore sitecore6 sitecore-media-library


    【解决方案1】:

    您可以适当地将自己的处理器放置在 saveUI 部分中的“Sitecore.Pipelines.Save.CheckItemLock”之前。

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

    下面是一些示例代码:

    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();
            }
        }
    }
    

    这里是你可以注册你的处理器的地方:

    <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" />
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多