Pazar, Mart 28, 2010

WF - Conditions

.Net Frameowork 4.0 ile Windows Workflow Foundation iş akışı yapısının 4 sürümünün çıkışı çok yaklaşmışken biz WWF 3.x sürümleri yardımı ile iş akışı süreçlerini örnekler yardımı ile incelemeye devam ediyor olacağız. Bu güne kadar iş akışına temel bir giriş yaptık ve araç kutusunda yer alan iş akışı bileşenlerini nasıl kullanabileceğimizi tek tek incelemeye başladık. Bu inceleme işlemlerini örnekler ile zenginleştirerek ise bizlerin kullanımı esnasında dikkat edecek olduğumuz noktalara da değinmeye çalıştık. Bu formatta devam ederek Windows Workflow Foundation ile Condition (Koşul) kavramını inceliyor olacağız.

Condition denildiği zaman aklımıza While ve IfElseBranchActivity bileşenlerinde süreci durduracak ya da başka bir işlem yapmamıza olanak tanıyacak bir kriter olarak gelmektedir. bir önceki Parallel Activity yazımızda While döngüsüne denk gelen aktivite bileşenini kullanırken kısmen bu özelliği nasıl kullanabileceğimize kısaca göz atma fırsatı bulduk. Ancak Condition 'ı tamamen nasıl kullanabileceğimizi bu yazımızın içerisinde kullanıyor olacağız.

Şimdi Condition yapısını örnek üzerinde inceleyelim. Bu örneğimizi yaparken Visual Studio 2010 ide sini ve .Net Framework 3.0 sürümünü kullanıyor olacağız.

Uygulamayı geliştirmek için Sequential Workflow Console Application tasarımında proje oluşturduktan sonra ekrana bir adet While aktivitesi sürüklüyoruz.

WF,Conditions
Tasarım ekranı üzerine sağ tıklama yaptıktan sonra özellikler ekranından Condition değerleri verebileceğimiz bölüme ulaşabilmemiz mümkündür. Kullanabileceğimiz Condition tipleri iki adettir. Bunlar;
WF,Conditions şeklinde yer almaktadır. Bu koşul tiplerinden en hızlı çalışanı ve en çok tercih edileni Code Condition 'dır. Bizde koşulları incelerken ilk olarak kod üzerinden inceliyor olacağız.

Bu işlem için kod tarafına geçerek koşul olarak kullanacak olduğumuz rakam artışını sağlayan method hazırlıyoruz.

private int count;
private void ContinueLooping(object sender, ConditionalEventArgs args)
{
    args.Result = (count < 10);
}

Condition olarak kullanacak olduğumuz metodu hazırladıktan sonra tasarım ekranında While aktivitesinin içerisine ve aktivitenin sonuna olmak üzere iki tane kod aktivite ekliyor ve aşağıdaki kod parçalarını yazıyoruz.

private void codeActivity1_ExecuteCode(object sender, EventArgs e)
{
    Console.WriteLine("Merhaba {0}",count);
    count++;
}

private void codeActivity2_ExecuteCode(object sender, EventArgs e)
{
    Console.ReadLine();
}

Şimdi ise While Aktivitesine koşulu eklemeye sıra geldi. Bunun için özellikler ekranında condition özelliğine code condition seçeneğini seçtikten sonra Conditions özelliğine bizim oluşturmuş olduğumuz ContinueLooping() 'i gösteriyoruz.

WF,Conditions

Yapmış olduğumuz bu işlemler sonrasında koşulları da aktif olarak kullandığımız uygulamanın çalıştığı anki ekran görüntüsü aşağıdaki gibi olacaktır.

WF,Conditions

Kod yardımı ile oluşturmuş olduğumuz koşulu işlediğimizde sorunsuzca çalıştığını görmüş olduk. Kod koşulları dışında kullanabileceğimiz bir diğer seçenek ise kural bazlı koşullar (rule conditions) dır. Bu seçeneği kullandığımız durumlarda bir öncekinden farklı olarak koşulları girebileceğimiz bir ekran karşımıza çıkacak ve kriterimizi buraya girmiş olacağız. Bu yapmış olduğumuz değişiklikleri ve eklentileri arka plan Workflow Foundation xml içerisinde saklayarak bizim While ya da ifElseBranch aktivitelerini kullanacağımız durumlarda kullanmamıza olanak tanıyacaktır.

Kural bazlı aktiviteleri kullanmak için ilk yapılması gereken koşul kullanılacak olan aktivinin özelliklerinden ki bu bizim örneğimiz için while aktivitesi oluyor, Condition özelliğini Rule Condition olarak belirtiyoruz.

WF,Conditions

Condition tipi seçme işlemini tamamladıktan sonra ConditionName özelliğine istediğimiz herhangi bir değer verdikten sonra sağ tarafında yer alan butona tıklayarak kriterleri girecek olduğumuz ekranın açılmasına olanak tanıyoruz.

WF,Conditions

Yukarıdaki ekranda yapmış olduğumuz işlemlerden de görmüş olduğunuz üzere daha önceki örneğimizde kod yardımı ile oluşturmuş olduğumuz sayacın 10 dan ufak olana kadar çalışmasını sağlayan bir metot hazırlamış ve kullanmıştık. Bu kullanımda ise bu tür işlemler yapılmasına gerek yoktur. Eklenmiş olunan kriterlere istenen değerler atanarak While aktivitesinde sorunsuzca kullanılabildi. Ayrnıca karşımıza çıkan bu ekranın diğer özelliklerinden biri de başka kriterler ekleyebilir, bu kriterleri düzenleyebilir, silebilir ya da isimlerini değiştirebiliriz.

Şimdi ise yapmış olduğumuz işlemler sonrasında bakalım ekran görüntüsü ya da çalışma mantığında değişen bir şey olmuş mu?

WF,Conditions

Gördüğümüz kadarıyla herşey sorunsuz gözüküyor. Bu da bize hem Code Condition hem de Rule Condition ile elde ettiğimiz sonuçların aynı olduğunu göstermektedir. Aralarında en büyük fark kullanım şekillleridir. Ancak dikkat edeceğiniz üzere kullanım şekilleri farklı olmakla birlikte aslında yazılan kod parçaları ve işlem adımları birbirlerine çok benzerdir.

Şimdi üzerinde denemeler yapmış olduğumuz örneği biraz daha karmaşık bir duruma getirirken hem de ifElse aktivitesinde de koşulları nasıl kullanacağımıza göz atıyor olalım.

Yapacak olduğumuz işlem için tasarım ekranında şu şekilde bir değişiklik yapmamız gerekmektedir. While aktivitesinin içerisine bir Sequence aktivite ekledikten sonra onun içerisine de ifElse aktivite ekliyoruz. Sonrasında ise ifElse aktivitesinde olacak sonuçları gözlemleyebilmek için Code Activity 'ler ekleyerek tasarım ekranında yapılacak olan değişikleri tamamlıyoruz.

WF,Conditions
Tasarım ekranında yapacak olduğumuz değişiklikleri tamamladıktan sonra sıra koşulları belirlemeye geldi. Bunun için ise ifElse aktivitesinin özelliklerinden Condition seçeneğine Rule Activity değerini atadıktan sonra aktivitenin 5 ten ufak olan değer için merhaba yazmasını diğerleri için ise Hoşçakal yazmasını sağlayacağız. Hoşçakal yazması için sağ taraftaki kod aktivitesine Console.WriteLine("Hoşçakal"); count++; kodları yazılır.

WF,Conditions

Yapmış olduğumuz işlemler sonrasında yapmış olduğumuz işlemler konusunda istediğimizi alabilmiş miyizi kontrol edebilmek için uygulamayı çalıştırıyor ve sonuçları gözlemliyoruz.

WF,Conditions

Sonuç oldukça başarılı :)

Bu yazımızda Workflow Foundation 'da Condition kavramını inceleye çalıştık. Condition tiplerinden hem Code Condition olarak nasıl yapabileceğimizi hem de Rule Condition olarak nasıl kullanabileceğimizi örnekler yardımı ile inceledikten sonra While ve ifElse aktiviteleri üzerinde Condition tipleri yardımı ile örnekler yaparak yazımızı tamamladık.

