Perşembe, Ocak 15, 2009

MOSS'a Programatik Olarak Erişim

MOSS 2007 alt yapısı kullanılarak gerçekleştirilen sistemler kurumların pek çok ihtiyacını karşılayabilecek yetenektedir ancak zaman zaman sadece MOSS 2007 ile gelen özellikler kurumların ihtiyaçlarına cevap veremeyebilir, ya da kurum içinde kullanılmakta olan bir uygulama MOSS 2007 ile entegre hale getirilmek istenebilir. Bu gibi durumlarda SharePoint'e programatik olarak erişme ihtiyacı ortaya çıkmaktadır. MOSS 2007 ile birlikte SharePoint'e programatik olarak erişmek amacı ile web servisleri ve SharePoint Nesne Modeli yazılım geliştiricilere sunulmaktadır. Bu post'ta SharePoint Nesne Modeli içerisinde yer alan SPWeb ve SPSite sınıflarına deyinip bir site koleksiyonu içinde yer alan listeleri görüntülüyor olacağız.

SPSite ve SPWeb sınıfları da site (Site) ve site koleksiyonlarına (Site Collection) erişmek için kullanılabilecek olan iki sınıftır, SPSite ve SPWeb sınıflarından bahsetmeden önce ilk olarak site koleksiyonu yapılarına deyiniyor olmak mantıklı olacaktır. SharePoint alt yapısı ile bir portal geliştirildiğinde parçalar web siteleri olarak bir bütün oluşturuyor olacaktır. Türkçe yazılışı da aynı olan bu parçalara Site adı verilir, siteleri aynı amaca veya aynı gereksinimlere göre gruplama görevini üstlenen yapıya ise Site Koleksiyonu (Site Collection) adı verilir. MOSS üzerinde yer alan bir Web Uygulaması (Web Application) içerisinde yeni siteler oluşturulmak istenildiğinde bu siteler direkt Web Uygulaması düzeyinde değil bir Site Koleksiyonu içerisinde oluşturuluyor olmalıdır dolayısı ile MOSS'da aşağıdaki şekilde de yer alan bir hiyerarşi mantığı söz konusudur.




Şekilden de görüleceği üzere IIS altında yer alan Web Application'lar içerisinde SiteCollection'lar bulunabiliyor ve SiteCollection'lar içerisinde de Site'lar yer alıyor. Programatik olarak SiteCollection'lara erişmek için nesne modelinde yer alan SPSite ve Site Collection içerisinde yer alan sitelere ulaşmak için de SPWeb sınıfları kullanılıyor olacaktır. SPSite ve SPWeb sınıflarının kullanılabilmesi için MOSS 2007 kurulu olan bir makinede yer alan SharePoint dll'i uygulamaya referans edilmelidir. Varsayılan olarak kullanılacak olan dll C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\ISAPI yolunda yer alıyor olacaktır. Klasörde yer alan Microsoft.SharePoint.dll isimli dll Visual Studio ile yeni bir proje açılıp refere edildikten sonra dll içindeki isim uzayları (NameSpace) kullanılabiliyor olacaktır.

Hiyerarşik yapının doğası gereği herhangi bir Site'a erişmek için ilk olarak SiteColection'a erişilmeli ve ardında da istenilen Site'a erişilmelidir. Bir SiteCollection'a erişmek için ilk olarak SPSite sınıfının bir nesne örneği oluşturulur ve yapılandırıcı metod içerisinde erişilmek istenilen SiteCollection'un URL'i belirtilebilir. Konuyu bir örnekle açıklamak için ilk olarak Visual Studio içerisinden bir Console uygulaması açıp Microsoft.SharePoint.dll isimli dll'i refere edelim ve ardından gerekli isim uzaylarını ekleyelim ardından da bir SiteCollection'a erişip bir kaç bilgisini yazdıracak olan ve ardından da SiteCollection içerisinde yer alan siteleri listeleyecek olan aşağıdaki kodları yazıyor olalım.

/*SPSite MOSS'da yer alan SiteCollection'lara erişmemize
olanak tanıyan Class'dır...*/

SPSite siteCollection = new SPSite("http://litwareportal");



/*SPSite tipinden oluşturulan bir nesne aracılığı ile ilgili
SiteCollection'ın WebApplication'ınana da erişebiliriz.... Bu özellik
bize SPWebApplication tipinden bir nesne döndürür...*/



Console.WriteLine("Site Collection'ın WebApplication'ı: " +
siteCollection.WebApplication.DisplayName);



/*SiteCollection içerisinde yer alan sitelere erişmek için SPWeb Class'ı
kullanılır...*/

Console.WriteLine("{0} URL'inde yer alan SiteCollection'ın web siteleri:",
siteCollection.Url);



SPWebCollection tumWebler = siteCollection.AllWebs;

foreach (SPWeb web in tumWebler)

{

Console.WriteLine("\tTitle: " +
web.Title);

Console.WriteLine("\tSite logo
URL'i: " + web.SiteLogoUrl);

Console.WriteLine("Site
içerisinde yer alan Listeler: ");

foreach (SPList list in
web.Lists)

{


Console.WriteLine("\t\tListe Adı: " + list.Title);

}

}

Yukarıda yer alan kodlarda ilk olarak SPSite tipinde bir nesne oluşturuluyor ve http://litwareportal isimli SiteCollection'a erişilmek isteniliyor. Oluşturulan nesne üzerinden ilk olarak SiteCollection'u taşıyan WebApplication'a erişiliyor görüleceği üzere bu özellik SPWebApplication tipinden bir nesne döndürüyor ve adı yazılyor. Bir SiteCollection içerisinde yer alan tüm sitelere erişmek için SiteCollection'un özelliklerini taşıyan nesne örneği üzerinden AllWebs özelliği kullanılabilir bu özellik de geriye SPWebCollection tipinde bir nesne döndürecektir. Yukarıdaki kodlarda yer alan ilk foreach ile SPWebCollection tipindeki nesnenin içinde yer alan siteler'in özellikleri listeleniyor ve içerde yer alan ikinci foreach içerisinde de sitelerin içinde yer alan listeleler görüntüleniyor. Uygulama çalıştırıldığında ekran görüntüsü aşağıdaki resimdekine benzer bir hal alacaktır.



Hiç yorum yok: