ASP.NET İle ProgressBar Kontrolü
Değişen zaman ve buna paralel olarak gelişen teknoloji ile birlikte, insanların ihtiyaçlarıda günden güne değişim göstermekte. Firmalar ise bu değişime kayıtsız kalmamak adına, sürekli yeni teknolojilerin daha etkin kullanımını sağlayarak müşterilerine daha kaliteli, sorunsuz ve kesintisiz hizmet götürmek üzere sürekli çalışıyorlar. Son yıllarda en hızlı gelişen teknoloji olan internet ağı artık hepimizin evine kadar ulaşmışdurumda ve biz bu teknolojiyi şimidilerde alışveriş yapmak, sinema bileti almak, faturalarımız ödemek ve hatta birçok bankacılık işlemimizi oturduğumuz yerden yapmak için kullanıyor ve bunu yaparken de bir yandan sörf yapıp müik dinleyebiliyor sonuç olarak da hoşça vakit geçirebiliyoruz. Sanıyorum internet teknolojilerinin bu denli yaygınlaşıp hayatımıza girmesinin, insanlık tarihi boyunca gerçekleşmiş en önemli devrimlerden biri olarak kabul ediliyor olması, artık herkesçe bilinen su götürmez bir gerçek halini aldı Tabiki internet geliştikçe, insanların ihtiyaçları ve beklentileri arttıkça, biz yazılım geliştiricilerin sorumlulukları ve çözmeleri gereken problemler de katlanarak çoğaldı. Bugünlerde insanlar internete sadece zaman geçirip eğlenmek ya da aradıkları bilgiye ulaşmak amacıyla bağlanmıyorlar. Artık internet, birtakım günlük işlerin ve ihtiyaçların halledildiği farklı bir alternatif olarak karışımızda. Fakat bu günlük işlerin yapılabildiği yazılımlar ortaya çıkarken yazılan kodlar, çıkarılan algoritmalar günden güne daha karmaşık hale geliyor. Yapılan işlemlerin süresi uzadıkça aşılması gereken hız problemleri ve yazılım ürünlerini kullananlarında sıkılmadan işlerine devam etmelerinin sağlanması biz yazılım geliştiricilerin görevlerinden biri haline geliyor. Daha önceleri sıkça kullanılan desktop uygulamalarında uzun süreli işlemlerin yapılması sırasında, kullanıcıyı birşeylerin yapıldığı konusunda ikna edebilmek ve belki de programı istenmeyen bir şekilde sonlandırmasını engellemek için ProgressBar kontrolü kullanımı yazılımcılar tarafından sıkça kullanılan bir yöntemdi. Fakat yeni trend olan internet teknolojilerinde ve bu teknolojileri kulalnan yazılımların geliştirilmesini sağlayan araçlarda ProgressBar benzeri bir yapının bulunmaması hepimizin en çok eksikliğini çektiği bir yapı (Burada tabiki Microsoft Visual Studio.NET uygulamasından bahsediyorum ve malesef ProgressBar kontorlü bu yazılm içerisinde ASP.NET ile uygulama geliştirenlerin kullanımına sunulmadı ) Fakat yinede elimizdeki imkanlarla bu kontrolü kodlayarak, web uygulamalarımızda kullanmak imkansız değil. İlerleyen kısımlarda kod örnekleriyle, bu yapının nasıl kullanılacağına dair önemli düzeyde bilgi sahibi olacaksınız. Ama öncelikle windows ugulamalarımızda kolaylıkla kullanabildiğimiz bu yapının web’de neden bizler için bu kadar problem yarattığına kısaca değinelim. İnternet’in Anatomisi ve ProgressBar
<script language="javascript"> var objMesaj = null; var objBar = null; var limitDoldu = false;
function HerseyiBaslat(btn){ if(btn.value == 'Demoyu Tekrar Hazırla'){ eval("location.href = 'Demo.aspx' "); }else{ BarGoruntule(true); window.frames['progressIFrame'].location.href = "Islem.aspx"; } }
function ProgressBarAyarla(yuzde, mesaj){ if(yuzde <= 100){ if(objMesaj == null){ objMesaj = document.getElementById('uyariMesajlari'); } if(objBar == null){ objBar = document.getElementById('progressBar'); } if(mesaj != null && mesaj != ''){ objMesaj.innerHTML = mesaj; } if(yuzde > 0){ objBar.innerHTML = '.'; } else{ objBar.innerHTML = ''; } objBar.style.width = yuzde.toString() + '%';
if(yuzde == 100){ BarGoruntule(false); var progressStartButton = document.getElementById('progressStartButton'); progressStartButton.value = "Demoyu Tekrar Hazırla";
var uyariMesajlari = document.getElementById('uyariMesajlari');
uyariMesajlari.innerHTML = 'Örnek Uygulama Tamamlandı.'; } } else{ limitDoldu = true; } }
function BarGoruntule(progressCalisiyorMu){ var progressBarBolgesi = document.getElementById('progressBarBolgesi'); var progressControlArea = document.getElementById('progressControlArea'); if (progressCalisiyorMu == true ){ progressBarBolgesi.style.display = 'block' ; progressControlArea.style.display = 'none' ; } else{ progressBarBolgesi.style.display = 'none' ; progressControlArea.style.display = 'block' ; } } </script>
Burada dikkat edilmesi gereken konu ProgressCore isimli class’ın kullanılma mantığıdır. İşleme başlamadan önce ProgressCore.IslemeBasla() metodu kullanılarak uygulama içerisinde kritik bölgeye girildiği ve gerekli ilk atamaların yapılarak ProgressBar gösteriminin başlaması gerektiği uygulamaya bildiriliyor. Aynı şekilde de ProgressCore.IslemiBitir() metoduyla da kritik bölgeden artık çıkıldığı ve gösterimin sona erdirilmesi mesajı class dosyasına iletiliyor. ProgressCore.Ilerle() metodu ise, işlemin bir basamak daha ileriye gittiğini ve ProgressBar gösterimi için kullanılan DIV objesinin genişliğinin bir birim daha artırılması gerektiği yine aynı class’a bildiriyor. Bu class içerisinde de .NET Framework içerisinde HtmlTextWriter objesi ile sayfaya bu 3 metod için yazılması gereken HTML etiketleri özellik değerleri ile birlikte gönderiliyor. Yani ProgressBar gösterimi için kullanıllan dosyamız Demo.aspx dosyası. Fakat bu dosya içerisinde oluşturulan DIV objeleri, IFRAME içerisinde bulunan Islem.aspx içerisindeki ProgressCore.vb de bulunan metdolar ile çağrılıyor. Ve bu metodlar tarafından da DIV objesinin enişliği periyodik zaman dilimleri içerisinde (bu örnek için 2 thread yaartılması arasında geçen zaman) değiştiriliyor. ProgressCore.vb içersindeki kodları inceleyecek olursak;
Windows masaüstü uygulamalarında sıkça ve kolaylıkla kullandığımız ProgressBar kontrolünün, web uygulamalarında nasıl kullanılabileceği ve kullanılırken ne gibi problemlerle karşılaşılabiliceği gibi konulara, bu makalede mümkün olduğunca detaylı olarak değinmeye çalıştım. İnternetin doğası gereği istemci ve sunucunun birbirinden bağımsız ve herhangi bir alışveriş olmaması durumunda tamamen bağlantısız çalıştığını söyledik. Bu da durum kontrolü yapmamızı ve sunucuda gerçekleşen olaylar hakkında kullanıcıyı bilgilendirmenin zorluklarından bahsettik. Fakat sonuç olarak bunun çözülemez bir problem olmadığını, çeşitli programlama yapılarıyla nasıl sorunsuz çalıştırılabileceğini hepbirlikte inceledik.
Son günlerde popüler hale gelen AJAX metodolojisi ile de bu gibi işlemleri hayata geçirmek aslında mümkün. Fakat şu an için AJAX teknolojisi ile XMLHttpRequest kullanarak bu gibi işlemleri yapmanın birtakım kısıtlamaları bulunmakta. Bu yapı, belli süreler içerisinde arka planda sunucu ile iletişime geçmekte ve sonuçları XML olarak tarayıcıya gönderme temeli üzerine dayandırılmakta. Henüz birtakım özellikler konusunda yeterli düzeyde olmaması ve sunucunda tam bir cevap beklemesi, arada çıkabilecek bağlantı problemlerinde kesintiye uğrayıp anlamsız sonuçlar verebileceği gibi konular gözönünde bulundurulursa, şimdilik ProgressBar kontrolünü makalede anlatılan temelle uygulanması mantıklı gibi görünüyor. Fakat ileride AJAX yapısının da ulaşacağı noktaları ve kullanım alanlarını şimdiden tahmin etmek çok da zor değil.
Makalede anlatılan yapıyı ASP.NET kullanıcı kontrolü (User Control) haline getirdiğinizde uygulamalarınız içerisinde dağıtarak kullanmak da çok zor olmayacaktır. Ancak incelediğimiz yapının şu haliyle de okuyan herkese bir fikir verdiğini ve uygulamalarında nasıl kullanabilecekleri konusunun da akıllarında az çok şekillendiğini düşünüyorum.
Zaman ayıran herkes için faydalı olması dileklerimle...
Kaan TEZGEL kaan@kaantezgel.com