2

私の Sitecore アプリケーションには、以下のステートメントがあります。

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

itemオブジェクトが null ではなく、ステートメント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 ツリーから削除され、エラーが発生したことがわかりました。

4

3 に答える 3

0

例外 Sitecore.Tasks.ItemEventHandler.OnItemDeleted をトリガーしているメソッドは、「タスクデータベース」からそのアイテムの「Itemstaks」を削除しようとします。したがって、このエラーについて推測できる唯一の理由は、構成に問題があることです。構成ファイルまたはインクルード ファイルにこのセクションがありますか?:

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

関連する接続文字列は利用可能ですか?

于 2013-11-21T17:09:39.680 に答える
0

数年前にこの問題に遭遇し、BeginEdit() と EndEdit() で解決したことを覚えています。少し奇妙ですが、うまくいきます。コードを次のように変更できますか:

using (new Sitecore.SecurityModel.SecurityDisabler())
{
   Item item = database.GetItem(itemId);
   if (item != null)
   {
      item.Editing.BeginEdit();
      item.Delete();
      item.Editing.EndEdit();
   }
}
于 2013-07-12T10:17:24.313 に答える