Sitecoreアイテム(非アクティブまたは古い製品)のクリーンアップジョブを実行するWindowsサービスを使用していますが、それらを削除しようとするとできません。
if (qItem != null)
{
qItem.Recycle();
}
RelevatStackTraceは次のとおりです。
Message: Object reference not set to an instance of an object.
StackTrace: 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.DataEngine.RaiseDeletedItem(Item item, ID parentId, Boolean result)
at Sitecore.Data.Archiving.Archive.NotifyItemDeleted(Item item, ID parentId)
at Sitecore.Data.Archiving.SqlArchive.DoArchiveItems(IEnumerable`1 items, Guid archivalId)
at Sitecore.Data.Archiving.SqlArchive.DoArchiveItems(IEnumerable`1 items, Guid archivalId)
at Sitecore.Data.Archiving.SqlArchive.ArchiveItem(Item item)
at Sitecore.Data.Items.Item.Recycle()
このエラーは、Windowsサービスからアイテムをリサイクルした場合にのみ発生することを再度述べます。同じリサイクルがWebアプリから問題なく機能します。
Webアプリでは、sitecoreにログインしており、ユーザーはadminであるため、彼にはいくつかの権限があります。
Windowsサービスでは、ユーザー(Sitecore.Context.User)は"default\Anonymous"
です。
セキュリティチェックをバイパスするために、結果なしでSecurityDisabler内のRecycle呼び出しを囲みました。
WindowsサービスからSitecoreにログインする必要がありますか?はいの場合、どうすればそれを行うことができますか?
または、Web以外のアプリケーションからSitecoreアイテムをリサイクル/削除する別の方法はありますか?
アクセス拒否例外を実行してスローするコードは次のとおりです(SecurityDisablerコンテキスト内では実行されません)。
これは、SecurityDisablerコンテキスト内でアイテムをリサイクルするコードです。アクセス拒否の例外はありませんが、「オブジェクト参照がインスタンスに設定されていません」という例外があります。