Veysel Uğur KIZMAZ

Sharepoint 2010 SPSiteDataQuery ve CAML

27.09.2011Okunma Sayısı: 4380Kategori: Sharepoint 2010

Sharepoint listelerinde değişik parametreler kullanarak very alma, sıralama vb işlemler için CAML sorguları kullanılabilir. CAML’I bir nevi SQL sorgusu gibi düşünebilirsiniz. Veritabanında SQL sorgusu ne ise Sharepoint’te CAML o anlama gelmektedir.

CAML’ın en büyük avantajı hızlı ve kullanımının basit olmasıdır. CAML sorguları yazılırken başta biraz zorlanılacakmış gibi görülse de third party toollarla sorgular oluşturulup doğrulanarak koda eklenebilir.
 
Bu işlemi yapmak için Sharepoint tarafında SPQuery isimli sınıfımızı kullanabileceğimiz gibi daha gelişmiş olan SPSiteDataQuery sınıfını da kullanabilmekteyiz. Bu makalemizde SPSiteDataQuery sınıfını inceleyeceğiz. SPQuery’de bir listed eleman sorgulama işlemi yapılmaktaydı. SPSiteDataQuery’de ise SPWeb nesnesi kullanılarak daha karmaşık sorgular oluşturulabilmektedir.
 
Öncelikle SPSiteDataQuery’nin methodlarına bir göz atalım.
 
Property/Method
Açıklama
Query
CAML sorgularını tutar.
Lists
CAML’daki XML stringinin hangi listelerde uygulanacağını belirtir.
ViewFields
Sorgu sonucunda gelecek alanları belirler
RowLimit
Sorguda dönecek satır sayısını belirler
Webs
CAML’daki XML string ifadesinin hangi weblere uygulanacağını belirtir
 
Şimdi bir örnek ile inceleyelim. Örneğimiz için yeni bir Empty Sharepoint Project (Farm solution) oluşturalım ve bir adet Visual Web Part ekleyelim.
 
 
Code behind’a geçelim ve şu şekilde düzenleyelim:
 
 
  1. using System;
  2. using System.Web.UI;
  3. using System.Web.UI.WebControls;
  4. using System.Web.UI.WebControls.WebParts;
  5. using Microsoft.SharePoint;
  6. using System.Data;
  7.  
  8. namespace SPFarmSolution.WebPart_SPSiteDataQuery
  9. {
  10.     public partial class WebPart_SPSiteDataQueryUserControl : UserControl
  11.     {
  12.         protected void SatirEkle(Table tablo, System.Collections.Generic.List<object> parametreler)
  13.         {
  14.             TableRow satir = new TableRow();
  15.             foreach (object parametre in parametreler)
  16.             {
  17.                 TableCell hucre = new TableCell();
  18.                 Label label = new Label();
  19.                 if (parametre != null)
  20.                     label.Text = parametre.ToString();
  21.                 hucre.Controls.Add(label);
  22.                 satir.Cells.Add(hucre);
  23.             }
  24.             tablo.Rows.Add(satir);
  25.         }
  26.         protected void Page_Load(object sender, EventArgs e)
  27.         {
  28.             Table tablo = new Table();
  29.  
  30.             SPSiteDataQuery sorgu = new SPSiteDataQuery();
  31.             sorgu.Lists = "<Lists BaseType='0'/>";
  32.             sorgu.Query = "<Where>" +
  33.                 "<Contains>" +
  34.                 "<FieldRef Name='Title'/>" +
  35.                 "<Value Type='Text'>Deneme</Value>" +
  36.                 "</Contains>" +
  37.                 "</Where>";
  38.  
  39.             sorgu.Webs = "<Webs Scope='SiteCollection'/>";
  40.             sorgu.ViewFields = "<FieldRef Name='Title'/>";
  41.             sorgu.RowLimit = 2;
  42.  
  43.             SPWeb web = SPContext.Current.Web;
  44.             DataTable tablo2 = web.GetSiteData(sorgu);
  45.             if (tablo2.Rows.Count > 0)
  46.             {
  47.                 SatirEkle(tablo, new System.Collections.Generic.List<object>
  48.                     {
  49.                         tablo2.Columns[0].ColumnName,
  50.                         tablo2.Columns[1].ColumnName,
  51.                         tablo2.Columns[2].ColumnName,
  52.                         tablo2.Columns[3].ColumnName
  53.                     });
  54.             }
  55.             foreach (DataRow satir in tablo2.Rows)
  56.             {
  57.                 SatirEkle(tablo, new System.Collections.Generic.List<object>
  58.                 {
  59.                     satir[0].ToString(),
  60.                     satir[1].ToString(),
  61.                     satir[2].ToString(),
  62.                     satir[3].ToString()
  63.                 });
  64.             }
  65.             this.Controls.Add(tablo);
  66.         }
  67.     }
  68. }
  69.  

 Şimdi Duyurular isminde bir Announcement oluşturalım ve içine kayıt ekleyelim.

 
 
Şimdi bunu denemek için yeni bir sayfa ekleyelim.
 
Description: Description: C:\Users\Administrator\Desktop\Makale\SP2010_VisualStudio2010_Giris\SP2010_VisualStudio2010_Giris_47.png
 
 
 
Sayfa düzenleme ekranında Insert -> Web Part -> Custom -> WebPart_SPSiteDataQuery’i sayfamıza ekleyelim.
 
 
Sayfamızı kaydedelim.
 
Şimdi sayfamızı çalıştıralım ve kodumuzun çalışıp çalışmadığını inceleyelim.
 
 
 
Veysel Uğur KIZMAZ
Bilgisayar Mühendisi
veysel@ugurkizmaz.com
www.ugurkizmaz.com