Linq etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Linq etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

22 Eylül 2010 Çarşamba

Debugging Linq

Linq sorguları yazarken yaşadığmız en büyük sıkıntı debug işlemi yaparken breakpointin sorgu içerisine girmemesi ve bu nedenle  düzgün testini yapamayışımız olmuştur.

Ancak sorgudaki kısmı yeni bir method içerine alarak sorgu içerisindeki verilerin kontrolü yapabilmekteyiz.

var customers = from customerList in dataContext.Customers
                where customerList.Title.StartsWith("M") == true
                select customerList;

Yukarıdaki sorguyu debug ederken kontrol edemiyorken

var customers = from customerList in dataContext.Customers
                where IsStartingWith(customerList,"M")
                select customerList;

private bool IsStartingWith(CustomerItem customerList, string value)
{
    return customerList.Title.StartsWith(value) == true;
}

Yeni bir method ile kontrol edebiliyoruz artık.

7 Haziran 2010 Pazartesi

Linq To Sharepoint ve Anonim Kullanıcılar

Daha önce "Sharepoint 2010 Linq Anonim Kullanıcıları Desteklememekte" başlıklı yazımda LinqToSharepoint ile sorgu çekip geliştirdiğimiz webpartların anonim kullanıcılarda çalışmadığını anlatmış ve bir örnek yapacağıma değinmiştim. Bugün ufak bir örnek yaptım. LinqToSharepoint ile geliştirdiğim webpartın bulunduğu sayfaya maalesef anonim kullanıcı ile giriş yapamadım ve sayfa giriş yapmamı istedi. CAML ile sorgu atıp geliştirdiğim webpartın bulunduğu sayfada bir sıkıntı yoktu ve giriş yapmadan sayfamı gezebildim.
Aşağıdaki ekran görüntüsünde de görüldüğü üzere Linq ile geliştirdiğim webparta login olmak zorunda kaldım.

Entities.EntitiesDataContext dataContext = new Entities.EntitiesDataContext(SPContext.Current.Web.Url);
var musteriler = from musteriListesi in dataContext.Musteriler
where musteriListesi.Title.StartsWith("A")
select musteriListesi;
Repeater1.DataSource = musteriler.ToList();
Repeater1.DataBind();


Ancak CAML ile geliştirdiğim webpartda ise login olmadan sayfamda gezinti yapıp webpartlarım arasında bağlantıyı sağlayabildim.
Burada anonim kullanıcı ile giriş yapabildiğimizi göstersede daha olumsuz olan bir nokta ise "Linq to SharePoint for Anonymous users performance" ve "Linq to SharePoint for Anonymous users performance Part 2" yazılarında CAML ve Linq arasında yapılan performans testlerinin sonuçları.
Görünen o ki CAML ile webpart geliştirmeye devam edeceğiz.

22 Nisan 2010 Perşembe

Sharepoint 2010 Linq Anonim Kullanıcıları Desteklememekte


Daha önceki yazımda Linq To Sharepoint güzelliklerinden bahsedip bir örnek ile artık nasıl daha kolay daha güzel sorgular yazıp webpart geliştireceğimizi belirtmiştim.

Ancak bugün pek de güzel olmayan bir haber vermek için yazı yazmaktayım.
Waldek'in blogunda denk geldiğim yazıya göre anonim kullanıcıların gezebileceği yerlerdeki webpartlarımızda Linq yerine CAML sorguları yazmamız gerekecek.

Yazıda ufak bir örnek ile durumu açıklamış. Ben henüz bununla ilgili bir örnek yapmadım.
İlerleyen günlerde örnek yapıp karşılaştığım durumu belirteceğim.

Ayrıca ilgili yazıya yorum olarak katkı sağlayan Sezai'nin de belirttiği üzere
Clien Object Model ve Anonim giriş yapılabilecek yerlerde Linq yerine CAML sorguları yazmamız gerektiğini vurgulamış.

Bugün yüzümün asılmasına sebep olan haber olan Waldek'in yazısına buradan ulaşabilirsiniz.

25 Ocak 2010 Pazartesi

Microsoft.SharePoint.Linq ScopeToFolder

Linq to Sharepoint ile gelen kolaylıklardan bir tanesi de
oluşturduğumuz Listenin itemlarına ve Listenin altındaki klasörlerin içerisindeki itemların hepsini bir arada kolaylıkla getirebilmemizdir.

Microsoft.SharePoint.Linq namespacesi altında ScopeToFolder methoduna göndereceğimiz klasör linki ve recursive parametleri ile bunu kolaylıkla sağlayabilmekteyiz.

Yukarı bahsettiğim konuya ait aşağıda örnek kod parçası bulunmaktadır.

string webUrl = SPContext.Current.Web.Url;
Entities.EntitiesDataContext dataContext = new Entities.EntitiesDataContext(webUrl);

var haberler = from haberListesi in dataContext.Haberler.ScopeToFolder("/sites/adil/Lists/Haberler", true)
select haberListesi;

Repeater1.DataSource = haberler.ToList();
Repeater1.DataBind();

Haberler listemizde subfolderları ile birlikte bütün itemları listelemiş olduk.


12 Ocak 2010 Salı

Linq to Sharepoint, SPMetal


Sharepoint 2010 ile birlikte gelen yeniliklerden birisi olan LinqToSharepoint ile birlikte artık Caml sorgusu yerine Linq sorguları ile verilerimizi çekebileceğiz.
SP2010 öncesinde CodePlex’de proje bulunmaktaydı.

Sorgularımız oluşturmak için 14 klasörü içerisinde bulunan BIN klasöründeki SPMetal.exe den yararlanmaktayız. SPMetal ile oluşturulan kodu projemize ekledikten sonra listelerimize, resim kütüphanelerimize, sayfalarımıza ulaşıp sorgulayabiliriz.

Gelin sade bir örnekle bunu inceleyelim.
Öncelikle haberlerimizin tutulacağı custom list oluşturalım adına “Haberler” diyelim.
Daha sonrasında haber resimlerinin tutulacağı resim kütüphanemizi oluşturalım adına “Haber Resimleri” diyelim
“Haberler” listemize Lookup Field olarak “Haber Resimleri” ekleyelim.
Haberlerin kolonları aşağıdaki gibi olsun
Örnek bir kaç haber girdikten sonra Visual Studio 2010 ile birlikte gelen Visual Web Part ile WebPartımızı geliştirelim.


Proje teması olarak Sharepoint seçeneği altındaki 2010 da bulunan Visaul Web Part seçtikten sonra projemizi deploy edeceğimiz siteyi yazıyoruz.
Projemizi oluşturduktan sonra SPMetal ile Entities kodumuzu oluşturalım.
Bunun için .bat dosyası oluşturmamız gerekmekte ve gerekli parametreleri girmeliyiz.

Set SPMETAL="C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\BIN\SPMETAL.EXE"
%SPMETAL% /web:YOURWEBSITE /namespace:Entities /code:Entities.cs

Yukarıdaki komutları not defterine yazıp “SPMetal.bat” olarak kaydedip çalıştırdığımızda Entities.cs olarak kodları oluşturmakta. YOURWEBSITE kısmını siz kendi sitenize göre değiştirmeyi unutmayınız.
Projemizi oluşturup ve Entities.cs’yi ekledikten sonra
böyle bir görüntü elde edeceğiz. Visual Web Partımızın adını HaberlerVisualWp olarak verdiğimizi varsayalım.
ISAPI klasörü altındaki Microsoft.Sharepoint.Linq dllini referans olarak projemize ekliyoruz.
using System.Linq;
using Microsoft.SharePoint.Linq;

namespacelerini ekliyoruz ve ardından linq sorgumuzu yazmaya geçelim.
Kategorisi “Bizden” olan haberleri listeledik. Burada en çok hoşuma giden nokta seçenek tipinde oluşturduğum fieldın seçeneklerinin Intellisense şeklinde kodda yer alması.


Kodumuzu yazdıktan sonra projemize deploy diyerek projemizi oluştururken belirttiğimiz siteye deploy ediyoruz.
İster F5 ile projeyi deploy ediyip yeni sayfa oluştur ister yukarıdaki gibi deploy deyip var olan bir sayfanıza WebPartı eklersiniz.
Deploy dedikten sonra ilgili sayfayı düzenleyip webpartımızı ekliyoruz. Haberler WebPartımız “Custom” altında web partlar içerisinde yerini almaktadır.

SP2007’de olduğu gibi SP2010’da da yardımcı toollar çıkmaya başladı. SPMetal’i görselleştiren .bat dosyası oluşturmanıza gerek kalmayan uygulamaya buradan ulaşabilirsiniz.

LinqToSharepoint de karşılaştığım sıkıntı senkron olmaması. Sharepoint portalımızda değişiklik yaptığımızda örneğin seçeneklere yeni bir seçenek eklediğimizde. Bunu Enitities.cs kodumuza da yansıtmamız gerekir isterseniz kendiniz yazarak ekleyebilirsiniz ama daha sağlıklı olması açısından tekrar SPMetal uygulamasını çalıştırıp kodu güncel hale getirmeliyiz.

Channel9'daki videoyu tavsiye ederim.