Umarım yararlı olabilmiştir.

Turhal Temizer

info@turhaltemizer.com

Cuma, Mart 26, 2010

Sharepoint 2010 – Beta VHD Download

Sharepoint 2010 çok güzel gelişmeler ile bizlerin karşısına çıkmaya hazırlanıyor. Beta sürümünü inceleyip kurmak isteyenler için Virtual PC sunucusu üzerinde çalıştırılmak üzere hazırlanan VHD dosyasını aşağıdaki linki kullanarak indirebilmeniz mümkündür.

Sharepoint 2010 Beta VHD

Çarşamba, Mart 24, 2010

Asp.Net MVC Framework 1.0 ‘ten Asp.Net MVC Framework 2.0 ‘a Uygulamaları Yükseltmek (Upgrading)

Asp.Net MVC Framework cephesinde Microsoft geliştirmelerine son sürat devam ediyor. Bunun sonuçları olarakta çok yakın bir zaman da MVC Framework 2.0 sürümü yayınlandı. Bu sürüm ile gelen yenilikleri zaman içerisinde inceliyor olacağız. Ancak şimdi aklımızı kurcalayan ve daha önemli bir konu olan MVC Framework 1.0 ile geliştirilmiş olan uygulamaların akıbeti ne olacak konusunu inceliyor olacağız.

MVC Framework 1.0 ‘ın çıkışı ve kullanım kolaylıkları sebebi ile bir çok web uygulama geliştiricisi bu tasarı ile uygulama nasıl geliştirileceğini yoğun bir şekilde inceledi. Geçen zaman içerisinde de bir kısmı uygulama geliştirerek çok başarılı ürünler çıkartmış oldular. Ülkemizde de fazlaca örneği bulunmaktadır. En büyük faydalarından bir kaçı ise, ID ‘ler ile gereksiz sayfa fazlalığının önüne geçilmesi, entity katmanların yoğun bir şekilde kullanılıyor olması, katmansal mimarinin web uygulamalarında rahatlıkla kullanılabiliyor olması, URL yönlendirme işlemlerinin rahatça yapılabilmesi gibi aklımıza bir çırpıda gelenleri bunlardır.

Evet zaman içerisinde bir çok uygulamanın geliştirildiğinden bahsettik. Eğer ki ortada geliştirilen bir ürün varsa bu ürünün yeni çıkan sürümlerine de uyarlanabiliyor olması gerekmektedir. Bu temek kural sebebi ile Asp.Net MVC Framework 1.0 ile geliştirilen web uygulamalarının Asp.Net MVC Framework 2.0 sürümüne yükseltilmesi esnasında yapılması gereken adımlara değinerek bu ihtiyacımızı nasıl gerçekleştirebileceğimizi incelemeye çalışıyor olacağız.

MVC Framework 1.0 sürümünden MVC Framework 2.0 sürümüne yükseltmek için kullanabileceğimiz iki yöntem bulunmaktadır. Bunlardan birincisi bir sihirbaz yardımı ile bir diğeri ise de direk uygulamaya elle müdahale ederektir.

1.) Sihirbaz Yardımı ile Yükseltmek

Sihirbaz yardımı ile MVC Framework 1.0 ile hazırlamış olduğunuz web sayfalarını MVC Framework 2 sürümüne yükseltmek için MvcAppConverter-MVC2RTM.zip (255 KB)  dosyasını bilgisayara indirdikten sonra uygulama dosyasını yani *.sln dosyasını gösterdikten sonra kendisi otomatik olarak dönüştürme işlemini gerçekleştiriyor olacaktır.

 

Peki bu sihirbaz dönüştürme işlemini güzelce yaptı. Ama hangi dosyaların üzerinde değişiklik yapıldığını ve nasıl kullanabileceğizi öğrenmek ihtiyacı hissedebiliriz . Bu bilgiler temel olarak aşağıda yer almaktadır.

  • Visual Studio 2008 ile yapılan uygulamalar üzerinde dönüştürme yapılabilmektedir.
  • Dönüştürülen bütün uygulamanın yedeği alınır
  • C# ve VB ile geliştirilmiş olan uygulamalarda System.Web.Mvc.dll üzerinde güncelleme yapılmaktadır.
    •     Referansları Asp.NET MVC 2 sürümüne göre güncellenir.
    •    System.ComponentDataMode.DataAnnotations 3.5 eklenmektedir.
    • Uygulama üzerinde de değişiklikler yapılmaktadır
    •     Uygulama tipi Asp.Net MVC 2 nin proje şablonu ile uyumlu olacak şekilde değişikliğe uğrar.
    •     web.config üzerinde yer alan referans bilgileri güncellenir.
    •     Yönlendirme yapısı Asp.NET MVC 1.0 ile olan uyumluluğundan Asp.NET MVC 2.0 için uyumluluğa geçmektedir.
    •    /Views/web.config içerisinde yer alan referans bilgileri güncellenmektedir.
    •     JavaScript dosyalarına JQuery bilgileri eklenir ya da güncellenir.

      Sihirbaz ile yapılan işlemler yukarıdaki adımları izleyecek şekilde olacaktır.

      Yukarıdaki sihirbazı henüz Visual Studio 2010 ve .Net Framework 4.0 üzerinde kullanabilmeniz mümkün değildir. Ancak geliştiricileri bu sürümler içinde dönüştürülme işleminin sağlanması için gerekli çalışmaların yapıldığını belirtilmektedir.

    Ancak sizler ben sihirbaz ile işlemlerimi yapmayı sevmiyorum ya da bu değişiklikleri kendim değiştirmek istiyorum diyorsanız işte bu durumda el ile yükseltme adımlarını takip etmeniz gerekmektedir.

2.) Elle Yükseltmek

Biraz önce başarılı bir yazılımcı tarafında hazırlanmış olan yükseltme sihirbazını kullarak uygulamalarımızı nasıl yeni sürüme yükseltebileceğimizi inceledik. Şimdi ise adım adım biz yapmak istersek bu işlemleri nasıl yapabileceğimize değiniyor olacağız.

Öncelikle MVC Framework 2 sürümünü kullanabilmek için Visual Studio 2008 ve .Net Framework 3.5 'in SP1 sürümlerinin bilgisayarınızda kurulu olması gerekmektedir.

Not: Windows 7 kullanıcıları sadece Visual Studio 2008 ‘in SP1 ‘inin kurmaları yeterli olacaktır. Bilindiği kadarıyla Windows 7 .Net Framework 3.5 SP1 kurulu olarak gelmektedir. Ancak bu özellikleri kullanabilmek için windows özelliklerini aç/kapa ekranını kullanarak .net Framework 3.5.1 seçeneğinin altında yer alan bütün seçeneklerin seçili duruma getirilmesi gerekmektedir. Aksi taktirde Asp.Net MVC 2 sürümünü bilgisayarınıza kuramayacak ve aşağıda anlatacağımız ya da yukarıda anlatmış olduğumuz işlemleri yapamıyor olacaksız.

Gerekli geliştirme araçlarına sahip olduğumuza göre MVC Framework 1.0 ile geliştirilmiş olan web uygulamasını yükseltmeye başlayabiliriz. Bu işlemi adım adım anlatıyor olacağız.

1. Projenin yedeğinin alınması gerekmektedir.

2. *.csproj proje dosyasını not defteri yardımı ile açtıktan sonra ProjectTypeGuid nesnesinin değerine ulaşmamız gerekecektir. Bulmamız gereken GUID {603c0e0b-db56-11dc-be95-000d561079b0} ile {F85E285D-A4E0-4152-9332-AB1D724D3325} şeklindedir. bu değeri bulduktan sonra {F85E285D-A4E0-4152-9332-AB1D724D3325};{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} değerleri ile değiştirilmesi gerekmektedir.

3. Web uygulamasının bulunduğu klasöre eriştikten sonra Web.Config dosyası açılır ve içerisinde verilmiş olan referanslardan System.Web.MVC, Version=1.0.0.0 yazınını bulduktan sonra bu referans bilgisini System.Web.MVC, Version=2.0.0.0 olacak şekilde güncelliyoruz.

