Makale Özeti

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 makalemizde SharePoint Nesne Modeli içerisinde yer alan SPWeb ve SPSite sınıflarına deyiniyor olacağız.

Makale

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 makalemizde SharePoint Nesne Modeli içerisinde yer alan SPWeb ve SPSite sınıflarına deyiniyor 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.

SharePoint Site Hiyerarşisi

Ş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.

SiteCollection içerisinde yer alan sitelerin listelenmesi

Nesne modeli kullanılarak yeni bir SiteCollection oluşturmak için de aşağıdaki kodlar kullanılabilir. Kodlarda ilk olarak bir SiteCollection'ın adresi belirtilerek bir SPSite tipinde bir nesne oluşturuluyor ardından da bu SiteCollection'ın yer aldığı WebApplication elde edilip WebApplication içerisine yeni bir SiteCollection oluşturuluyor.

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

//80. portta yer alacak olan bir SiteCollection oluşturmak için 80. portta bulunan web application elde ediliyor...
SPWebApplication webApplication = litwareportal.WebApplication;
webApplication.Sites.Add("/sites/MossDevelopment", "MossDeveleopment", "Bu site kod yazarak oluşturuldu...", 1033, "STS#0", @"Litwareinc\Administrator", "Administrator", "admin@litwareinc.com");
Console.WriteLine("Yeni SiteCollection Eklendi...");

Kodlar incelendiğinde ilk parametre olarak oluşturulacak olan SiteCollection'ın Path'inin gönderildiği görülecektir. İkinci parametre olarak da SiteCollection oluşturulurken SiteCollection içerisinde yer alacak olan TopLevelSite adındaki root sitenin adı ve üçüncü parametre olarak da tanımlaması belirtiliyor. Dördüncü parametre olarak sitenin dili belirtiliyor bu alanda 1033 İngilizce'ye karşılık gelmektedir. STS#0 ile TopLevelSite'ın şablonu belirtiliyor ve ardından son iki parametre olarak da sitenin sahibi ve mail adresi belirleniyor.

SiteCollection içerisinde yer alan bir sitenin herhangi bir özelliğini programatik olarak güncellemek için de aşağıdaki kodlar kullanılabilir.

 SPSite site = new SPSite("http://litwareportal/sites/MossDevelopment");
SPWeb web = site.OpenWeb();
web.Title = "MOSS Development";
//Güncellemelerde Update() metodunun çalıştırılması gerekiyor...
web.Update();
Console.WriteLine("Site Güncellendi...");

Kodlarda daha önceliklerden faklı olarak OpenWeb() isimli bir metod kullanıldığı dikkat çekmektedir. Bu metod bir SiteCollection içerisinde yer alan bir sitenin nesnesini döndürür. Kodlarda görüldüğü gibi boş olarak kullanıldığında SiteCollection içerisinde yer alan ve SiteCollection oluşturulurken oluşturulan TopLevelSite'ın nesne örneği oluşturulur ve onun üzerinde işlem gerçekleştirilebilir. OpenWeb() metodunun OverLoad'larından bir diğeri de string olarak site URL'ini kabul eden bir metoddur. Bu metot aracılığı ile SiteCollection içerisinde yer alan bir Site açılıp üzerinden işlem gerçekleştirilebilir.

SiteCollection içerisine yeni bir Site eklemek için de aşağıdaki kodlar kullanılabilir.

 SPSite site = new SPSite("http://litwareportal/sites/MossDevelopment");
SPWebTemplateCollection allTemplates = site.GetWebTemplates(1033);
SPWebTemplate template = allTemplates["BLOG#0"];
SPWeb blogSite = site.AllWebs.Add("blog", "Burak's", "Burak'ın Bloğu", 1033, template, false, false);
Console.WriteLine("{0} isimli site oluşturuldu...", blogSite.Title);

Yukarıdaki kodlarda da SPWebTemplateCollection isimli bir koleksiyon dikkat çekiyor bu koleksiyon Site template'lerini taşımak için oluşturulmuş bir koleksiyondur ve bir önceki satırda oluşturulan SPSite nesnesi içerisinde yer alan 1033 dilinde yani İngilizce'de yer alan şablonlar SPWebTemplateCollection tipinden oluşturulan nesneye alınıyor ve bir alt satırda da içlerinden daha bir tanesi daha sonra kullanılmak üzere SPWebTemplate tipinde tanımlanan nesne üzerine alınıyor. SiteCollection'a yeni bir Site eklemek için SPSite'ın AllWebs koleksiyonu kullanılıyot ve koleksiyonun Add metodu ile yeni bir Site ekleniyor, bu alanda metodun ilk parametresi sitenin URL'ini, ikincisi adını üçüncüsü de tanımlamasını ifade ediyor. Dördüncü parametre dili ve beşinci parametre de anlaşılacağı üzere sitenin şablonunu ifade ediyor. Bu alanda daha önce template isimli değişkende depolanan "BLOG#0" isimli template Blog Template'ini işaret etmektedir. Son iki parametreye false değeri atandığı görülmektedir bunlardan ilki site için ayrı bir güvenlik alt yapısının kullanılıp kullanılmayacağını belirtmektedir, false diyerek parent site'ın güvenlik ayarlarının bu site için de aynen uygulanacağını belirtmiş olduk. Son parametre ise belirtilen URL'in boş olmaması durumunda ne yapılacağını belirtmektedir, bu alanda false vererek daha önce belirtilen URL'in kullanılması durumunda hata mesajı fırlatılması sağlandı eğer true olarak belirtilirse belirtilen URL MOSS'un kullanacağı bir URL haline getirilip site oluşturuluyor olacaktır.

Bu makalemizde MOSS'un nesne modeli içerisinde yer alan SPSite ve SPWeb sınıflarına deyindik, ilerleyen makalelerde Nesne modeli içerisinde yer alan diğer sınıflarıda ele almaya çalışacağız.

Burak Batur
www.burakbatur.com
burak.batur@netron.com.tr