2011-10-31 1 views
4

폴더 및 항목을 포함하는 목록이 있습니다. 폴더는 폴더를 기반으로하지만 속성이있는 특정 콘텐츠 형식입니다.공유 폴더 목록에서 모든 폴더 및 항목을 가져 오는 방법은 무엇입니까?

폴더는 하위 폴더와 하위 항목을 포함 할 수 있습니다. 하위 폴더에는 하위 하위 폴더가 포함될 수 있습니다. 나는 이미이 방법을 사용하여 모든 항목 및 폴더를 얻을 관리 :

void TraverseList(SPList list) 
    { 
     Trace.WriteLine("Traversing list: " + list.Title); 
     Trace.WriteLine("Base type: " + list.BaseType.ToString()); 
     TraverseListFolder(list.RootFolder); 
    } 

    void TraverseListFolder(SPFolder folder) 
    { 
     SPQuery qry = new SPQuery(); 
     qry.Folder = folder; 
     Trace.WriteLine("Foldername: " + folder.Name); 
     SPWeb web = null; 

     try 
     { 
      web = folder.ParentWeb; 
      SPListItemCollection ic = web.Lists[folder.ParentListId].GetItems(qry); 

      foreach (SPListItem subitem in ic) 
      { 
       SPFieldLookupValue temp = new SPFieldLookupValue(subitem["TargetPage"].ToString()); 
       Trace.WriteLine("TargetPage: " + temp); 
       Trace.WriteLine("ItemName: " + subitem.Name); 
       if (subitem.Folder != null) 
       { 
        TraverseListFolder(subitem.Folder); 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      Trace.WriteLine(ex.Message); 
      throw; 
     } 
     finally 
     { 
      if (web != null) 
      { 
       web.Dispose(); 
      } 
     } 
    } 

이 솔루션의 문제는 목록이 증가 할 때 imperformant을 받고 모든 폴더에 대한 새 쿼리를 전송해야한다는 것입니다. 폴더/항목 구조를 잃지 않고 한 번의 호출로 전체 목록을 가져 오는 방법이 있습니까?

이것을 읽어 주셔서 감사합니다.

편집 : CAML을 사용하지 않아도됩니다. 그러나 내가 잊어 버린 제한 사항이 있습니다 : 저는 고객 제한 때문에 webservices를 사용할 수 없습니다.

답변

-1
query.ViewAttributes="Scope='RecursiveAll'"; 
+1

답을 설명해주세요. –

관련 문제