Ömer Faruk ZORLU

Gizli tarif diye birşey yok.

Video: ASP.NET Dynamic Data - Giriş

clock April 12, 2010 10:20 by author OMR





ASP.NET Dynamic Data - Gelişmiş Scaffolding

clock March 31, 2010 09:59 by author OMR

Merhabalar, daha önce ASP.NET Dynamic Data(yazının devamında DD kısaltmasını kullanacağım) hakkında bazı bilgileri yayınlamıştım. Yeni bir makale konusunda düşünürken makale konusu olarak gerçek bir DD projesinde kullanıcı tarafından gelebilecek isteklerin hızlı bir şekilde nasıl karşılanabilineceğinden bahsetmenin uygun olduğuna karar verdim.
Yazılımcı gözüyle değerlendirmek gerekirse kullanıcı gereksinimleri konusunda gözden kaçan bir çok gereksinimi görülmeyebilir.  Örneğin bir tablo içindeki kayıtların listelenmesi yazılımcı için gayet yeterlidir ancak kullanıcı gözüyle bakıldığında her şeyin listelenmesi çoğu zaman gereksiz olacaktır. Bu kapsamda kullanıcı isteklerine karşılık sorun çözümüyle alakalı makalele dizisinin ilkini yazmaya başlıyorum. Daha önceki makalelerde bahsettiğim isimlendirme, biçimlendirme vb. gibi temel işlemlere bu makalede değinmeyeceğim.

Kullanıcı tarafında tablo üzerindeki her alanın(column) görüntülenmesi istenmeyebilir. Bazı durumlarda ise tüm kayıtların listelenmesi kullanım kolaylığı açısından sıkıntılı olabilir.

Scaffolding tekniğiyle istenilen alanların tüm şablonlarda görüntülenmesini engelleyebiliyoruz. Özellikle listeleme sayfalarında tüm alanların sayfada görünür halde olması yatay olarak uzayan bir sayfaya neden olur ancak bu alanları klasik scaffolding tekniği ile gizlersek diğer şablonlardanda kayboluverir.  İşte burada asıl sorun ortaya çıkıyor: Gizlenen alanların kullanıcı tarafından düzenlenmesi gerekiyorsa yada detaylı görüntüleme şablonunda tüm alanların görüntülenmesi gerekiyorsa ne yapacağız?

  Aletleri geliştirmek DD için her zaman kazanımdır. Bu senaryoda scaffolding tekniğini sayfa şablonlarına göre nasıl özelleştirebileceğimizi öğreneceğiz.

Kullanabileceğimiz veri bileşenleri(GridView, FormView, DetailsView vb.) veri listeleme sırasında listeleme işlemi için IAutoFieldGenerator arayüzünü uygulayan bir sınıf ile veri alanları üzerindeki kararını verir. Varsayılan alan oluşturucularda verideki tüm alanlar DD bildirimleri uygunlandıktan sonra(scaffolding gibi kısıtlamalar vb.) listelenir. Yapılması gereken şey ise veri listeleme işini gerçekleştirme görevini yazacağımız bir sınıfın üstlenmesidir.

IAutoFieldGenerator arayüzünü uygulayan sınıfımız:

namespace Eposta.Core.CustomFieldGenerator
{
using System.Collections.Generic;
using System.Web.UI;
using System.Web.DynamicData;

///
<summary>
/// Bu sınıf veri listelemesini işlemlerini
/// özelleştirmek amacıyla yazılmıştır.
/// </summary>
public class CustomColumnGenerator : IAutoFieldGenerator
{
/// <summary>
/// Veri listelemesi için incelenecek
/// tablo değişkenini tutar
/// </summary>
protected MetaTable mTable = null;
#region IAutoFieldGenerator Members
/// <summary>
/// Listeleme işlemini gerçekleştirecek method
/// </summary>
/// <param name="control"></param>
/// <returns></returns>
public System.Collections.ICollection GenerateFields(Control control)
{
// Uygun kolonların biriktirildiği koleksiyon
List<DynamicField> dynFieldList = new List<DynamicField>();
// MetaTable atanmışsa
if (mTable != null)
{
// Her bir MetaColumn için
foreach (MetaColumn mColumn in this.mTable.Columns)
{
// Scaffolding ataması yapılmışsa koleksiyona eklenmesi
// uygun değildir. Eğer bu kontrol yapılmazsa ilgili
// alan görüntülenecektir. Çünkü tüm sorumluluğu almış
// bulunuyoruz
if (
!mColumn.Scaffold
)
continue;
DynamicField dynField =
new DynamicField();
dynField.DataField = mColumn.Name;
dynFieldList.Add(dynField);
}
}
return dynFieldList;
}
#endregion
}
}

