Windows Sharepoint Services 3.0 ve/veya Microsoft Office Sharepoint Server 2007 üzerinde özelleştirmeleri veya geliştirmeleri, sisteme nasıl dahil ettiğimize(deployment) şöyle bir bakalım;
Yazılım ekibi geliştirme süresince geliştirmiş oluşturduğu feature'ları, web partları, event receiver'ları vs. test ortamında denedikten sonra, Sharepoint üzerine, sahip olduğu yetkiyle kurar, istediği feature'ları aktive eder, istediği web part'ı istediği sayfaya yerleştirir, event receiver'larını attachler, gerekli dosyalarını kopyalar ve uygulamasını çalışır hale getirir veya bunları bir paket halıne getirip (.wsp) Central Administration'dan deployment yapar. Daha sonraki ek taleplerle yapılan yeni geliştirmeler aynı şekilde çalışan uygulamaya tekrar kurulur. Bu bir çok geliştirme ekibinin uyguladığı klasik ve en pratik(best practice) yöntemlerdendir.
Fakat bu yöntemde göze bazı eksiklikler çarpabilir. Bunlardan ilk göze çarpanı, çalışan mevcut uygulama üzerinde yapılabilecek yeni bir geliştirmeden kaynaklanabilecek bir hata, sistemin düzgün işlemesini engelleyebilir. Bu anca sıkı kontroller ve testlerle önüne geçilecek bir durum. Sharepoint site yöneticisinin sistem üzerindeki çalışan kodun yol açabileceği hasarların veya performans kaybının boyutlarını bir bakışta anlaması pek mümkün olmamaktadır. Burada bir profesyonelin yardımına ihtiyaç duyabilir. İşin daha farklı boyutu ise şirket geliştirmeler için üçüncü parti bir şirketten hizmet satın almış olabilir veya geliştirmeyi farklı bir yazılım ekibine devretmiş(outsource) olabilir. Veya senaryo bunlardan çok daha farklı olabilir, kendi Sharepoint sunucunuz üzerinde başka kişilere hosting hizmeti veriyor olabilirsiniz. Sistem yöneticisinin bunların hepsini takip edebilmesi için yüksek bir teknik bilgiye sahip olması ve kod erişim güvenliğini (Code Access Security) çok iyi bir şekilde uyguluyor olması gerekmektedir.
Sharepoint 2010'da bu zorluklar göz ardı edilmemiş ve bizlere solution kurulumunda iki farklı seçenek sunulmuştur. Full Trusted Solutions(Farm Level Solutions) ve Sandboxed Solutions...
Full Trusted Solutions yani tam güvenilir çözümler, eski alışkanlıklarımızdan çok da farklı değil. Sisteme hakim, bütün yetkilere sahip kişilerin yaptığı geliştirmeleri içerir, sorgusuz sualsiz sistemimizde çalışır. Sistem yöneticisinin veya sahibinin güvendiği kişiler tarafından geliştirilmesine ve kurulumuna izin verilir.
Asıl yenilik Sandboxed Solutions ile gelmekte. İsminin kum kutusu olmasının sebebi, yapılan geliştirilmenin sisteme adeta bir kum kutusu içerisinde dahil edilmiş gibi davranması. Kutunun dışına çıkmasına izin verilmiyor ve yine kutunun içerisinde olduğu için yaptığı, yapabildiği her şey gözlemlenebiliyor.
Üçüncü kişiler tarafından geliştirilen uygulamalar, sisteme direk olarak dahil edilemiyor. Kurulumu site yöneticisinin veya her hangi bir yetkili kullanıcının yapması gerekiyor. Daha önceden bildiğimiz form kütüphaneleri, master page galerileri, web part galerileri gibi artık solution galerilerimiz var. Yetkili kullanıcı solution'ı, solution galeriye yükledikten sonra kullanıma hazır hale getirebilmektedir. Buraya yüklenen solution aktive edildikten sonra içerisindeki web partlar, featurelar veya içerisinde her ne varsa Sharepoint sitesi içerisinde kullanılabilir hale gelmektedir. Solution içerisindeki bu ekler, aktive edilip Sharepoint içerisine yerleştikten sonra kum kutusundan kurtulmuş sayılmamakta. Sharepoint 2010 bu ekleri(web part, feature, event receiver vs...) sürekli takip etmekte. Sistem kaynaklarını fazla kullanması durumunda veya erişmemesi geriken yerlere erişmeye çalıştığı zamanlarda (farklı bir web application'a erişemeye çalışmak, dosya sistemine erişmek, farm'a erişmek gibi istenmeyecek kodlar) Sharepoint bunları engelleyecektir. Bu uygulamaların neler yaptığı, nerelere eriştiği, sistem kaynaklarını ne kadar kullandığı gibi bilgilerin hepsi site yöneticisi tarafından görüntülenebilecek şekilde anlık raporlanacaktır. Durum böyle olunca artık bu solutionlar, bir bilgi işlem uzmanı veya bir yazılımcının kontrolünde olmak zorunda kalmayacak. Yetkili her hangi bir kullanıcı bunların yönetimini yapabilecektir.
Sandboxed Solution Nasıl Oluşturulur?
Visual Studio 2010'da yeni bir Sharepoint 2010 projesi açtığınız zaman size bunun Sandboxed mı yoksa Farm Level mı olduguğunu soracaktır. Farm level, her şeyi yapmakta özgür olduğunuz fully trusted solutionlardır. Dilediğiniz gibi kodunuzu yazabilir ve çalıştırabilirsiniz. Sandboxed seçtiyseniz eğer aralarındaki farkı zaten size ilk başta Visual Studio 2010'un IntelliSense'i gösterecektir. Bütün Sharepoint sınıflarına(class) ulaşamadığınızı göreceksiniz. Bunların en başında da Sharepoint geliştiricilerinin en sık kullandığı SPSecurity sınıfı olacaktır. IntelliSense bu sınıfı size göstermeyecektir. Hele hele SPSecurity sınıfının içerisindeki RunWithElevatedPrivileges metodunu, asla :) Kod ile değişiklik yapma yetkiniz en fazla SPSite seviyesinde olabilecektir. Daha üst seviyelerde(Web Application, Farm) sadece okuma yetkileriniz olacaktır.
IntelliSensi'in bunları göstermiyor olması tabi ki yazmanıza engel değil. Elle yazdığınız takdirde, Visual Studio, kodunuzu derlemenizde bir sorun çıkarmayacaktır. Bunun sebebi o an önünüzde açık olan projeye referans olarak "14\ISAPI\Microsoft.Sharepoint.dll"'in gösterilmiş olmasıdır. 14 Hive içerisinde yeni bir klasör olarak karşımıza çıkan UserCode klasörünün içinde başka bir Microsoft.Sharepoint dll'i göreceksiniz. (14\UserCode\Assemblies\Microsoft.Sharepoint.dll) Bu dll gerçek Sharepoint dll'inin bir altkümesidir. İçerisinde Sandboxed olarak erişebileceğiniz sınıflar bulunmaktadır. Siz referans olarak sandboxed dll'i kullanırsanız daha sağlıklı bir geliştirme yapabilirsiniz fakat deployment yaparken gerçek Sharepoint dll'ini kullanmanız gerekmektedir.
Solution hazır olduğunda, bu solution'ı Sharepoint üzerindeki Solution Gallery'ye yükleyeceğiz. Bize aktive etmek isteyip istemediğimizi soracak; o an aktivasyon işlemini yapabilir veya daha sonra aktive edebilirsiniz. Aktive olduktan sonra solution içerisindeki feature'lar aktive olacak, web partlar galeride yerini alacak, varsa site, liste şablonları, content type'lar, site kolonları yerlerini alacak ve hazır olacaktır. Yazılan kodlar Sharepoint denetiminde çalışacak. Eğer kodunuzda kullanmamanız gereken bir sınıf veya metod veya özellik kullandıysanız (IntelliSense'in kısıtladıklarıdır bunlar) çalıştığı zaman hata fırlatacaktır.
Özet: