본문 바로가기

SharePoint/SharePoint 개발

SharePoint SPQuery-2

오늘에 끄적거림!!

1. 폴더안에 데이터 찾기

2. 특정 사이트의 여러목록에서 한번에 데이터 찾기

3. Recursive, RecursiveAll 차이




1. 폴더가 등록되어있는 목록에서 폴더안의 데이터를 찾기 입니다.


목록에서 일반 데이터를 등록 하기도 하고 폴더를 등록 후 폴더 안에 데이터를 등록 하기도 합니다.

일반적으로 등록된 데이터는 SPQuery 에 CAML 쿼리를 사용하여 불러 올 수 있지만 폴더 안에

데이터는 불러 오지 못합니다.


그래서 SPQuery 에 Folder 라는 속성에 폴더 위치를 지정해 주어 폴더 안에 데이터를 불러 옵니다.


아래 그림과 같이 폴더 항목을 추가 하고 각 폴더 안에 Test1,Test2,Test3 이라는 일반 항목을 추가 했습니다.




찾을 데이터는 Folder1 안의 Test1 입니다.


using (SPSite site = new SPSite(http://mysite/))

{

using (SPWeb web = site.OpenWeb())

        {

             SPList list = web.Lists["mylist"];

             SPQuery query = new SPQuery();       

             query.Query = "<Where>"

           + "<Eq>"

           + "<FieldRef Name=\"Title\" />"

           + "<Value Type=\"Text\">Test1</Value>"

           + "</Eq>"

           + "</Where>";

 

             Query.Folder = list.RootFolder.SubFolders["Folder1"];

            Query.RowLimit = Convert.ToUInt32(list.ItemCount);

                   

             SPListItemCollection items = list.GetItems(query);

             foreach (SPListItem item in items)

             {

     Lable1.Text += item["Title"].ToString();

             }

      }

}



2. 특정 사이트의 여러목록 중에서 데이터 찾기 입니다.


MS SQL 에서 보면 Join 과 같다고 볼 수 있습니다.

Join 한 테이블 중에서 특정 데이터 찾기 같은 것입니다.

여러 목록을 불러 올때는 SPQuery 대신 SPSiteDataQuery 사용 하며 DataTable 반환 합니다.



찾을 데이터는 TestList1,TestList2,TestList3 3개의 목록에서 테스트 


StringBuilder strListID = new StringBuilder();

 

using (SPSite site = new SPSite(SKMSURI))

{

      using (SPWeb web = site.OpenWeb())

      {

    SPSiteDataQuery siteQuery = new SPSiteDataQuery();


//Web 목록 전체에서 찾아도 되고 SPList를 하나씩 정의 해서 List ID를 추가 해도 됩니다.

    strListID.Append("<Lists>");

            foreach (SPList list in web.Lists)

            {                  

                   if (list.Title == " TestList1" && list.Title == " TestList2" && list.Title == " TestList3" )

                   {

                         strListID.Append(string.Format("<List ID={0} />", list.ID.ToString()));

                    }

                    

           }

   strListID.Append("</Lists>");

 

    siteQuery.Lists = ListID();

 

            query.Query = "<Where>"

           + "<Eq>"

           + "<FieldRef Name=\"Title\" />"

           + "<Value Type=\"Text\">테스트</Value>"

           + "</Eq>"

           + "</Where>";


    siteQuery.Webs = "<Webs Scope=\"Site\" />";

    siteQuery.RowLimit = 5;

    DataTable dt = web.GetSiteData(siteQuery);

     }

}



3. Recursive 와 RecursiveAll 에 차이 입니다.


ViewAttributes 란 쿼리의 보기의 특성을 가져오거나 정의 할때 사용 하는데 

Recursive 와 RecursiveAll 이 이 속성에 쓰입니다.


Recursive 는 폴더들은 찾을 수 없고 파일만을 모두 찾고

RecursiveAll 는 폴더/하위폴더/파일을 모두 찾을 수 있습니다.



using (SPSite site = new SPSite( http://mysite/))

{

using (SPWeb web = site.OpenWeb())

        {

             SPList list = web.GetList(mylist);

             SPQuery query = new SPQuery();       

             query.Query = "<Where>"

           + "<Eq>"

           + "<FieldRef Name=\"Title\" />"

           + "<Value Type=\"Text\">Test1</Value>"

           + "</Eq>"

           + "</Where>";

            

  //Scope='RecursiveAll' 으로도 씁니다.

             query.ViewAttributes = "Scope='Recursive'";

             query.RowLimit = Convert.ToUInt32(list.ItemCount);

                   

             SPListItemCollection items = list.GetItems(query);

             foreach (SPListItem item in items)

             {

     Lable1.Text += item["Title"].ToString();

             }

      }

}



'SharePoint > SharePoint 개발' 카테고리의 다른 글

SharePoint Popup 창 뛰우기-1  (0) 2012.05.08
SharePoint SPQuery-3  (0) 2012.04.26
SharePoint-CAML  (0) 2012.04.24
SharePoint SPQuery-1  (0) 2012.04.23
SharePoint 프로젝트 생성  (0) 2012.04.18