Makale Özeti

Bir önceki makalemizde SharePoint Object Model'e giriş yapmış SPSite ve SPWeb sınıfları üzerinde gerçekleştirilebilecek olan işlemlerin bir kaçından bahsetmiştik. Bu makalemizde ise MOSS 2007'nin önemli kavramlarınan olan Feature'lar üzerinde duruyor olacağız.

Makale

Feature'lar MOSS 2007'de bir sitenin gerçekleştirip gerçekleştiremeyeceği işlemleri belirlemek için kullanılabilecek kavramlardır. Türkçe'ye "özellik" şeklinde çevirebileceğimiz Feature kavramı gerçek anlamda da sitelerin özelliklerini kısıtlayıp genişletebilmektedir. Örneğin bir site içerisinde arama işlemlerinde kullanılabilecek WebPart'ların kullanılabilmesi için Office SharePoint Server Search Web Parts özelliğinin açık olması gerekmektedir ya da bir site içerisinde Disposition Workflow'un kullanılabilmesi için Disposition Approval Workflow özelliğinin açık olması gerekmektedir, bahsedilen bu iki Feature da SiteCollection düzeyinde Fetaure'lardır Site düzeyinde olup sadece Site'ı etkileyen Feature'larda mevcuttur Office SharePoint Server Publishing Fetaure'ı bunlardan biridir ve sitenin daha görsel ve daha interaktif bir duruma getirilmesine olanak tanır. Bir Site'ın ya da SiteCollection'ın Feature'larını görüp aktif pasif etmek için site ayarlarından Site Features ve Site Collection Features bağlantıları kullanılabilir.

Nesne modeli açısından baktığımızda SPFeatureDefinition ve SPFeature adında iki sınıf bizi karşılıyor olacaktır. SPFeatureDefinition bir Feature MOSS'a yüklendikten sonra bu Feature'a erişmek için kullanılabilecek bir sınıftır. SPFeatureDefinition üzerinden erişilen Feature'lar abstract class'lara benzetilebilir, nasıl bir abstract class direkt kullanılamayıp ondan kalıtılan bir sınıf üzerinden kullanılabiliyorsa Farm düzeyindeki SPFeatureDefinition sınıfı ile erişilebilien Feature'larda direkt kullanılamaz, kullanılması için herhangi bir sitede aktif duruma getirilmesi gerekmektedir. Farm düzeyindeki Feature'ın aktif edilmiş haline de SPFeature sınıfı aracılığı erişilebilir.

MOSS'da her nesnenin bir ID'si vardır. GUID tipinde olan bu ID'ler nesnelere erişim için önemli bir yere sahiptir ve nesne modelinde de pek çok yerde kullanılması gerekir. Kullanılması gereken yerlerden biri de Feature'lardır ve bu ID'lere de özellik olarak nesne örnekleri üzerinden ulaşılabilir. Aşağıdaki kodlarda bir sitede kullanılan Feature'ları listeleyecek olan küçük bir programcık yer almaktadır. Kodlardan da anlaşılacağı üzere bu kodlar bir Console uygulamasıdır ve kodların çalışması için bir önceki makalede belirtmiş olduğumuz path'de yer alan Microsoft.SharePoint.dll isimli dll'in refere edilmiş ve Microsoft.SharePoint isimli namespace'in eklenmiş olması gerekmektedir.

 SPSite site = new SPSite("http://litwareportal");
SPFeatureCollection siteFeatures = site.Features;

foreach (SPFeature feature in siteFeatures)
{
     Console.WriteLine(feature.Definition.DisplayName);
     Console.WriteLine(feature.Definition.Id);
     SPFeaturePropertyCollection featureoOzellikleri = feature.Properties;

          foreach (SPFeatureProperty property in featureoOzellikleri)
         {
                Console.WriteLine("\tProp name: " + property.Name);
                Console.WriteLine("\tProp value:" + property.Value);
         }
}

Kodlardan da görüleceği üzere bir SiteCollection düzeyinde kullanılan Feature'ları elde etmek için SPSite tipindeki nesne örneğinin Fetaures koleksiyonu kullanılmaktadır, bahsedilen koleksiyon geriye SPFetaureCollection tipinden bir koleksiyon döndürüyor ve foreach döngüsü ile de bu koleksiyon içerisinde geziliyor. Bir Feature'ın Definition'ınına yani Farm düzeyindeki tanımlamasına Definition özelliği aracılığı ile erişilebilir. Yukarıdaki kodlarda da Definition ID'sini yani Fetaure MOSS'a yüklenirken belirtilen GUID'i elde edebiliyoruz ve DisplayName özelliği ile de görüntülenen ismi ekrana yazdırılıyor. İkinci foreach ile de Fetaure'ın Property'leri üzerinde gezilip propetylerin adı ve taşıdıkları değerler ekrana yazdırılıyor. Program çalıştırılınca aşağıdaki gibi bir görünüm elde ediliyor olacaktır.

Bir SiteCollection içerisinde kullanıaln Feature'ları elde etmek...

Yukarıda http://litwareportal adresinden erişilen SiteCollection içerisinde kullanılan yani aktif olan Feature'lar yer almaktadır. Bu Fetaure'lardan herhangi birini kaldırmak yani pasif konuma getirmek için SPSite tipinde oluşturulan nesnenin Features koleksiyonun Remove metodu kullanılabilir, bu metod içerisine pasif konuma getirilecek olan Fetaure'ın ID'sini GUID olarak kabul ediyor olacaktır. Aşağıdaki kodlarda bu durum örneklenmektedir.

 SPSite site = new SPSite("http://litwareportal");
site.Features.Remove(new Guid("a392da98-270b-4e85-9769-04c0fde267aa"));
Console.WriteLine("Fetaure Silindi...");

Benzer bir şekilde bir Fetaure'ı aktif hale getirmek için ise Add metodu kullanılıyor olacaktır, aşağıdaki kodlar da bu durumu örneklemektedir.

SPSite site = new SPSite("http://litwareportal");
site.Features.Add(new Guid("a392da98-270b-4e85-9769-04c0fde267aa"));
Console.WriteLine("Fetaure aktif hale getirildi...");

Bu makalemizde MOSS'daki Feature kavramını ve programatik olarak bir Feature'ın nasıl aktif ya da pasif konuma getirilebileceğinin üzerinde durmaya çalıştık. Bir sonraki makalemizde ise bir Farm'daki Feature'ları listeleyip bunların hangilerinin belirtilen SiteCollection'da kullanılıp kullanılmadığını izliyor olacağız...

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