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ı kullanmaktayız. Bu sınıf, sorguların çalıştırılması ve sonucunun alınması işlemini gerçekleştirmektedir.
Öncelikle SPQuery’nin methodlarına bir göz atalım.
Property/Method | Açıklama |
Query | CAML sorgularını tutar. |
Folder | Sorgularda klasörlerin kullanımını sınırlandırır |
ViewFields | Sorgu sonucunda gelecek alanları belirler |
RowLimit | Sorguda dönecek satır sayısını belirler |
ViewAttributes | CAML’a ek parametreler eklemeyi sağlar. |
Ş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:
- using System;
- using System.Web.UI;
- using System.Web.UI.WebControls;
- using System.Web.UI.WebControls.WebParts;
- using Microsoft.SharePoint;
- namespace SPFarmSolution.WebPart_SPQuery
- {
- public partial class WebPart_SPQueryUserControl : UserControl
- {
- protected void SatirEkle(Table tablo, System.Collections.Generic.List<object> parametreler)
- {
- TableRow satir = new TableRow();
- foreach (object parametre in parametreler)
- {
- TableCell hucre = new TableCell();
- Label label = new Label();
- if (parametre != null)
- label.Text = parametre.ToString();
- hucre.Controls.Add(label);
- satir.Cells.Add(hucre);
- }
- tablo.Rows.Add(satir);
- }
- protected void Page_Load(object sender, EventArgs e)
- {
- Table tablo = new Table();
- SPWeb web = SPContext.Current.Web;
- SPList liste = web.Lists["Duyurular"];
- SatirEkle(tablo, new System.Collections.Generic.List<object> { "Duyurular<br/><hr/><br/>" });
- SPQuery sorgu = new SPQuery();
- sorgu.Query = "<OrderBy>" +
- "<FieldRef Name='Title'/>" +
- "</OrderBy>" +
- "<Where>" +
- "<Contains>" +
- "<FieldRef Name='Title'/>" +
- "<Value Type='Text'>Deneme</Value>" +
- "</Contains>" +
- "</Where>";
- SPListItemCollection sorguSonuc = liste.GetItems(sorgu);
- foreach (SPListItem eleman in sorguSonuc)
- {
- SatirEkle(tablo, new System.Collections.Generic.List<object> { eleman.Title });
- }
- this.Controls.Add(tablo);
- }
- }
- }
Şimdi Duyurular isminde bir Announcement oluşturalım ve içine kayıt ekleyelim.
Şimdi bunu denemek için yeni bir sayfa ekleyelim.
Sayfa düzenleme ekranında Insert -> Web Part -> Custom -> WebPart_SPQuery’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