23 Ekim 2009 Cuma

Sharepoint Crawling ile ilgili bilinmesi gereken hatalar

Error in Microsoft Windows SharePoint Services Protocol Handler şeklinde bir hata alırsanız crawl sırasında bunun nedeni I( büyük ı harfi) ile başlayan site isimleri olabilir. Uygulamamızdaki Infocenter sitesi altındaki hiç bir content crawl edilememiş ve crawl loglarında yukarıda belirtiğim hata ile karşılaşmıştım. Infocenter olan site ismini infocenter olarak değiştirip yeniden crawl başlattığımda sorun çözüldü.

19 Ekim 2009 Pazartesi

SSP Problemi

The DataSourceID of 'QuickLaunchMenu' must be the ID of a control of type
IHierarchicalDataSource. A control with ID 'QuickLaunchSiteMap' could not be
found hatası almaya başladım birden bire ssp uygulamamı açmak istediğimde. Hiç bir yerini editlememe rağmen bu hatayı almam ilginçti. Uzun uğraşlar sonucu hatanın kaynağını buldum. yazdıgım bir solution global olarak deploy edilince ssp uygulamamın web.config dosyasındaki safe controllere bir entry yazmış. Bu safe control entrysini silince sorun düzeldi. Bu hata ile karşılaşmanız durumunda kulağınıza küpe olsun

7 Ekim 2009 Çarşamba

Sharepoint'te doküman kütüphanelerine yüklenebilecek dosya boyutu limitini değiştirmek

Sharepoint'te bir doküman kitaplığına dosya eklemeye çalıştığınız zaman izin verilen maksimum dosya boyutu 50 MBdır. Bu boyutun üstünde bir dosyanın Sharepoint server üzerinde tutulması tavsiye edilmese de böyle bir istekle karşılaştığınızda yapmanız gereken Central Administration>Application Management>Web application general
settings sekmelerini izleyerek maksimum dosya boyutunu arttırmaktır. Maalesef bildiğim ve araştırdığım kadarıyla bu dosya boyutunu sadece uygulamadaki bir doküman kitaplığı üzerinde arttırmak mümkün değil.

Kendi STSADM commandimizi yaratmak

Geçen gün internette Sharepoint üzerine favori bloglarımı incelerken çok ilgimi çeken bir postla karşılaştım. Bugüne kadar default metotlarını kullandıgımız Stsadm'e metot eklememiz meğer mümkünmüş. ISPStsadmCommand arayüzünü implemente edip Run ve GetHelpMessage metotlarının içlerini doldururuz. Yapılacak işlemleri Run metodunun içine yazmamız gerekirken Help istendiğinde kullanıcıya gösterilecek mesajı döndüren metot GetHelpMessage metodudur. Sınıfımızı yarattıktan sonra oluşan dlli sign edip gac a attıktan sonra C:\Program Files\Common Files\microsoft shared\Web Server Extensions\12\CONFIG altında stsadmcommandnameimiz.xml uzantılı bir dosya oluşturarak bu dosyada commands node unun altına command nodeları şeklinde kendi commandlerimizi yazarak işlemi tamamlarız. Her bir command sekmesinin altında name ve class elementleri bulunmalıdır. Name elementi operasyonun adını tutarken, class da bu operasyonun tanımlandıgı sınıfı tanımlar. Bununla ilgili örneği Liam Clearynin blogundaki yazıda bulabilirsiniz. Konuyla ilgili deneme yaparken sorularınızı bekliyorum..

6 Ekim 2009 Salı

Productiondaki Sitemizle Development yapabilmek için ne yapmak gerekir?

Evet, .net uygulamalarında bildiğiniz gibi productiona aldığınız uygulamanızın veritabanını yedekleyip kendi localinize restore ederek production ortamınıza karşı geliştirme yapmayı sağlayabilirsiniz, fakat durum Sharepoint uygulamaları yapıyorsanız biraz daha karmaşıktır. Sharepoint MVPlerinden Andrew Connell'ın bu konuda yazdığı makale ilginizi çekecektir. Çok güzel bir biçimde anlatılmış ve sharepoint developerlarının en büyük sorunlarından birine çözüm olacaktır.

4 Ekim 2009 Pazar

Doküman Kitaplığında bir itemın check-outlu olup olmadıgını anlamak

