2012-02-15 26 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(); 
     } 
    } 
} 

在這裏,你可以註冊你的處理器的地方

相關問題