2012-11-14 7 views
1

사용자가 폴더를 만들 때 자동으로 13 개의 하위 폴더를 만드는 이벤트 수신기가 있습니다. 아래 코드는 이것을 할 수 있으며 관리자 계정이 폴더를 만들 때 모든 것이 정상입니다. 그러나 다른 사용자의 경우 하위 폴더는 오류없이 생성되지 않습니다. Sharepoint 2010 이벤트 수신기는 관리자 계정에서만 작동합니다.

public override void ItemAdded(SPItemEventProperties properties) 
{ 
    base.ItemAdded(properties); 
    SPWeb web = properties.OpenWeb(); 
    web.AllowUnsafeUpdates = true; 
    SPDocumentLibrary docLib = (SPDocumentLibrary)web.List[properties.ListId]; 
    if (properties.ListItem.ContentType.Name == "Folder" 
     && properties.ListItem.Folder.ParentFolder.ToString().ToLower().EndsWith("opportunity")) 
    { 
     String url = properties.ListItem.ParentList.RootFolder.ServerRelativeUrl.ToString(); 
     SPFolder libFolder = properties.ListItem.Folder; 
     string newFolderUrl = (web.Url + "/" + libFolder.ToString()); 
     foreach (string subfolder in folders) 
     { 
      SPListItem newFolder = docLib.Items.Add(newFolderUrl, SPFileSystemObjectType.Folder, subfolder); 
      newFolder.Update(); 
     } 
    } 
} 

나는 SPSite 및 SPWeb를 상승에 대한 많은 글을 읽고 난 하위 폴더를 생성하기 전에 개체를 제고 할 수있는 코드를 썼다. 그러나 아래 코드는 작동하지 않습니다.

public override void ItemAdded(SPItemEventProperties properties) 
{ 
    Guid siteId = properties.SiteId; 
    Guid webId = properties.OpenWeb().ID; 
    SPSecurity.RunWithElevatedPrivileges(delegate() 
    { 
     using (SPSite elevatedSite = new SPSite(siteId)) 
     { 
      using (SPWeb web = elevatedSite.OpenWeb(webId)) 
      { 
       base.ItemAdded(properties); 
       web.AllowUnsafeUpdates = true; 
       SPDocumentLibrary docLib = (SPDocumentLibrary)web.Lists[properties.ListId]; 
       if (properties.ListItem.ContentType.Name == "Folder" 
        && properties.ListItem.Folder.ParentFolder.ToString().ToLower().EndsWith("opportunity")) 
       { 
        String url = properties.ListItem.ParentList.RootFolder.ServerRelativeUrl.ToString(); 
        SPFolder libFolder = docLib.RootFolder.SubFolders[properties.ListItem.Name]; 
        SPFolder libFolder = properties.ListItem.Folder; 

        string newFolderUrl = (web.Url + "/" + libFolder.ToString()); 
        foreach (string subfolder in folders) 
        { 
         SPListItem newFolder = docLib.Items.Add(newFolderUrl, SPFileSystemObjectType.Folder, subfolder); 
         newFolder.Update(); 
        } 
       } 
       web.AllowUnsafeUpdates = false; 
      } 
     } 
    }); 
} 

아무도 문제를 해결할 수 있습니까? 모든 사용자는 홈 구성원이므로 폴더를 수동으로 만들 수 있습니다.

+0

무엇이 오류입니까? –

답변

2

전화 번호는 ItemAdding입니다. 비동기 통상 작업자 프로세스 인 셰어 \ System 사용자로 - 방법은 (사용자에 기록 전류에 동기)라고하며 ItemAdded 메소드 실행 후 라고하면서

ItemAdding 호출된다.

아마도 도움이 될 것입니다.