2013-07-12 2 views
2

내 Sitecore 응용 프로그램에 다음 문장이 있습니다.item.Delete()는 Sitecore에서 개체 참조가 개체 오류 인스턴스로 설정되지 않음을 나타냅니다.

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

item 개체가 null는 아니고, item.Delete(); 문에서 오류가 발생합니다. 누구든지이 문제에 대해 잘못된 점을 말할 수 있습니까? 업데이트

: 스택 추적 내가 더 다음 항목이 실제로 Sitecore 트리에서 삭제있어 것을 발견하고있다

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() 

오류를했다.

+0

예외의 스택 추적을 게시 할 수 있습니까? –

+0

스택 추적을 업데이트로 추가했습니다. –

+0

'item.Recycle() '을 호출하려고해도 같은 오류가 발생했습니다 –

답변

0

나는이 문제를 몇 시간 전에 만났고 BeginEdit() 및 EndEdit()로 해결했음을 기억합니다. 조금 이상하지만 작동합니다. 그래서 "taskdatabase" 유일한 이유는 내가에서 Sitecore.Tasks.ItemEventHandler.OnItemDeleted 그 항목에 대한 "Itemstaks"을 제거하려고 예외를 유발한다

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

나는 당신의 코드를 시도했지만 그것은 내 문제를 해결하지 못했습니다. –

0

방법 : 당신은 당신의 코드를 변경할 수 이 오류에 대해 추측 할 수있는 구성에는 잘못된 것이 있습니다. 구성 파일 또는 포함 파일에이 섹션이 있습니까? :

<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에 걸쳐 disabler의 조각 몇있다. 예 : 12 페이지를 참조하십시오.

또한 47 페이지에서 오류에 대해 설명합니다.

여전히 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 

행운이 경우 나는 여전히 내가 securityDisabler을 사용하고 있습니다 비록 점점 오류를 받고 있어요.

감사합니다.