4. Views klasörünün içerisinde yer alan Web.config dosyasına da 3. maddede yer alan değişiklikleri uyguluyoruz.

5. Visual Studio ile MVC 1.0 ile hazırlanmış olan projeyi açtıkan sonra (Yukarıdaki değişiklikleri yapmış oluyoruz tabikii) Referanslar bölümünde yer alan System.Web.MVC referansını siliyoruz (1.0 sürümünü). Sonrasında System.Web.Mvc ‘nin 2.0 olan sürümüne ilişkin dll ‘i projeye referans olarak ekliyoruz.

6. Web.config dosyasının içerisine bindingRedirect nesnesinin kullanılabilmesi için aşağıdaki yapılandırma dosyasını ekliyoruz.

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="System.Web.Mvc"
publicKeyToken="31bf3856ad364e35"/>
      <bindingRedirect oldVersion="1.0.0.0"
newVersion="2.0.0.0"/>
    </dependentAssembly>
  </assemblyBinding>
</runtime>

7. Script dosyasınına yeni eklenenleri kullanabilmek için yeni bir MVC 2.0 projesi oluşturduktan sonra olmayan MVC 1.0 ile hazırlanmış olan uygulamada olmayan script dosyalarını 2.0 projesinin içerisinden diğerine kopyalıyoruz.

8. Biraz önce oluşturmuş olduğumuz MVC 2.0 projesi içerisinde yer alan CSS ‘i kullanmak istiyorsanız Site.css ‘i eski projede aynı dosyada yer alan şekilde kopyalıyoruz.

9. Yapılan değişiklikler sonrasında uygulamamızı derliyor ve sorunsuzca çalıştırıyoruz.

El ile adım  adım yaptığımız da gördüğünüz gibi aslında yapacağımız işlemleri basitçe gerçekleştirebilmemiz mümkündür.

Sonuç olarak bu yazımızda Asp.NET MVC Framework 1.0 ile hazırlanmış olan web uygulamalarını Asp.NET MVC Framework 2.0 ‘a yükseltirken hangi adımları uygulayacağımızı hem sihirbaz yardımı ile hem de adım adım bizlerinde nasıl yapabileceğini inceleyerek değinmeye çalıştık.

Umarım Yararlı olabilmiştir.

Kaynaklar
MSDN
Upgrading Wizard

Turhal Temizer

Salı, Mart 23, 2010

Asp.Net MVC Framework 2.0 RTM – Windows 7 Kurulum

Bildiğiniz üzere bir süre önce Asp.Net MVC Framework ‘ün 2. versiyonu yayınlandı. Bizlerde bu uygulamayı hemen kurmak istedik. Ancak Windows 7 kullanan bazı geliştiriciler kurulum esnasında bir sorun yaşadılar ki, hata mesajı olarak .Net Framework 3.5 SP1 ’in sistemde bulunmadığına ilişkindir. Ancak bilindiği üzere Windows 7 işletim sistemi .Net Framework 3.5.1 yani SP1 ‘li versiyonu ile ilk kurulum anından itibaren çalışmaktadır.

Yukarıda bahsettiğimiz türde bir hata alan geliştiricilerin yapması gereken Denetim Masasına girdikten sonra program özelliklerini aç/kapa linkine tıkladıktan sonra karşılarına gelen ekranda .Net Framework 3.5.1 olan bölümlerinde alt başlıkları ile seçmek ve sonrasında işlemi tamamlamak olacaktır. Bu işlem sonrasında bilgisayarınızı yeniden başlatmanız gerekmektedir. Artık bilgisayarınıza Asp.Net MVC Framework 2 ‘yi sorunsuzca kurabilirsiniz.

Not: Görünümü yenilenmiş olan www.asp.net sitesi yardımı ile gerekli bileşenleri bilgisayarınıza indirip yenilikleri takip edebilmeniz mümkündür.

İyi çalışmalar

.Net 3.5 SP1 – Full Install Packages (Tam Kurulum)

.Net Framework 3.5 SP1 ‘i bilgisayarınıza kurmak istediğinizde normal şartlar altında Microsoft ‘un sitesinde 2.7 mb ‘lik bir dosya indirir ve kurulum işlemlerinizi bu dosya üzerinden yaparsınız. Ancak bu indirmiş oluğunuz dosya yaklaşık 220 mb ‘lik veriyi internetten indirerek kurulum yapmaktadır. İnternet çıkışına izin verilmeyen kurumlar ve kuruluşlar için bu durum bir sıkıntı oluşturmaktadır. Bu sebepten ötürü aşağıdaki link yardımı ile tam yükleme paketini indirdikten sonra hiç internet ihtiyacınız olmadan .Net 3.5 SP1 ‘i kurabilmeniz mümkün olacaktır.

Link

Pazartesi, Mart 22, 2010

Visual Studio – Açık Olan Dökümanları Kapatmak

Merhabalar,

Visual Studio ile uygulama geliştirirken en sık yapılan işlemlerden biri de açık olan kod dosyalarını kapatmaktır. Bu işlem Visual Studio 2010 öncesinde biraz daha uğraştırırken 2010 sürümüyle birlikte biraz daha kolaylaşmıştır.

image_thumb_1  Visual Studio 2010 öncesi…

image_thumb Visual Studio 2010…

Yukarıdaki görüntülerden de göreceğiniz üzere VS2010 ile açık olan tabları kapatmak biraz daha kolay olmakta birlikte hepsini kapatmak istediğimizde ya da sadece biri kalsın diğerlerini kapatalım dediğimizde uğraştırıcı bir işlem olmaktadır. Ayrıca her kapatma işlemi için tek tek bu kapatma yerine gelmek oldukça yorucu bir işlem olacaktır. (Bu işlemi günde ortalama 100 seferden fazla yapıyoruzdur :) )

O zaman bu dökümanları nasıl kapatabileceğimize ilişkin imkanlarımızı inceleyelim.

1.) Windows->Close All Document

Bu seçenek yardımı ile açık olan bütün dökümanları yani kod dosyalarını iki tıklama ile kapabilme imkanımız vardır. Ayrıca bu işlemin klavye kısa yolu Alt+W,L şeklindedir. Bu adımları takip ederekte basit bir şekilde açık olan bütün dökümanları kapatabilmeniz mümkündür.

img1

2.) CTRL+F4

Eski alışkanlıklarımızdan olan bu kısayol açık olan kod dosyasını kapatmaya yaramaktadır.

3.) Sağ Tıklama –> Close All But This

Eğer sadece tek dökümanı açık bırakıp diğerlerini kapatmak istiyorsak bu seçeneğin kullanılması büyük çabuk sağlamaktadır.

img2

4.) Fare Orta Tuş (Tekerlek) Tıklamak

Farenin ortasında yer alan tekerleğin tıklama özelliğini kullanarak açık olan kod dosyalarını kapatmaktır. Bu işlemin fareyi götürüp kapatma tuşu üzerinden kapatmak pek bir farkı yokmuş gibi gözükse de kapatma yerine gidilmeden kapatılmasından ötürü çok daha rahat bir kullanım sağlamaktadır.

Bu son seçenek ile temel kısayollara değinmiş olduk. Peki neden bu açık olan dökümanları kapatmak önemlidir? Çünkü tekrardan proje açıldığında bu dosyaları tek tek yüklemeye çalışacağından VS üzerinde açılma süresinde yavaşlamaya sebep olacaktır. Yapacak olduğumuz bu işlemler sonrasında ise projelerin açılma sürelerini kısmen hızlandırmış olacağız.

İyi günler…

Silverlight 4 – Eğitim Videoları

Silverlight ‘ın 4 sürümünü kullanmak istiyorum ama önce bunu öğrenmek istiyorum diyorsanız ve yazılı içerik yerine görsel ders üzerinden bu teknolojiyi öğrenmek istiyorsanız Channel 9 üzerinde var olan Silverlight 4 öğrenme videoları tam size göre olacaktır. Link aşağıda yer almaktadır.

http://channel9.msdn.com/learn/courses/Silverlight4/

WPF Nedir? XBAP Nedir?

