Cumartesi, Eylül 15, 2012

SharePoint 2010 Nasıl Yapılır?-SharePoint Object Model: CAML ile Liste Sorgulama

SharePoint üzerinde yazılım geliştirirken olmazsa olmazlardan bir tanesi de listelerdeki dataları sorgulamaktır. Listeleri SQL tabloları gibi düşünüp datayı listelerde saklayıp T-SQL'de olduğu gibi listeleri de sorgulayabilirsiniz. SharePoint listelerini sorgularken direkt SQL veri tabanına gidiyor olmak doğru bir çözüm değildir. SQL tabloları oldukça karmaşık ve sütun tipine göre verinin saklanmış olduğu değişiklik gösterebilmektedir. Direkt SQL tablosuna gidemediğimize göre SharePoint listelerini nasıl sorgulayacağız? Bu sorgulama dilinin özel bir adı vardır ve kısaltması da CAML olarak adlandırılmaktadır. Farklı bir açıdan baktığımızda CAML'ı T-SQL'in sadece sorgulama tarafı (Retrieve) olarak düşünebiliriz. CAML'ın tam açılımı ise Collaborative Application Markup Language anlamına gelmektedir.
CAML XML tabanlı bir dildir ve XML hiyerarşisi ile sorgular oluşturulabilir. Mantık şu şekilde işlemektedir; ilk olarak koşulu yazıp, koşul düğümünün için de de bu koşula uygun sonuç dönmesini sağlayacak bir sütun yer almalıdır. En basit hali ile bir listenin "Title" sütunundaki "SharePoint" değerine eşit olan öğeleri elde etmek için aşağıdaki sorguyu yazabiliriz. 

   <Where>
      <Eq>
         <FieldRef Name='Title' />
         <Value Type='Text'>SharePoint</Value>
      </Eq>
   </Where>
   


Kodlardan da göreceğiniz gibi Where koşulunu belirtiyoruz. Where koşulunu içinde eşit durumu için <Eq> düğümünü kullanmak gerekiyor. <Eq> düğümünün içinde de sorgulanacak olan sütunun adı ve ardından da hangi değer ile sorgulanacağını belirtiyoruz. Sorgulama kriterlerinde;

Eşit olma durumu için: Eq
Eşit olmama durumu için: Neq
Değerin büyük olmasını sorgulamak için : Gt
Değerin büyük veya eşit oması durumu için: Geq
Küçük olma durumu için: Lt
Küçük veya eşit olma durumu için: Leq
Değerin NULL olma durumunu sorgulamak için: IsNull
NULL olmama durumu için: IsNotNull
Değerin bir değer ile başladığını sorgulamak için: BeginsWith
Değerin bir değeri içerdiğini sorgulamak için: Contains

Parametreleri kullanılır. Tabi bunlara ek olarak AND ve OR gibi sorgulama kriterleri ile ORDER BY gibi sıralama kriterleri de ekleyebiliyorsunuz. İşin içine AND ve OR'un girmesi ile birlikte tahmin edeceğiniz üzere hiyerarşi yine değişiyor ve sorgu kriterleri büyüdükte oldukça zorlaşıyor. Çözüm olarak ise sizin için istediğiniz CAML'ı üreten ücretsiz toolları kullanabilirsiniz. Piyasada kabul görmüş en iyi tool U2U'nun CAML Query Builder uygulamasıdır. Uygulamayı http://www.u2u.be/res/tools/camlquerybuilder.aspx adresinden indirebilirsiniz.4.0 versiyonunu SharePoint 2010 ile sorunsuzca kullanabilirsiniz.

Peki üretilen CAML'i nasıl kullanacağız? Aşağıda herhangi bir listenin tüm öğelerini döndüren bir kod parçasını görüyorsunuz.

SPSite siteCollection = new SPSite("http://sharepointdev:27500/");
SPWeb web = siteCollection.OpenWeb();
SPList liste = web.Lists["DataSorgulamaListesi"];
Literal1.Text = string.Empty;
foreach (SPListItem item in liste.Items)
{
      Literal1.Text += item.Title;
      Literal1.Text+="-"+item["Tip"]+"<br/>";
}

Aşağıdaki kodlar ise aynı listenin bir WHERE koşulu ile sorgulanmasını yani CAML ile sorgulanmasını göstermektedir. Gördüğünüz gibi bir tane SPQuery nesnesi oluşturuyoruz ve nesnenin Query parametresine CAML'ımızı belirtiyoruz. Ardından da GetItems() metodu ile SPQuery tipindeki nesnemizi belirterek CAML ile listemizi sorguluyoruz.

SPSite siteCollection = new SPSite("http://sharepointdev:27500/");
SPWeb web = siteCollection.OpenWeb();
SPList liste = web.Lists["DataSorgulamaListesi"];
Literal1.Text = string.Empty;
SPQuery sorgu = new SPQuery();
sorgu.Query = "<Where><Eq><FieldRef Name='Title' /><Value Type='Text'>SharePoint</Value></Eq></Where>";

foreach (SPListItem item in liste.GetItems(sorgu))
{
      Literal1.Text += item.Title;
      Literal1.Text+="-"+item["Tip"]+"<br/>";
}

Hiç yorum yok: