2017-10-11 90 views
1

我在Sitecore中遇到了業務需求,我們不需要附加工作流的少數項目,但我們希望在編輯項目時創建新版本。如何創建沒有工作流程的sitecore項目版本?

我不能應用下面的設置,因爲它會影響所有的項目,我的工作流程將不會有用。

<setting name="RequireLockBeforeEditing" value="true"/> 

我還通過了stackoverflow question和它給了以下的解決方案,但不知道是哪個事件是應該的。

public Item StartEditing(Item item) 
{ 
    Error.AssertObject((object) item, "item"); 
    if (!Settings.RequireLockBeforeEditing || Context.User.IsAdministrator) 
    return item; 
    if (this._context.IsAdministrator || StandardValuesManager.IsStandardValuesHolder(item) || !this.HasWorkflow(item) && !this.HasDefaultWorkflow(item) || !this.IsApproved(item)) 
    return this.Lock(item); 
    Item obj = item.Versions.AddVersion(); 
    if (obj != null) 
    return this.Lock(obj); 
    else 
    return (Item) null; 
} 
+0

是否要強制新版本所有編輯人員在開始編輯項目時的一項內容?你可以看看「item:locked」事件,但是使用'ribbon> Versions> Add'按鈕還不夠嗎? –

+0

是的,我們希望在開始編輯項目時強制所有編輯者的新版本項目。不,我們不能使用功能區選項,因爲編輯人員不熟悉它。我將在項目上創建版本:鎖定事件。我也檢查show.config那裏我已經看到項目:編輯命令我們可以利用它? –

+0

我不認爲'item:edit'命令到處都是調用,例如不確定關於體驗編輯器? –

回答

1

嘗試這樣:

補丁項:保存事件:

<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/"> 
    <sitecore> 
    <events> 
     <event name="item:saved"> 
     <handler type="PersonalizationDemo.Data.Items.ItemEventHandler, PersonalizationDemo" method="OnItemSaved"/> 
     </event> 
    </events> 
    </sitecore> 
</configuration> 

實現類自定義事件處理程序:

namespace PersonalizationDemo.Data.Items 
{ 
    using Sitecore.Data.Items; 
    using Sitecore.Events; 
    using System; 

    public class ItemEventHandler 
    { 
     protected void OnItemSaved(object sender, EventArgs args) 
     { 
      if (args == null) { return; } 

      var sitecoreEventArgs = args as SitecoreEventArgs; 
      if (sitecoreEventArgs == null) { return; } 

      if (sitecoreEventArgs.Parameters.Length < 2) { return; } 

      var item = sitecoreEventArgs.Parameters[0] as Item; 
      if (item == null) { return; } 

      if (!this.ShouldItemBeProcessed(item)) { return; } 

      var itemChanges = sitecoreEventArgs.Parameters[1] as ItemChanges; 
      if (itemChanges == null) { return; } 

      if (itemChanges.FieldChanges.Contains(Sitecore.FieldIDs.Lock)) 
      { 
       var fieldChange = itemChanges.FieldChanges[Sitecore.FieldIDs.Lock]; 
       if (fieldChange.Value == "<r />") { return; } 

       this.CreateNewVersion(item); 
      } 
     } 

     protected bool ShouldItemBeProcessed(Item item) 
     { 
      // TODO implement necessary check 
      return true; 
     } 

     protected void CreateNewVersion(Item item) 
     { 
      var newItem = item.Versions.AddVersion(); 

      newItem.Editing.BeginEdit(); 
      // update necessary field if you need that 
      newItem.Editing.EndEdit(); 
     } 
    } 
} 
+0

這是保存的項目。我想創建一個版本,當用戶點擊鎖&編輯 –

+0

鎖&編輯也更新項目。 'item:saved'事件最有可能被調用。它看起來是'item:locked'事件的一個很好的選擇。 –

+0

@Sunil當你點擊'編輯'按鈕時,此代碼正好工作。點擊「編輯」按鈕時,引擎蓋下的Sitecore會更改項目的「鎖定」字段的值並保存。上面的代碼檢查項目的Sitecore.FieldIDs.Lock字段內的更改,如果更改它將創建一個新版本。試試吧,你會看到它的作品。 –

相關問題