Merhabalar,

WPF ile yazmış olduğum yazıları incelerken çok önemli birşeyin farkına vardım. Yazmış olduğum onlarca WPF yazısının arasında kısaca WPF budur diyen bir üzülerek söylüyorum ki bulamadım. Evet uzun uzun anlatan çok fazla var. Bu uzun yazıların içerisinde tabii ki “WPF Nedir? XBAP Nedir?” ‘in açıklamaları fazlası ile yer alıyor. Ancak sadece nedir ne değildir diye merak edenler için kısaca açıklaması aşağıdaki gibi olacaktır.

WPF Nedir?

Windows Presentation Foundation (WPF) teknolojisi .Net 3.0 ‘ın geliştirilme aşamalarında AVALON ismi ile biz kullanıcılara sunuldu. Windows Form programlama getirdiği yenilik ve yüksek bellek gerektiren grafiksel işlemleri rahatlıkla gerçekleştirebileceği söyleniyordu ki geliştiricilere sunulan örnekler bunları sağlıyordu. Sonrasında zaman içerisinde .Net 3.5, .Net 3.5 SP1 ve .Net 4.0 ile de bir çok konuda çok güzel bir araç durumuna gelmiştir.

WPF Teknolojik Avantajları Nelerdir?

Yüksek bellek harcayan grafiksel öğeleri mimari değişikliği sebebiyle çok hızlı gösterebilmesinin en büyük sağlayıcılarından XAML dilidir. XAML oluşturulmuş olan formun ve form üzerine eklenen bileşenlerin markup kodlarını göstermektedir. Eğer ki bir butona renk ya da animasyonsu işlemler katmak istiyorsanız XAML kullanmak gerekecektir. Ancak ilk etapta yeni bir kod yazım şekli ve alışılması gereken bir yapı olarak göze çarpmaktadır. Eğer ki çabuk çözüm üretilmesi gerekiyorsa bu XAML kullanımını kolaya indirgemek için C# ya da VB.net ile de aynı işlemlerin yapılabilmesi mümkündür. Ancak tahmin edeceksinizdir ki oluşan tasarımları ve işlemleri uygulamayı çalıştırmadan göremiyor olacaksınız. Ancak Expression Studio ailesinde yer alan ürünler yardımı ile hem tasarım hem de animasyon ile ilgili hazırladıklarınızı hiç zahmet harcamadan XAML formatına dönüştürebilir ve WPF uygulamaları üzerinde kullanabilirsiniz. Bu ürünler yardımı ile hazırladığınız animasyonlarda yaptıklarınızı anlık görebilmekte birlikte XAML kodlarını kullanabiliyor olmak çok ama çok kolaylık sağlayacaktır.

WPF ile uygulama geliştirdikten sonra özellikle bu uygulamaların Windows Vista ve sonrasında çıkmış olan işletim sistemlerinde kullanılıyor olması gerekmektedir. Sebebi ise Windows Vista sonrasında grafik kartlarını kullanma teknolojisi eski sürümlere göre değişmiş ve WPF ile hazırlanan uygulamalarda yoğun grafik kartı gereksinimi bulunan uygulamaların bu işlemleri gerçekleştirirken RAM belleği kullanmak yerine grafik kartının belleğinde bu işlemleri yaparak işlemci ve RAM belleği grafik işlemleri için yormadığından uygulamaların performansları daha iyi olmaktadır. Windows 7 ve Office 2010 bu bahsi geçen konu için verilmesi gereken en iyi örneklerdir.

Bileşen (Component) zenginliği açısından Windows Form uygulamalarına yakın bir içeriğe sahiptir. Ancak veri işlemlerinde daha sınırlı bir içeriğe sahip olmasına rağmen kullanılabilirlikte Windows Form bileşenleri kadar yetkinlik sunmaktadır. Ayrıca bu bileşenlerin eskilerine oranla en büyük farkları XAML sayesinde geliştirilebilir olmasıdır.

XBAP Nedir?

WPF ile hazırlanmış uygulamaların tarayıcı versiyonlarıdır. WPF Form ile hazırlanmış animasyonlar ve diğer içerikleri sahip uygulamaları Internet Explorer tarayıcısı öncelikle olmak üzere diğer tarayacılar üzerinde de XAML dosyanın yüklenmesi yardımı ile görüntülenmesi mümkündür. Özellikle son  bir kaç yıldır insanların aklına web uygulamalarında yüksek kullanıcı memnuniyeti gerektiren işlemler dendiğinde Silverlight akla gelmektedir. Ancak XBAP Silverlight ürününden farklı olmakta birlikte bu ikisinin yapabilecekleri de oldukça farklıdır.

WPF ile geliştirilmiş uygulamaların yüksek oranı rahatlıkla XBAP uygulamasına dönüştürülebilmekte ve internet tarayıcıları üzerinden kullanılabilmektedir.

WPF ve XBAP uygulamalarında grafik ve animasyon işlemlerinin dışında media ve audio formatında yer alan dosyalarıda kullanmak oldukça basittir. Eskiden bu işlemler için Media Player API ‘lerini kullanmak gerekirken WPF teknolojisi yardımı ile .Net CLR ‘ı içerisinde bu işlemleri gerçekleştirmek oldukça basittir.

XPS desteği… WPF, açık kaynak döküman formatı olan XPS dokumanlarını desteklemekte ve çok basit bir şekilde okuyucu hazırlanabilmesine olanak tanımaktadır.

Kısaca WPF ve XBAP nedir ‘i incelemeye çalıştık. Umarım aklınızda bu WPF nedir acaba diye bir soru geldiğinde cevabınızı alabilirsiniz.

İyi günler…

Microsoft Office System 2010 – Mobile Edition

Office System 2010 ve Windows Phone 7 ‘nin çıkış tarihleri yaklaşıyor. Mobil cihazlarda kullanılacak olan Office sürümünün nasıl olacağını merak ediyorsanız aşağıdaki video tam size göredir.


Get Microsoft Silverlight

Microsoft Office System 2010 – Beta Download

Merhabalar,

Office System ailesinin en yeni üyesi olacak olan 2010 sürümünün BETA sürümünü denemek isteyenler http://www.microsoft.com/office/2010/en/default.aspx adresten yararlanarak indirip bilgisayarlarına kurabilirler.

Not: BETA sürümü sorunsuzca çalışmaktadır…

Windows Live Writer - Arama Motorları için Etkili Kayıt Yayınlama

Merhabalar,

Blog gibi paylaşım alanlarında eklenen kayıtların arama motorları tarafında en kısa sürede tespit edilerek sonuçlarda çıkması hepimizin isteyeceği güzel bir durumdur. Bunu gerçekleştirmek için ise bir kısım SEO teknikleri kullanmak gerekmektedir. Bunlardan en önemlisi ise en çok ziyaret edilen ve linklerin paylaşıldığı siteleri ping leyerek robotlarının blogu incelemesini sağlamaktadır.

Bu tür işlemleri yapmanın en kolay yolu ile Windows Live Writer olacaktır. Peki nasıl? Tools->Options->PingServers yolunu izledikten sonra karşımızdaki ekrana aşağıda görmüş olduğunuz linkleri eklerseniz yayınlamış olduğunuz her yazı sonrasında Windows Live Writer otomatik olarak bu siteleri ping leyecek ve yayınlanan yazıların çok daha kolay bir şekilde arama motorlarında çıkmasını sağlayalacaktır.

Ping Listesi

http://rpc.technorati.com/rpc/ping
http://blogsearch.google.com/ping/RPC2
http://1470.net/api/ping
http://api.feedster.com/ping
http://api.moreover.com/RPC2
http://api.moreover.com/ping
http://api.my.yahoo.com/RPC2
http://api.my.yahoo.com/rss/ping
http://bblog.com/ping.php
http://bitacoras.net/ping
http://blog.goo.ne.jp/XMLRPC
http://blogdb.jp/xmlrpc
http://blogmatcher.com/u.php
http://bulkfeeds.net/rpc
http://coreblog.org/ping/
http://mod-pubsub.org/kn_apps/blogchatt
http://www.lasermemory.com/lsrpc/
http://ping.amagle.com/
http://ping.bitacoras.com
http://ping.blo.gs/
http://ping.bloggers.jp/rpc/
http://ping.cocolog-nifty.com/xmlrpc
http://ping.blogmura.jp/rpc/
http://ping.exblog.jp/xmlrpc
http://ping.feedburner.com
http://rpc.newsgator.com/
http://rpc.pingomatic.com
http://rpc.weblogs.com/RPC2
http://topicexchange.com/RPC2
http://trackback.bakeinu.jp/bakeping.php
http://www.a2b.cc/setloc/bp.a2b
http://www.a2b.cc/setloc/bp.a2

