Öyle bir tablom olsun ki sınırsız kategori ve alt kategori ekleyebileyim. Neden bahsettiğimi anladınız sanırım :) Halk arasında Sınırsız Ağaç Yapısı denilen tablo çeşidi.
Örnek tablo:

Örneğimizdeki yapı şöyle olacak; Kategori hiyerarşinin en üstünde ise alt kategori değeri 0 (sıfır) olacak. Değilse üst kategorinin id değeri yer alacak.

Azıcık kod yazalım.
.png)
Sonuç;

Örnek proje.
Geçenlerde Asp.Net sunucu kontrollerinden Takvim (Calendar) üzerine uygulama geliştiriyorduk. Önemli günleri vurgulamak çok klasik bir örnektir. Bizde bu örnek üzerinden yola çıktık. Farklı olarak, gün seçildiğinde sonuçları popup pencere ile göstermeye karar verdik.
Örneği besleyecek basit bir xml verisi hazırladık. Veriyi kodda kullanmayı sağlayan basitte bir class yazdık. Gerisi Takvim kontrolünü kullanamaya kaldı.
Sonuçları popup pencerede nasıl göstereceğimizi anlamak için Takvim kontrolünü biraz irdelemek gerekir. Kontrol tarayıcı penceresine basıldığında (Render) html tarafında bir table etiketine karşılık gelir. Varsayılan olarakta herbir hücredeki (td) gün ifadesi anchor etiketi içinde gösterilir. Hücerelere tıklandığında ise dopostback fonksiyonu tetiklenerek işlem yapılır. Fakat bizim uygulamamızda anchor' a ihtiyaç yok.

O yüzden kontrolün SelectionMode özelliğini None olarak ayarlıyoruz. Böylece hücre içlerine sadece gün değerleri eklenir.

Detayları göstereceğimiz popup penceresini açmak için basit bir JavaScript fonksiyonu hazırlıyoruz.

Önemli günleri vurgulayacak kodlarımızı Takvim kontrolünün DayRender adlı olayına yazıyoruz. Bu olay, her bir gün için bir kez tekrarlanır.
Uygun günü yakaladığımızda, hücre içini temizleyip yerine openPen JavaScript fonksiyonunu çağıran bir HyperLink kontrolü ekliyoruz.
Bundan sonra çeşitlendirmek mümkün.

Uygulamayı daha iyi anlamak için aşağıdaki projeyi indirip bakmanızda fayda var.
![]()
Nihayet Visual Studio 2010 RC sürümüne ulaştı. Artık kullanma zamanı gelmiştir benim için. Bundan sonra sitemde yayınlayacağım projeler bu versiyonda olacak.
Geçen hafta 1. bölümü biten site yayınlama konusunun devamı.
Bu bölümde, uygulama için tasarlanmış veritabanını uzak sunucuya nasıl aktarılacağına bakacağız. Burada ki söz konusu veritabanı MS Sql Server 2000 yada daha yeni bir sürüm olacak.
Tabiki de bu işlemleri yaparken hizmeti aldığımız hosting firmasının bize sunduğu imkanlar çok önemli. Biz olayı, bakup-restore imkanı vermeyen hosting firmalar için ele alacağız.
Hosting firması, bir arayüz ile backup/restore hizmeti vermiyor yada uyumsuzluklardan dolayı işlemi gerçekleştiremiyorsanız yapmanız gereken;
Önce veritabanının DDL(Create) scriptini oluştumanız daha sonra bunu çalıştırmalısınız. İskeleti oluşturduktan sonra DML(Insert) scriptlerini (ki bu çok zahmetli bir işlemdir) oluşturup yine sunucuda çalıştırmanız gerekmektedir. Klasik MS Sql Server Management Studio sadece DDL scriptleri oluşturabilir. İşte tam burada Sql Publish Wizard uygulaması devreye girip hayatımızı kurtarıyor.
VS2008 kurulu ise SWP uygulamasını şu dizin altından bulabilirsiniz;
64 bit işlemciler için C:\Program Files (x86)\Microsoft SQL Server\90\Tools\Publishing\1.2
32 bit işlemciler için C:\Program Files\Microsoft SQL Server\90\Tools\Publishing\1.2
Başlamadan önce belirtmeliyim ki, SPW ile oluşturulan scriptler var olan bir veritabanı üzerinde işlem yapar. Öncelikle sunucu üzerinde aynı adlı bir veritabanı oluşturmuş olmanız gerekmektedir.

Kendi bilgisayarınızda kurulu olan sql server' a bağlantı kuruyoruz.

Publish edilecek veritabınını seçiyoruz. "Script all objects in the selected database" seçeneği seçildiği takdirde, adım sayısı azalacak ve gerekli olan tüm ddl ve dml scripleri direk oluşacaktır.

İhtiyaç duyduğumuz nesneleri (Table,View,Procedure vs) seçiyoruz.

Oluşacak script için dosya adı ve yolu belirliyoruz.

Uygun Ms Sql Server versiyonu seçillir.


