2016-04-04 89 views
1

我有項目導入器刪除所有項目子項目並創建新的子項目。最近我將它切換到存儲桶,現在我遇到了刪除問題。 我刪除項目使用:Sitecore - 刪除存儲桶子項目

myItem.DeleteChildren(); 

沒有桶大約需要20分鐘。現在大約需要1小時5k物品。我需要在刪除之前恢復存儲桶項目,然後再次同步? 什麼是刪除可拆卸物品的最快捷方式?

回答

1

你可以更進一步。通過禁用所有三種功能,我能夠在幾分鐘內導入30k。

using (new Sitecore.SecurityModel.SecurityDisabler()) 
{ 
    using (new Sitecore.Data.Events.EventDisabler()) 
    { 
     using (new ProxyDisabler()) 
     { 
      //delete code here 
     } 
    } 
} 
+0

當我添加存儲桶子項目時,是否必須像通常一樣使用與myBucket.Add()方法不同的東西?我添加了一些項目,並且我可以在Sitecore內容編輯器中找到它們 – petros

+0

只需像正常一樣添加項目,它們就會放入存儲桶中。如果他們沒有自動進入桶,那麼你的模板沒有被設置爲標準值中的「桶」。 –

1

如果存儲桶中有很多項目,它將在每個正在刪除的項目上執行事件。將您的刪除代碼放入事件禁用程序中:

using (new EventDisabler()) 
{ 
    myItem.DeleteChildren(); 
} 

這將停止所有發生的事件並且應該快得多。作爲一個警告 - 在執行此操作時索引不會立即更新,因此您可能希望在導入器運行後在主數據庫上運行索引更新。

另一種選擇是更新導入中的現有項目,而不是先刪除所有項目。

+0

我可以以編程方式運行索引更新嗎? – petros

2

我的猜測是,您的刪除現在需要更長的時間,因爲存儲桶在刪除時正在更新索引。儘管您可以通過禁用您的.DeleteChildren調用中的事件來加速它,但仍需要更新爲您的存儲桶更新的索引才能正常運行。

所以要回答你的問題,沒有辦法加速它,同時仍然保留完整的功能。

如果你想在動作測試,請嘗試以下操作:

using(new EventDisabler()) myItem.DeleteChildren(); 

應該把刪除加速到它原來所在之處,但在桶的價格,將無法正常工作,直到索引建立完成。

我建議你採用一種集成方法,即不需要完全刪除和重建物品商店。

+0

我可以以編程方式運行索引更新嗎? – petros

+0

是的。但它也應該趕上它自己。最終。請注意;從進行導入和索引更新的時間開始,通過存儲桶API查詢的任何內容都會給出不一致/錯誤的結果。 索引重建:http://stackoverflow.com/questions/31419638/sitecore-refresh-index –

0

在調用DeleteChildren()之前可能(以編程方式)unbucket?我不知道總共需要多長時間,但可能比現在更快