Herkese iyi günler…

Windows Live Writer - Türkçe Karakter Sorunu

Merhabalar,

Bir süredir blogumda sizlere bilgi paylaşımı konusunda sıkıntılar yaşamaktaydım. İşlerin yoğunluğunun dışında bir Windows Live Writer uygulaması yazmış olduğum yazılarda Türkçe karakterleri göstermeme direnci göstermekteydi. Özellikler seçeneğinden bütün ayarlar Türkçe olduğu halde bu sorun devam ediyordu. Ancak bir bu Türkçe ayalarlarını UTF-8 olarak güncellediğimde bütün sorunlar ortadan kalkmış ve karakterler sorunsuzca gözükmüş oldu.

Eğer ki bu tür bir sorun yaşarsanız sizlere tavsiyem karakter kodlamasını Live Writer özelliklerinden belirtilen kodu seçmeniz olacaktır.

Not: Windows Live Writer ‘in bloglarda yazı yayınlama sırasında verdiği kolaylığı ve hazı hiç birşey ile değişemem…

Herkese iyi günler…

Çarşamba, Mart 17, 2010

Internet Explorer 9 Preview Download

Microsoft Internet Explorer macerasında 9 sürümüne ulaşmıştır. Test sürümünü denemek isteyen kullanıcılar için http://ie.microsoft.com/testdrive/ adresinden indirebilme hakkı tanınmıştır. HTML 5.0, CSS 3.0 gibi standartları da kabul etmiş olan Internet Explorer ekibi tamamı ile yeniden yazılmış olan sürümü ile bakalım bizlere ne gibi bir sürpriz yapacak. Deneyip görelim...javascript:void(0)

Salı, Mart 16, 2010

WPF 4 & .Net Framework 4 - Workflow Designer Oluşturmak - II

Windows Workflow Foundation (WF) 4 ve Windows Presentation Foundation (WPF) 4 'ün artık tam sürümlerine kavuşmalarına sayılı günler kala biz WPF ile nasıl bir iş akış tasarım ekranı yapabiliriz diyerek kendimize sorduktan sonra adım adım bu işlemleri gerçekleştirmeye başladık. Yapmış olduğumuz işlemler sonrasında Araç çubuğu (ToolBox), tasarım ekranı (activity Designer), özellikler penceresi (Property Inspector) olan temel arayüze kavuşmuş bulunduk.



.Net Framework 4.0 ve WPF 4.0 'ın bize sağlamış olduğunu esneklik ve kolaylık yardımı ile yukarıda görmüş olduğunuz işlemi oldukça basit bir şekilde gerçekleştirebilmiştik. Şimdi ise harici aktivitelerimizi kullanmak için oluşturmuş olduğumuz Custom Activities projesinin içerisine visual studio içerisinde yer alan şablonlardan Activity Library seçeneğini kullanarak harici bir aktiviteyi nasıl oluşturabileceğimizi detaylı bir şekilde inceliyor olacağız.

O zaman Custom Activity projesinde yer alan Prompt aktivitesini Activity Designer 'ı ekleyerek bu daha görsel bir akışı nasıl hazırlayabileceğimize göz atalım.

Custom activities projesinde aktivitelerin tasarımsal öğelerini kullanabilmek için System.Activities.Presentation 'ı referans olarak ekliyoruz.



Sonrasında CustomActivities projesine Activity Designer ekleyeceğiz. Ama bu sefer bu bölümü biz hazırlamayacağız. .Net 4.0 ile birlikte workflow şablonlarının içerisinde yer alanı kullanacağız. Bunun için projenin üzerinde sağ tıklama yaptıktan sonra add new item seçeneği yardımı ile açılan ekranda workflow seçeneğini seçiyor ve .Net 4.0 'ın içerisinde yer alan Activity Designer şablonunu projeye ekliyoruz. İsmini de BasitTasarım.xaml olarak belirtiyoruz.



Activity Designer 'ı projeye eklediğimizde bize XAML kod ile düzenleme yapabileceğimiz ve oluşan değişiklikler sonucundaki tasarımı görüntüleyebileceğimiz tasarım ekranı ile gelmektedir.



Activity Designer 'ın XAML ile esnekleşmiş tasarımının içerisine iş akışımızı temsil edecek basit bir tasarım ekliyoruz. Buna benzer tasarımları Expression Studio ailesinde yer alan Expression Design ürünü ile hazırlayabilmeniz mümkündür. Bu ürün size yapmış olduğunuz tasarımların XAML çıktılarını vereceği için rahatlıkla kullanabiliyor olabileceksiniz.

Oluşturmuş olduğumuz tasarımın XAML kodları aşağıdaki şekildedir.

<sap:ActivityDesigner x:Class="CustomActivities.BasitTasarim"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:sap="clr-namespace:System.Activities.Presentation;assembly=System.Activities.Presentation"
    xmlns:sapv="clr-namespace:System.Activities.Presentation.View;assembly=System.Activities.Presentation" mc:Ignorable="d" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" Collapsible="True" d:DesignHeight="130" d:DesignWidth="206">

    <Viewbox x:Name="Group" Width="75px">
        <Canvas Width="143.047" Height="159.025">
            <Ellipse x:Name="Ellipse" Width="32.3333" Height="28.3334" Canvas.Left="20.9435" Canvas.Top="8.66254" Stretch="Fill" StrokeThickness="7" StrokeLineJoin="Round" Stroke="#FF000000"/>
            <Path x:Name="Path" Width="21.3251" Height="32.8953" Canvas.Left="53.6983" Canvas.Top="41.0262" Stretch="Fill" StrokeThickness="7" StrokeLineJoin="Round" Stroke="#FF000000" Data="F1 M 57.1983,44.5262L 71.5234,64.9118L 57.1983,70.4215"/>
            <Path x:Name="Line" Width="42.8127" Height="34.5482" Canvas.Left="68.5744" Canvas.Top="55.3513" Stretch="Fill" StrokeThickness="7" StrokeLineJoin="Round" Stroke="#FF000000" Data="F1 M 72.0744,86.3994L 107.887,58.8513"/>
            <Path x:Name="Line_0" Width="45.0165" Height="20.2231" Canvas.Left="74.635" Canvas.Top="77.3898" Stretch="Fill" StrokeThickness="7" StrokeLineJoin="Round" Stroke="#FF000000" Data="F1 M 78.135,94.1129L 116.152,80.8898"/>
            <Path x:Name="Path_1" Width="45.5675" Height="17.4684" Canvas.Left="74.635" Canvas.Top="102.734" Stretch="Fill" StrokeThickness="7" StrokeLineJoin="Round" Stroke="#FF000000" Fill="#FFFFFFFF" Data="F1 M 78.135,106.234L 110.642,115.05L 116.702,116.702"/>
            <Path x:Name="Path_2" Width="39.5069" Height="30.1405" Canvas.Left="69.6763" Canvas.Top="114.304" Stretch="Fill" StrokeThickness="7" StrokeLineJoin="Round" Stroke="#FF000000" Fill="#FFFFFFFF" Data="F1 M 73.1763,117.804L 95.7658,133.782L 105.683,140.945"/>
            <Path x:Name="Path_3" Width="20.2231" Height="33.4463" Canvas.Left="33.8636" Canvas.Top="88.4091" Stretch="Fill" StrokeThickness="7" StrokeLineJoin="Round" Stroke="#FF000000" Data="F1 M 50.5868,91.9091L 37.3636,106.234L 49.4848,118.355"/>
            <Rectangle x:Name="Rectangle" Width="143.047" Height="159.025" Canvas.Left="0" Canvas.Top="0" Stretch="Fill" StrokeThickness="2" StrokeLineJoin="Round" Stroke="#FF000000"/>
        </Canvas>
    </Viewbox>