Sharepoint doküman kitaplıkları(Document Library) ile uğraşırken en önemli problemlerden biri Doküman kitaplığında bulunan bir sayfanın özelliklerini değiştirmek istediğinizde sayfayı check-out etmeniz gerektiğidir. Bunu kod tarafında yapmak istersek SPFile nesnemizin "CheckOutStatus" isimli özelliğini kontrol etmemiz gerekir. Bu özellik SPFile.SPCheckOutStatus tipinde bir enum değeri taşır. Bu enumerasyonun alabileceği Değerler;
1) None--> dosya check out edilmemiştir.
2) LongTerm--> Dosya Sharepoint arayüzü tarafından checkout edilmiştir.
3) LongTermOffline--> Dosya çevrimdışı editlenmek üzere check out edilmiştir.
4) ShortTerm--> Dosya bir client uygulama tarafından lock edilmiştir.

Bizim projemizde bana gereken check-out edimemiş dosyayı check out etmek ve editlemekti. Bunun için
if(file.CheckOutStatus==SPFile.SPCheckOutStatus.None)
file.CheckOut();

Kodu yeterli olacaktır.

1 Ekim 2009 Perşembe

Sharepoint 500 Internal Server Error hatası

Geçen farma bir server ekledik, ve o server üzerinde bir uygulama çağırdığımda 500 Internal server error hatası ile karşılaştım. Ne Event Logda ne de server loglarında bir detaylı bilgi bulamadım. Bunun üzerine epey bir uğrastıktan sonra Central Administration > Operations > Diagnistic Logging sekmesi altındaki Logging Level ımı "unexpected" dan "verbose" a değiştirdim ve sayfayı çağırdığımda
"Cannot make a cache safe URL for "init.js", file not found.
Please verify that the file exists under the layouts directory."
hatası ile hatanın içeriğine erişebildim. Bu hata farma yeni eklenen makineye dil servis paketinin yüklenmemiş olmasından dolayı her dil servis paketinde bulunan init.js dosyasının bulamamısından kaynaklanıyormuş.

BLOB Caching

BLOB Caching nedir önce ondan başlayalım. BLOB , Binary Large Object anlamına gelir, BLOB Caching ise Binary yapıdaki büyük sizedaki objelerin cachlenerek Sharepoint Uygulamalarımızın performansının artmasını sağlayan bir mekanizmadır. BLOB Caching aktifleştirildiğinde, Web Front Endimizin database servera gidip gelmek için yaptıgı round trip sayısı azalır, Site Collection üzerindeki tüm imajların front endimizin diskinde tutulması sağlanmış olur. Blob caching ayarları uygulamanın web.config dosyasından yapılır. Bu ayarlarda en önemli özellik max-age özelliğidir. Bu özellik saniye cinsinden browserın web front ende bir imaj sormak için gitmemesi gereken süreyi belirtir. Aşağıda gördüğünüz web.config deki BlobCache sekmesi tüm imajların web front endimizin c:\blobCache diziinde depolanmasını ve browserın 24 saat süresince istekte bulunmamasını sağlayacaktır.
<BlobCache location="C:\blobCache" path="\.(gif|jpg|png|css|js)$" maxSize="10" max-age="86400" enabled="true"/>

Programatik olarak SPFieldLookup yaratmak

Epeydir projeler dolayısıyla blogumu güncelleyememiştim. Bazı yazılarım yazılımkulubu.com tarafından yayınlandı. Oradan da faydalı birtakım paylaşımlarıma ulaşabilirsiniz . Bugünkü yazım kısa bir SPFieldLookup yaratma örneği olacak, umarım faydalı olur. MyList isimli listeme Lookup isimli MylookupList isimli listenin Title fieldına lookup yapacak bir field eklemek için gerekli kod aşağıdaki gibidir
SPList myList = web.Lists["MyList"];
SPList myLookupList = web.Lists["MyLookupList"];

myList.Fields.AddLookup("Lookup", myLookupList.ID, false);
SPFieldLookup fieldLookup = myList.Fields["Lookup"] as SPFieldLookup;
// Display Title Column in lookup field
// (this is shown by default but this way you can change it)
fieldLookup.LookupField =
myLookupList.Fields[SPBuiltInFieldId.Title].InternalName;
fieldLookup.Update();