Scaffolding tekniğini denetleyerek görüntüleme işlemini üstlenen sınıfımız artık hazır. Şimdi sıra şablonlara göre bu denetleme işlemine geldi. Varsayılan şablonlar için bir enum tanımlayıp GenerateFields methodunda şablona görede bir denetleme yapmamız gerecektir.

namespace Eposta.Core.Enums
{
public enum PageTemplateType
{
Details,
Edit,
Insert,
List,
ListDetails
}
}

Özelleştirme işlemlerinin uygulanabilmesi için özel bir öznitelik geliştirip bildirimlerin bu öznitelik üzerinden gerçekleştirmesi gerekiyor bunun için aşağıdaki sınıfı kullanabiliriz.

More...



Dynamic Data Web Site ile FileUpload işlemleri

clock March 16, 2010 21:17 by author OMR

MetaData üzerinden öznitelik ataması yapılarak doğrulama, biçimleme ve özel alan şanlonlarını(FieldTemplates) nasıl kullanacağımızdan bahsetmiştim.

Bu makale özel özniteliklerin ve alan şablonlarının geliştirilmesi konusunu içerecektir. Bu nedenle FileUpload kontrolünün kullanımı ve alan şablonlarının çalışma mantığıyla özel özniteliklerin kullanımı hakkında bilgi sahibi olacağız.

Önceki makalemde bahsettiğim gibi ASP.NET Dynamic Data Web Site ile FileUpload işlemlerini klasik yöntemlerle kullanamıyoruz.


ASP.NET Dynamic Data Web Sitesinde Ajax Tookit ile birlikte kullanıyorsanız ve FileUpload bileşeniniz UpdatePanel içerisinde yer alıyorsa ScriptManager nesnesinin EnablePartialRendering özelliğini false olarak atamanız gerekiyor.


Kodlamaya başlamadan önce yapılması gereken işlemleri özetlemenin faydalı olduğunu düşünüyorum. Kodlama detayları ilgili sınıfların içinde yer almaktadır.

  1. Zorunlu olmasa da dosyanın sunucuya yükleme işleminin gerçekleştirileceği yardımcı bir sınıf.
  2. Her bir dosya yükleme alanı için dosya türü, boyutu vb. bildirimleri yapmak için öznitelik tabanlı bir sınıf
  3. Dosya yükleme alanlarının ekleme ve güncelleme ekranı için FileUpload kontrolü listeleme ve detay sayfaları için ise dosya türüne göre yüklenen dosyaya uygun simge, önizleme vb. için alan şablonlarının(FieldTemplate) gerekli hazırlanması.
  4. İşlevin kazandırılacağı alanlara gerekli öznitelik tanımlamasının yapılması

Temel düzeyde dosya yükleme işlemini gerçekleştirmek üzere aşağıdaki sınıfı kullanacağız

More...



Embeding LinqToSql Classes file in the class library project

clock December 1, 2009 03:01 by author OMR
A simple dynamic data web site with everything App_Code are resolved. But will use tier architecture is not sufficient. Data access layer needs to be used in other projects. Therefore, the class library, I put Linq To Sql file metadata classes, but was ineffective. Researched solution for a few days. (Time loss) Linq To Sql file automatically when I reviewed the file name space designer.cs add noticed. I cleaned the added name space. Metadata has become active classes. Dynamism!


İlk Dynamic Data Web Site Sunumumu Gerçekleştirdim

clock October 16, 2009 04:23 by author OMR

Daha önce de bazı sunumlar yapmıştım ancak MSP olarak yaptığım ilk sunum olduğundan baya heyecanlıydım. 25 dakikada anlatmayı düşünüyordum ancak Agile Programming ve Rapid Application Development hakkında konunun tam olarak anlaşılması için bilgi vermem gerektiğini düşünerek anlatım süresini 45 dakikaya çıkarttım. ASP.NET Dynamic Data Web Site sunumu konusunda verdiği destekler için değerli Uğur UMUTLUOĞLU'na çok teşekkür ederim.