</sap:ActivityDesigner>

Değişiklikler sonrasında oluşan görüntü ise aşağıdaki gibi olacaktır.



Yapmış olduğumuz değişiklikten sonra projeyi derleyip, iş akışı tasarım uygulamasını hazırlamış olduğumuz projeye geçiyoruz. Bir önceki yazımızdan da hatırlayacağınız üzere CustomActivities projesini HostApp projesine referans göstererek içerisinde yapmış olduğumuz değişikliklerin ve eklemiş olduğumuz değişiklikleri kullanabilmemize olanak tanımış oluyoruz.

Oluşturmuş olduğumuz harici aktivitenin HostApp projesinde gözükebilmesi için, MainWindow.xaml 'in *.cs kısmını açarak aşağıdaki değişiklikleri yapmaya başlıyoruz.

İlk olarak yapmamız gereken CustomActivities projesini kod ekranında kullanabilmek olacaktır. Bunun için aşağıdaki isim alanlarını ekliyoruz.

using CustomActivities;
using System.ComponentModel;
using System.Activities.Presentation.Metadata;

Daha öncedn oluşturmuş olduğumuz RegisterMetaData isimli metodu prompt aktivitesini alacak şekilde aşağıdaki gibi yeniden güncelliyoruz.

private void RegisterMetaData()
{
    (new DesignerMetadata()).Register();

    AttributeTableBuilder builder = new AttributeTableBuilder();

    builder.AddCustomAttributes(typeof(Prompt), new DesignerAttribute(typeof(BasitTasarim)));

    MetadataStore.AddAttributeTable(builder.CreateTable());
}

Son yapmış olduğumuz bu değişiklik sonrasında oluşan görünüm aşağıdaki gibi olacaktır.



Ayrıca yapmış olduğumuz iş akışı tasarım ekranına bizim hazırlamış olduğumuz toolbox üzerinde yer alan bileşenleri sürürkleyip bırakabilir. Sürüklediğimiz bileşenlere de değerler atayabilmemiz mümkündür.

Peki, biz bu hazırlamış olduğumuz harici aktivitelere özellikler ekranından değer alabilecek bir bileşen ekleyebilmemiz mümkün müdür şeklinde aklımıza sorular gelmektedir. Cevabı tabikii evet olacaktır. Bunun için CustomActivities projesinin içerisine eklemiş olduğumuz BasitTasarim aktivitesinin XAML kod tarafına bir adet textbox kontrolü ekliyor olacağız.

Tasarımı daha derli toplu olması için ViewBox görünüm nesnesinin üst kısmına ekran üzerine yerleşim konusunda bizlere yardım olan <StackPanel> 'i ekledikten sonra TextBox bileşenini ekleyebilmemiz mümkündür.

<StackPanel>
    <Viewbox x:Name="Group" Width="75" >
        ...
    </Viewbox>
    <TextBox Text="{Binding Path=ModelItem.Text, Mode=TwoWay}" />
</StackPanel>

Text değerini dışarıdan gelecek olan bir değerden alacağını belirttikten sonra yapmış olduğumuz değişiklikleri kaydediyor ve projemizi derledikten sonra çalıştırıyoruz.



Evet sonuç tam istediğimiz gibi olmuştur...

Bu yazımızda anlattıklarımızı toparlamak gerekirse, harici bir iş akışı aktivitesini nasıl oluşturmamız gerektiğini, görsellik nasıl kazandırabileceğimizi ve bu tasarım içerisine görsellik dışında değerleri atayabileceğimiz kontrolleri nasıl ekleyebileceğimizi incelemeye çalıştık. Bir sonraki yazımızda ise eklemiş olduğumuz bileşenlerin iş akışı tasarım ekranında derlenebilmesine göz atıyor olacağız.

Umarım yararlı olabilmiştir.

Kaynak
MSDN

Turhal Temizer

info@turhaltemizer.com

Pazartesi, Mart 15, 2010

Asp.Net MVC 2 RTM

Merhabalar,

MVC Framework 'un 2.0 sürümü artık RTM olmuş durumdadır. Aşağıda verecek olduğumuz link yardımı ile indirip bilgisayarınıza kurabilmeniz mümkündür. Yakın zaman içerisinde MVC Framework 1.0 ile hazırlanmış olan uygulamaları nasıl 2 sürümüne yükseltebileceğimize ve 2 sürümü ile gelen yenilikleri detaylı bir biçimde inceliyor olacağız.

İndirmek için tıklayınız.

Cumartesi, Mart 13, 2010

WPF 4 & .Net Framework 4 - Workflow Designer Oluşturmak - I

Windows Workflow Foundation (WF) ile incelemelerimizi bir süredir .Net 3.0 kütüphanesi ve Visual Studio IDE 'si üzerinde alışık olduğumuz tasarım ekranı ile incelemeye ve uygulamalarımızı geliştirmeye çalışıyorduk. Ancak çok yakın bir zaman içerisinde .Net 4.0 'ın final sürümüne kavuşacağını düşünerek bu yazımızı Visual Studio 2010 IDE sinde .Net 4.0 ile Worklow Designer programlama modelini incelemeye çalışıyor olacağız.

Not: Worfklow Foundation 4.0 ile ilgili detaylı bilgi için Burak Selim Şenyurt 'un yazmış olduğu bu güzel yazıyı incelemenizi tavsiye ediyorum. Çünkü bu yazımızda uygulama bazında WF 4.0 'ı inceliyor olacağız.

Yakın zaman içerisinde karşımıza çıkacak olan Visual Studio 2010 bilindiği üzere WPF ile yeniden tasarlandı. Daha esnek ve daha kullanışlı bir tasarım ile karşımıza çıktı. Özellikle WPF 'in esnekliğini Visual Studio 2010 üzerinde kullanabileceğimize hiç şüphemiz yoktur. VS2010 'da bu değişiklikler olurken bir yandan da yenilenen görünümü, tasarım yapısı ve WPF ile hazırlanmış iş akışlarını tasarlayabildiğimiz Activity Library ekranı yardımı ile biz geliştiriciler için kullanım kolaylaşmıştır.

Bu kadar yenilenen tasarımdan bahsettikten sonra artık uygulama geliştirmeye geliştirmeye başlayabiliriz. Yazımızında başında da bahsettiğimiz gibi uygulamalarımızı VS2010 ve .Net 4.0 ile geliştiriyor olacağız. Uygulamamız esnasında bir WPF uygulamasında iş akışı süreçlerini kullanıyor olacağız.

İlk olarak VS2010 yardımı ile WPF uygulaması oluşturuyoruz.



Projemiz başarılı bir şekilde oluşturulduktan sonra proje özellikleri ekranında yapacak olduğumuz ufak birkaç işlem bulunmaktadır. Projelerde varsayılan target Framework .Net Framework 4 Client Profile seçeneği seçili olarak gelmektedir. Biz bunu .Net Framework 4 seçeneği seçili olacak şekilde değiştiriyoruz.



Bu ekranda yapmış olduğumuz değişiklik esnasında karşımıza Target Framework 'u değiştirmek istiyor musunuz? şekilde soru soran bir ekran çıkacaktır. Evet dedikten sonra artık .Net Framework 4 'ün bütün nimetlerinde faydalanır duruma geliyoruz.

Peki biz bu değişikliği neden yaptık. Çünkü belirli bir şablon tipine dahil olan bir proje yi oluşturduğumuzda yalnızca bu proje tipinde kullanılabilecek isim alanlarının ve araçlarının olduğu daha özelleştirilmiş bir framework bizlere sunulmaktadır. Sebebi ise o proje geliştirilirken onun ile ilgisi olmayan framework kısımlarını kullanmamaktır. Bunun en büyük faydası ile Garbage collector 'un daha rahat çalışması ve çabuk derleme şeklinde yorumlayabiliriz. Ancak biz bu yazımızda WF tasarım ekranını kendimiz oluşturmaya çalışacağımız için framework 'un tamamına ihtiyacamız olacaktır. Çünkü biraz önceki kısıtlı framework 'te WF geliştirmemize olanak tanıyacak olan dll 'ler yer almamaktaydı. Bu kısa bilgiyi de öğrendikten sonra işlemlerimizi yapmaya devam edebiliriz.

Şimdi uygulamamıza bir tane Class Library ekliyoruz. Sonrasında bir adet sınıf oluşturuyoruz ve bu sınıfı CodeActivity 'den türetiyoruz. Sonrasında ise aşağıdaki kodları ekliyoruz.

namespace CustomActivities
{
    using System;
    using System.Activities;
    using System.Activities.Statements;

    public class Prompt : CodeActivity
    {
        public string Text { get; set; }
        public string Response { get; set; }

        protected override void Execute(CodeActivityContext context)
        {
           throw new NotImplementedException();
        }

         public static Activity GetSimpleSequence()
         {
             return new Sequence
             {
                 Activities =
                 {
                    ;  new Prompt(),
                    ;  new Assign()
                 }
             };
        }
    }
}

Bu işlem sonrasında projeyi derliyor ve oluşturmuş olduğumuz WPF uygulamasına Add Reference ekranında projeler kısmından ekliyoruz.



Sonrasında WPF uygulamasına referans eklemeye devam ediyoruz. CodeActivity 'yi kullandığımız için projemizde System.Activities, System.Activities.Core.Presentation, System.Activities.Presentation DLL 'lerinin projeye ekli olması gerekmektedir.



Bu işlemi de tamamladıktan sonra hazırlayacak olduğumuz Workflow Designer 'i oluşturmaya başlayabiliriz.

WPF uygulaması içerisinde yer alan MainWindows.xaml üzerinde işlemler yapağız. Oluşturacak Workflow Designer 'ı WPF Grid içerisinde düzenliyor olacağız. Yaptığımız işlem sonrasında ise WorkflowDesigner 'ın içerisine Sequence aktivitenin tasarım ekranında yer alacaktır.

Şimdi tasarım ekranı üzerinde birkaç düzenleme yapalım. İlk olarak standart olması açısından tasarım ekranının boyutlarını 800x600 olarak belirliyoruz.



Biz bu işlemleri yaparken IDE 'nin yaptığımız değişiklikleri XAML kod üzerine yansıttığını unutmayalım. Yani istersek bu işlemlerin hepsinin XAML üzerinde nesnelerin özelliklerine değerler vererekte yapabilmemiz mümkündür.

Tasarım ekranı üzerinde yapmış olduğumuz işlemler sonrasında şimdi de Grid 'i özelleştireceğiz. ColumnDefinitions özelliklerine CollectionEditor yardımı ile birkaç kolon ekleyip özelliklerine değerler atayacağız.



Collection Editor 'u açtıktan sonra 3 tane kolon ekliyoruz.



Kolonları ekledik. Ancak genişlik boyutunu gördüğünüz kadarıyla 4* şeklindedir. Peki bu yıldız nedir? Kısaca açıklayalım.

Yıldız değeri kullanılan satır ya da sütunlar değişebilir şekilde kullanılabilir. Örneğin * olan değerler ilk durumda satır ve sütünlar bir kez kullanılabilirken 2* olanlar iki kez kullanılabilmektedir.

Grid üzerinde yapmış olduğumuz değişiklikler XAML kod tarafına nasıl yansıdığına kısaca göz atmak gerekirse şu şekilde olmuştur.

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition />
        <ColumnDefinition Width="4*" />
        <ColumnDefinition />
    </Grid.ColumnDefinitions>
</Grid>

Herşey güzel. Bu grid üzerine neden 3 kolon koyduk? Hemen açıklayalım. Visual Studio IDE 'sinden referans alarak ve kendi çapımızda bir Workflow ekranı yaptığımızı düşünürsek, sol tarafta ToolBox (araç kutusu) orta tarafta Workflow Designer (İş akışı tasarım) en sağ tarafta da Property Inspector (özellikler( bölümü yer alacaktır.

XAML tarafındaki işlemleri şimdilik tamamladık. Sırada kod tarafında yapacağımız işlemler var. Bunun için MainWindows.xaml 'in kod ekranını açarak işlemlerimize başlıyoruz.

İlk olarak kullanacak olduğumuz isim alanlarını ekliyor olacağız.

using System.Activities.Core.Presentation;
using System.Activities.Presentation;
using System.Activities.Presentation.Toolbox;
using System.Activities.Statements;

Kullanacak olduğumuz isim alanları hazır durumdadır. Bir Workflow Designer yaptığımıza göre WorkflowDesigner sınıfını proje içerisinde kullanıyor olamak gerekiyor.

public partial class MainWindow : Window
{
    private WorkflowDesigner wd;

    public MainWindow()
    {
        InitializeComponent();
    }
}

Şimdi ise Ekran üzerinde WorkflowDesigner oluşturabilmek için AddDesigner isimli private bir metot oluşturacağız. Bunun yardımı ile iş akışı tasarım ekranının oluşmasını ve grid 'in hangi kısmında duracağını belirtiyor olacağız.

private void AddDesigner()
{
    //WorkflowDesigner sınıfı çağırılır.
    this.wd = new WorkflowDesigner();

    //Workflow Designer 'in ekran üzerinde nerede olacağını belirtiyoruz.
    Grid.SetColumn(this.wd.View, 1);

    //Varsayılan olarak bir Sequence oluşturuyour.
    this.wd.Load(new Sequence());

    //WorkflowDesigner 'i grid 'e ekliyoruz.
    grid1.Children.Add(this.wd.View);
}

Çağırmış olduğumuz Sequence sınıfının DesignerMetaData() sınıfını içinde barındıran bir sınıf ile kayıt etmemiz gerekmektedir. Bu sebeple RegisterMetaData() isimli bir metot daha oluşturarak bu işlemi gerçekleştiriyor olalım.

//Sequence sınıfının kaydı yapılıyor.
private void RegisterMetaData()
{
    (new DesignerMetadata()).Register();
}

Sırada yapacak olduğumuz işlem ise MainWindow ekranı oluşturulurken hazırlamış olduğumuz metotları çağırmak olacaktır.

public MainWindow()
{
    InitializeComponent();
    this.AddDesigner();
     this.RegisterMetaData();

}

Çağırma işlemleri de tamamlandıktan sonra artık workflow tasarım ekranımızın ilk adımınının nasıl olduğuna göz atabiliriz. Bunun için projeyi çalıştırmak yeterli olacaktır.



İstediğimizi başardık. Artık WPF uygulamasını bir iş akışı tasarımcısı yapma konusunda ilk adımımızı attık ve tasarım bölümünü oluşturduk. Sırada yapacak olduğuğumuz işlem ise ToolBox 'ı ve Property Inspector 'u oluşturmak olacaktır.

Oluşturacak olduğumuz bu iki bölümü yaparken Workflow Designer 'ı oluşturduğumuz gibi basit bir şekilde olacaktır. Çünkü .net 4.0 'ın yapısı bize daha da fazla şekilde esnek, geliştirilebilir ve genişletirilebilir bir yapı sunmaktadır.

WPF Grid içerisine ToolBox 'ı oluşturma işlemine başlıyoruz. Bu işlem için GetToolboxControl isminde bir metot kullanırken bunu ToolboxControl den oluşturuyor olacağız.

Toolbox Category Item Collection 'nun içerisine iki değer atayacağız. Bunlar;
1. CustomActivitiex.Prompt aktivitesi,
2. System.Activities.Statements.Sequence aktivitesi olacaktır.

