是否有我可以添加的管道和/或拦截事件,只有在外国系统中可以锁定时才允许我设置项目的锁定? [主要对媒体库中的此功能感兴趣
我们目前正在寻求为Sitecore项目提供同步功能,并且我正在运行用例清单以确定可行性。锁定项目当前需要锁定外部系统中的项目。
我读了John West的blog post解释截取项目更新。
如果您需要能够阻止保存操作,请考虑saveUI管道,项目:保存事件或字段验证器。如果您需要阻止用户界面中指示Sitecore已保存所选项目的视觉效果,请考虑saveUI管道或字段验证器。
这对我以后很有用,因为外部系统中的错误我可能会阻止项目的保存,但是当锁定/编辑开始时它没有说明任何内容。
我还在约翰的Important Pipelines博客文章中指出,没有“uiEditItem”或任何似乎注意到项目编辑的管道。
答案 0 :(得分:2)
您可以在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" />