Özet bilgisi ve ardından scriptimiz oluşturulur.
Bu işlemlerden sonra yapmanız gereken tek şey, oluşan script içeriğini host firmasının size verdiği arayüz de çalıştırmak olacaktır.
İkinci bölümün sonu...
Asp.Net eğitimi alan hemen hemen tüm öğrencilerin sıkıntılarından biri de, yapılan uygulamaların gerçek sunucuda nasıl yayınlanacağıdır. İşi bilenler için gayet basit gibi görünse de tecrübesi olmayan kişiler için ızdırap haline dönüşebilir.
Hal böyle olunca bu konu ile ilgili tecrübelerimi aktaracağım küçük bir yazı dizisi hazırladım.
Konuyu üç bölüm halinde işleyeceğim. İlk bölüm, uygulamanın ftp ile sunucuya yüklenmesi. İkinci bölüm, uygulamanın (varsa) kullandığı veritabanının sunucuya yüklenmesi. Son ve üçüncü bölüm ise bir takım ipuçları içerecektir.
Bu bölümde, resimde görülen örnek projeyi sunucuya yüklenecek hale getireceğiz. Bunu göstermemim sebebi, uygulamanın çalışması için sunucuya herşeyi yüklenmesine gerek olmadığıdır.

Yayınlamadan önce bir iki ayar yapmamız gerekiyor. Web.config dosyasını açıp, compilation -> debug özelliğinin degerini false olarak ayarlıyoruz. Bu performans açısından önemli.

Bu konu ile ilgili daha fazla bilgi edinmek isterseniz Scott Guthrie's şu yazısını okumanızı tavsiye ederim.
Daha sonra, çalışma zamanında ki (Runtime) olası hataları daha ayrıntılı görmek için customError -> mode özelliğinin değerini false olarak ayarlıyoruz.

Bunu yapmanızı özellikle tavsiye ederim. Genelde ilk denemelerde hata alma olasılığı yüksektir. Detay görmek problemleri çözmekte çok faydalı olacaktır. Her şey yoluna girdiğinde şu yazıdaki gibi bir hata yönetimi yapmak işinize yarayabilir.
Internet Explorer -> Settings -> Advanced

| Seçili | Seçili Değil |
![]() |
![]() |
Yayın öncesi ayarları yaptıktan sonra sıra geldi uygulamanın sunucuya gönderilecek çıktısının alınması. Bunun için Projeye sağ tıklayıp publish komutunu veriyoruz. Bu komut ile proje önce derlenir, hata (Error) alınırsa işlem iptal olur. Kimi zaman ikazlar (Warning) alabilirsiniz ve genelde de size nerede olduğu konusundan bilgi vermez. Bu gibi durumlarda aklıma gelen olası sorun, projenin ihtiyaç duyduğu bir kaynağı (resim, script vs) bulamamasıdır.

Asp.Net projeleri için birden fazla Publish seçeneği bulunmaktadır. Varsayılan seçenek, belirtilen bir klasöre sadece sunucuya gitmesi gereken dosya va klasörlerin çıktısını oluşturu. Zaten bu da bizim istediğimiz seçenek. Diğer seçenekleri görmek yada kullanmak için (Örneğin local sunucuya yayınlamak gibi) üzerinde üç nokta bulunan düğme işinizi görecektir. Herhangi bir değişiklik yapmadan çıktılar için bir yol belirliyoruz.

İşlem başarılı bir şekilde tamamlandığında aşağıdaki gibi bir klasör çıktısı olacaktır. Bunlar sunucuya gitmesi gereken dosyalardır.

Bin klasöründeki dll dosyaları ve config uzantılı dosyalar sunucuya yüklendiğinde(upload) uygulamanız sonladırılır(Application End) ve ilk çağrıda yeniden başlar(Application Start). Bu durumda uygulama içindeki tüm oturum vs yok olacaktır. Size tavsiyem bakım zamanlarını geç saatlerde yapın ve app_ofline.htm adında bir dosya oluşturup sitenin kök klasörüne koyun. Uygulama erişimini engelleyecektir.
Geriye son bir işlem kaldı. Çıktıların sunucuya yüklenmesine. Bunun için bir ftp uygulamasına ihtiyac var. Bir çok paralı yada parasız alternatif olmasına karşın benim tavsiye Total Commander adlı uygulamyı kullanmanız.

Resimde görüldüğü gibi ftp sunucunuzu uygulamaya kayıt edin. Publish klasöründeki tüm dosyaları sunucu bilgisayarında size verilen (bu genelde ya wwwroot yada httpdocs adında bir klasör olur) klasöre kopyalayın.

Enterprise Library, Linq yada EntityFramework gibi yapılar kullanacaksanız, hosting paketinizin size vermiş olduğu Trust Level' ın medium yada full olduğundan emin olun. MVC gibi OutOfBand (şimdilik) denilen framework'lerinde direk çalışmadığını belirtmek isterim . Bunun için sunucunuzdan destek almalısınız.
Artık (veritabanı kullanmıyorsanız) uygulamayı test edebilirsiniz. Olası durumalara karşı problemleri çözüp yukarıda gerekli adımları tekrar etmeniz yeterli olacaktır.
Birinci bölümün sonu ...