private ToolboxControl GetToolboxControl()
{
    // Toolbox kontrol oluşturuluyor.
    ToolboxControl ctrl = new ToolboxControl();

    //Kategorideki elemanlar için koleksiyon oluşuturuluyor.
    ToolboxCategory categoryItems = new ToolboxCategory ("category1");

    //Toolbox öğeleri oluşturulur.
    ToolboxItemWrapper tool = new ToolboxItemWrapper ("CustomActivities.Prompt",     "CustomActivities", null, null);

    ToolboxItemWrapper tool2 = new ToolboxItemWrapper ("System.Activities.Statements.Sequence",
"System.Activities, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35", null, "Sequence");

    // Toolbox öğeleri kategoriye ekleniyor.
    categoryItems.Add(tool);
    categoryItems.Add(tool2);

    //kategoriye eklenen toolbox kontrolleri.
    ctrl.Categories.Add(categoryItems);

    return ctrl;
}

Toolbox kontrol 'ün içeriğini kontrolduğumuza göre şimdi de toolbox 'ı eklemek için AddToolBox() isimli metodu oluşturuyor.

private void AddToolBox()
{
    ToolboxControl tc = GetToolboxControl();
    Grid.SetColumn(tc, 0);
    grid1.Children.Add(tc);
}

SSon olarak bu metodu mainwindow metodunda çağırdıktan sonra uygulamamızı derleyerek oluşan sonuca bir göz atıyoruz.



İş akışı tasarım ekranı oluşturulması adımları olan Toolbox ve Workflow Designer bölümlerinin oluşturulmasını başarılı bir şekilde tamamlamış bulunuyoruz. Son adımımız olan Property Inspector bölümünün eklenmesi aşamasını şimdi yapıyor olalım.

Property Inspector ekranını kullanmak için her zamanki gibi eklememize yarayan bir metot oluşturacağız. Sonrasında ise bu metodu formun oluştuğu anda çağırarak işlemlerimizi tamamlıyor olacağız.

Şu ana kadar yapmış olduğumuz işlemler esnasında gördüğümüz kadarıyla aslında temek bir iş akışı tasarım ekranı oluşturmak oldukça kolaylaştırılmıştır. Özellikler ekranını hazırlarken de bu kolaylıklardan yararlanarak basitçe işlemlerimizi tamamlıyor olacağız. WorkflowDesigner sınıfının UIElement lerinden olan PropertyInspectorView yardımı ile özellikler ekranını rahatlıkla ekleyeceğiz.

private void AddPropertyInspector()
{
   Grid.SetColumn(wd.PropertyInspectorView, 2);
   grid1.Children.Add(wd.PropertyInspectorView);
}

Property Inspector ekranını da eklediğimize göre artık uygulamamızın en son haline bakabiliriz.



Sonuç tam istediğimiz gibi gözükmektedir.

Şu ana kadar yazmış olduğumuz kod parçalarının birleştirilmiş hallerine göz atmak gerekirse sonuç aşağıdaki gibi olacaktır.

using System.Windows;

using System.Activities.Core.Presentation;
using System.Activities.Presentation;
using System.Activities.Presentation.Toolbox;
using System.Activities.Statements;
using System.Windows.Controls;

namespace HostApp
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
    public partial class MainWindow : Window
    {
        private WorkflowDesigner wd;

        public MainWindow()
        {
            InitializeComponent();
            this.AddDesigner();
            this.RegisterMetaData();
            this.AddToolBox();
            this.AddPropertyInspector();
        }

        private void AddDesigner()
        {
             //WorkflowDesigner sınıfı çağırılır.
             this.wd = new WorkflowDesigner();

             //Workflow Designer 'in ekran üzerinde nerede olacağını belirtiyoruz.
             Grid.SetColumn(this.wd.View, 1);

             //Varsayılan olarak bir Sequence oluşturuyour.
             this.wd.Load(new Sequence ());

             //WorkflowDesigner 'i grid 'e ekliyoruz.
             grid1.Children.Add (this.wd.View);
        }

        //Sequence sınıfının kaydı yapılıyor.
        private void RegisterMetaData()
        {
            (new DesignerMetadata()).Register ();
        }

        //Toolbox oluşturuluyor.
        private ToolboxControl GetToolboxControl()
        {
            // Toolbox kontrol oluşturuluyor.
            ToolboxControl ctrl = new ToolboxControl();

            //Kategorideki elemanlar için koleksiyon oluşuturuluyor.
            ToolboxCategory categoryItems = new ToolboxCategory("category1");

            //Toolbox öğeleri oluşturulur.
            ToolboxItemWrapper tool = new ToolboxItemWrapper("CustomActivities.Prompt", "CustomActivities", null, null);

             ToolboxItemWrapper tool2 = new ToolboxItemWrapper("System.Activities.Statements.Sequence",
                  "System.Activities, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35", null, "Sequence");

             // Toolbox öğeleri kategoriye ekleniyor.
             categoryItems.Add(tool);
             categoryItems.Add(tool2);

            //kategoriye eklenen toolbox kontrolleri.
            ctrl.Categories.Add (categoryItems);
            return ctrl;
       }

       //Ekrana toolbox bölümü eklendi.
       private void AddToolBox()
       {
            ToolboxControl tc = GetToolboxControl();
            Grid.SetColumn(tc, 0);
            grid1.Children.Add(tc);
       }

       //Özellikler (Property Inspector) bölümü ekleniyor.
       private void AddPropertyInspector()
       {
             Grid.SetColumn (wd.PropertyInspectorView, 2);
             grid1.Children.Add (wd.PropertyInspectorView);
        }
    }
}

Sonuç olarak .Net Framework 'un ve WPF 'in esnekliğinden yararlanarak çok hızlı bir şekilde iş akışı tasarım ekranının başlangıç düzeyini oluşturmuş bulunuyoruz. Bu yazımızı takiben aynı uygulama üzerinden geliştirmelerimize devam ederken CustomActivity kütüphanesini daha aktif kullanarak harici aktiviteler oluşturuyor olacağız.

Umarım yararlı olabilmiştir.
Kaynak
MSDN

Turhal Temizer

info@turhaltemizer.com

Perşembe, Mart 04, 2010

Silverlight: Merged Dictionaries

Silverlight ile uygulama geliştirirken resource dosyalarını kullanmanın en pratik yoludur MergedDictionaries. Ancak bunu kullanabilmek için çok az XAML bilmek gerekmektedir ve kullanım şekli aşağıdaki gibidir.

< ResourceDictionary >
    < ResourceDictionary.MergedDictionaries >
        < ResourceDictionary Source="BlueResourceDictionary.xaml" / >
    < / ResourceDictionary.MergedDictionaries >
< / ResourceDictionary >


 Bazı uygulama geliştiriciler "bu kullanımı kod ile yapabilir miyiz?" ya da "nasıl yapabiliriz?" şeklinde sorular sormaktadırlar. Bu mümkündür ve kullanım şekli aşağıdaki gibidir.


 var dictionary = Application.Current.Resources; dictionary.MergedDictionaries.Clear();
var dict = new ResourceDictionary { Source = new Uri("Blue.xaml", UriKind.Relative) };
dictionary.MergedDictionaries.Add(dict);



Kolay gelsin...








Visual Studio 2008 - Run as Administrator

Windows Vista ya da 7 işletim sistemlerinde Visual Studio 2008 ile çalışırken IIS üzerinden geliştirilecek uygulamalar için bu yerel sunucuya erişmek istendiği durumlarda yapılması gereken bir kaç işlem vardır.
VS2008 ile yerel sunucu üzerinde uygulama geliştirmek istediğimizde bize admin olarak uygulamayı açmanız şeklinde bir mesaj vermektedir. Bu mesajı engellemek için mantıken uygulamayı administrator ile açmamız gerekmektedir. Bu işlem için yapılması gerekenler aşağıdaki gibidir.
Birinci basit çözüm Visual Studio 2008 üzerinde sağ tıklama sonrasında admin olarak çalıştır demektedir. Ancak bu işlem sadece bir seferliğine mahsus bir çözüm olmakla birlikte bir daha ki sefere tekrardan açmak istediğinizde iis ‘i göremeyiyor oluruz.
İkinci çözüm ise kalıcı olandır. Visual Studio 2008 ‘in üzerinde sağ tıklama yaptıktan sonar özellikler seçeneğinden aşağıda çıkan ekranda admin olarak çalıştır seçeneğini seçip değişiklikleri uyguladığınızda artık her açışınızda sorunsuzca çalışıyor olacaksınız.


Umarım yararlı olabilir.