1 Mart 2013 Cuma

CAML Query kullanarak SharePoint 2013 için Visual Studio 2012 de Custom Web Part Geliştirmek

Bir listeye ait değerleri belirli bir tasarıma göre listelemek için SharePoint hazır bulunan Content Query WebPart, SharePoint Designer aracılığı ile XSLT (DataFormWebPart) veya Visual Studio ile geliştireceğimiz custom web part kullanılabilir. Custom Web Part geliştirirken de yaygın olarak kullandığımız 2 adet query yazma tekniğimiz mevcut bunlar; LINQ to SharePoint ve CAML query.  Burada CAML kullanarak web part ile listeyi belirli bir tasarıma ve filtreye göre getireceğiz. Önceki blog postumda anlattığım CAML Designer 2013 aracını kullanarak geliştirme yapacağız.

SharePoint sunucunuza yada Portale erişebildiğiniz bir Windows 8 makinede CAML Designer 2013'ün kurulu olduğundan emin olunuz.

Öncelikle Haberler listesi adında bir liste oluşturalım ve bu Haberler için HaberKategorileri’ni verebilmek için HaberKategorileri diye başka bir liste oluşturalım.

Haberler listesine Kategori adında bir kolon eklenilir. Bu kolon; oluşturulan HaberKategorileri’ne ait “Title” alanına lookup yapılmıştır. Listemiz aşağıdaki gibi görülecektir.

Web part oluşturmak için visual studio açılır ve Boş bir sharepoint projesi oluşturulur.


Proje içerisine “Visual WebPart” eklenir.


Caml Designer ile Listedeki verileri çekmek

Caml Designer 2013 açıldıktan sonra ilgili Site’a ulaşabilmek için connection oluşturulur.


Url alanı olarak bağlanacağımız Site Collection’un Url’ini veriyoruz. Client OM seçiyoruz ve devamında Connect diyoruz.


Bağlantı kurulduktan sonra aşağıdaki ekran görününecektir. Bu görünümde soldaki Url’in barındırdığı menüyü açtığımızda siteye ait tüm listeler çıkacaktır.



Haberler listesini seçtikten sonra gösterilcek ilgili alanlar seçilir ve sürükle bırak ile sağ taraftaki alana atılır. İlk başlık değeri “Title” alanını vereceğinden o atılır. Hangi değeri veridiğini görmek için alt taraftaki menüden Caml seçilebilir.


Burada üst menü içerisinde bulunan yerlere göre filtreleme oluşturabiliriz.Örnek olarak eklenme tarih alanına göre sıralama yaptırmak için Ordey By seçilir ve yine bu alan sürükle bırak yöntemi ile alınır.Created alanına tıklanıldığında ise sıralama tersten olacaktır.


Where alanında ise birçok filtreleme yapabiliriz.Örnek olarak sadece Gündem haberlerini göstersin.Bunun için Kategori alanı sürükle bırak yapıldığında aşağıdaki gibi görülecektir.


Gündem alanı seçilir.Query By ID ise kolon içerisinde string olarak Gündem içermesi yerine seçilen item’ın ID sini alır.Listeye yanlışlıkla birden fazla aynı isimde satır eklenebilir.Ve haberler listesine de her iki farklı öğe için aynı isimde kategori eklenmiş olabilir.Bu durumda Gündem alanı ID ye göre seçilmediğinde gelebilecek eksik veriler için önlem alınmış olunur.
Son olarak Test dediğimizde Gündem kategorisine ait haberler görüntülenecektir.


Burada biz istemediğimiz halde birkaç alan da görüntülenmiştir.Bu değerler default olarak gösterilip kullanıcı tarafından bilgilendirilmesi içindir.Aşağıda oluşturulan otomatik kod blokları içerisinde yer almayacaktır.Bu kolonların da kod bloğu içerisine gelmesi için tekrar ViewFields alanında eklenilmesi gerekmektedir.

Son olarak buradaki listeye ait değerleri web part içerisinde kullanmak için Server OM içerisindeki kodları kopyalıyoruz.


Web part içerisine geldiğimzde ToolBox içerisinden bir Repeater atalım(Haberler listesini datasource olarak bu kontrol içerisinde göstereceğiz).Web part içerisine Repeater ekledikten sonra item template’i aşağıdaki gibi düzenleyelim.


Page Load içerisine caml designer yardımıyla aldığımız kodlay yapıştırılır.Ancak burada spWeb nesnesi olmadığından derleme sırasında hata meydana gelecektir.spWeb nesnesini oluşturmak için SPContext class’ından yararlanılır.Kodun son hali aşağıdaki gibidir


Projeyi deploy ettikten sonra web part’ı görmek için Haberler adında yeni bir sayfa ekleyelim.



Sayfa açıldıktan sonra Ribbon içerisinden insert ve devamında web part seçilir.


Burada Custom kategorisi içerisinde oluşturulan web partlar yer alacaktır.Haberler web part’ını ekleyip add ve sonrasında sayfayı kaydediyoruz.


Sayfayı kaydet dedikten sonra web partımız aşağıdaki gibi görülecektir


Dikkat edileceği üzere burada lookup alanı ID değeri ile birlikte gelmiştir.Bunun için split işlemi uygulanabilinir.Ancak burada repeater içerisinde gösterilen alanda split işlemi uygulamak çok daha kolay olacaktır.


Split işlemi sonrasında webpartımızı tekrar deploy edip sayfayı yenilediğimizde aşağıdaki gibi Gündem kategori bilgisi listedeki ID degeri olmaksızın gelmiş olacaktır.
Böylece webpartımız çok bir tasarım yapmamış olsakda istediğimiz sayfada kullanılacak şekilde hazır durumda ve istenildiği zaman giydirilerek ilgili yerde kullanılabilir duruma gelmiştir.

Yararlı olması dileğiyle...

Hiç yorum yok: