2013-07-12 13 views
2

在我的Sitecore應用程序中,我有以下語句。item.Delete()給出的對象引用未設置爲Sitecore中對象錯誤的實例

using (new Sitecore.SecurityModel.SecurityDisabler()) 
    { 
     Item item = database.GetItem(itemId); 
     if (item != null) 
     { 
      item.Delete(); 
     } 
    } 

item對象不爲空,並在item.Delete();聲明中發生錯誤。 任何人都可以告訴這個問題有什麼問題嗎?

更新時間: 堆棧跟蹤

at Sitecore.Tasks.ItemEventHandler.OnItemDeleted(Object sender, EventArgs args) 
    at Sitecore.Events.Event.EventSubscribers.RaiseEvent(String eventName, Object[] parameters, EventResult result) 
    at Sitecore.Events.Event.EventSubscribers.RaiseEvent(String eventName, Object[] parameters) 
    at Sitecore.Events.Event.RaiseEvent(String eventName, Object[] parameters) 
    at Sitecore.Events.Event.RaiseItemDeleted(Object sender, ItemDeletedEventArgs args) 
    at Sitecore.Events.Event.DataEngine_ItemDeleted(Object sender, ExecutedEventArgs`1 e) 
    at System.EventHandler`1.Invoke(Object sender, TEventArgs e) 
    at Sitecore.Data.Engines.EngineCommand`2.RaiseExecuted() 
    at Sitecore.Data.Engines.EngineCommand`2.Executed() 
    at Sitecore.Data.Engines.EngineCommand`2.Execute() 
    at Sitecore.Data.Engines.DataEngine.DeleteItem(Item item) 
    at Sitecore.Data.Managers.ItemProvider.DeleteItem(Item item, SecurityCheck securityCheck) 
    at Sitecore.Data.Managers.ItemManager.DeleteItem(Item item) 
    at Sitecore.Data.Items.Item.Delete(Boolean removeBlobs) 
    at Sitecore.Data.Items.Item.Delete() 

我進一步發現,該項目實際上是得到了來自Sitecore的樹中刪除,然後給了錯誤。

+0

你可以發佈異常的堆棧跟蹤? –

+0

我已將堆棧跟蹤添加爲更新。 –

+0

即使我嘗試調用'item.Recycle()' –

回答

0

我記得前幾次遇到這個問題,我用BeginEdit()和EndEdit()解決了它。這有點奇怪,但它的工作原理。 你可以改變你的代碼:

using (new Sitecore.SecurityModel.SecurityDisabler()) 
{ 
    Item item = database.GetItem(itemId); 
    if (item != null) 
    { 
     item.Editing.BeginEdit(); 
     item.Delete(); 
     item.Editing.EndEdit(); 
    } 
} 
+0

我試過你的代碼,它並沒有解決我的問題。 –

0

這是觸發異常Sitecore.Tasks.ItemEventHandler.OnItemDeleted試圖刪除「Itemstaks」該項目的方法,從「taskdatabase」 所以,唯一的原因,我可以猜出這個錯誤是你的配置有什麼問題。您是否在配置文件或包含文件中包含此部分?:

<TaskDatabase type="Sitecore.Data.$(database).$(database)TaskDatabase, Sitecore.Kernel"> 
    <param connectionStringName="core" /> 
</TaskDatabase> 

相關連接字符串是否可用?

1

item.Delete() gives Object reference not set to an instance of an object error in Sitecore

通常,這可能是因爲安全的情況發生。也許冒充的用戶沒有對該項目的讀取權限,或者該項目需要權限才能被刪除。

使用SecurityDisabler和UserSwitcher進行研究。

的食譜,你可以看到這類問題的參考:http://sdn.sitecore.net/upload/sitecore6/content_api_cookbook-a4.pdf

有一對夫婦在整個PDF功能停止的片段。例如在第12頁。

另外第47頁說明了錯誤。

我仍然發現使用SecurityDisabler的一些情況不起作用。我有一個例子,安全明確禁止普通用戶刪除。只有管​​理員才能做到這一點。在這種情況下,即使我使用securityDisabler,我仍然收到錯誤消息:

/////SNIPPET 

... 

    string userName = @"sitecore\[A USER]"; 
        if (Sitecore.Security.Accounts.User.Exists(userName)) 
        { 
    Sitecore.Security.Accounts.User user = Sitecore.Security.Accounts.User.FromName(userName, false); 
         //using (new Sitecore.Security.Accounts.UserSwitcher(user)) 
         using (new Sitecore.SecurityModel.SecurityDisabler()) 
         { 
          using (new Sitecore.Security.Accounts.UserSwitcher(user)) 
          { 
           //DO SOMETHING 
          } 
         } 
        } 



////END OF SNIPPET 

祝您的代碼順利運行。

Regards,

相關問題