5 Temmuz 2011 Salı

Windows Phone 7 nedir? WP7'de nasıl uygulama geliştirilir?

Mobil uygulamaların şuan çok popüler olduğunu biliyorsunuz.. Ama Objective C, Java falan kasamıycam diyosunuz.. Zaten Macbook falan da almak lazım şimdi Emülatörle uğraşamam da dersiniz.. Eee Silverlight biliyorsunuz az çok! Ne duruyorsunuz mobil uygulama geliştirmek için?

Windows Phone 7.. Microsoft'un yeni nesil akıllı telefon işletim sistemi. Üzerinde uygulama geliştirmek için Silverlight bilmek yeterli! Bakalım nasıl kuruluyor:
  1. Windows Phone Developer Tools
  2. Windows Phone Developer Tools January 2011 Update
  3. Windows Phone Developer Tools Fix
Bunları indirip yükledikten sonra VS 2010'umuz açıyoruz. Ola ki bu noktada şu hatayı aldınız:

WP7 paketindeki herhangi bir yazılımın VS 2010 SP1 ile çalışmakta sorun yaşadığı anlamına geliyor. Bunu da aşmak için:

Control Panel --> Programs and Features --> Microsoft Visual Studio 2010 Service Pack 1 --> Uninstall/Change --> ReApply
MS Visual Studio 2010 SP1

yapmak yeterli. Sorunu aştıktan sonra VS 2010'umuzu açıyoruz ve Yeni Proje ekranında, sol menüde yeni bir arkadaşımız var artık: Silverlight for Windows Phone















Bu ekranda, Windows Phone Application seçerek yeni projemizi yaratıyoruz. VS 2010 geliştirme ekranı 2'ye bölünmüş olarak geliyor. Bir tarafta klasik xaml kodu, diğer tarafta xaml'de yaptığımız değişiklikleri anında görebileceğimiz WP7 ekranı.





















Hemen bir Hello World geliştiriyoruz.

Xaml:
<phone:PhoneApplicationPage
x:Class="TestWP7App.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
SupportedOrientations="Portrait" Orientation="Portrait"
shell:SystemTray.IsVisible="True">

<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>

<StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
<TextBlock x:Name="ApplicationTitle" Text="HELLO WORLD"
Style="{StaticResource PhoneTextNormalStyle}"/>
<TextBlock x:Name="PageTitle" Text="Giriş" Margin="9,-7,0,0"
Style="{StaticResource PhoneTextTitle1Style}"/>
</StackPanel>

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<StackPanel Orientation="Vertical">
<StackPanel Orientation="Horizontal">
<TextBox x:Name="txtName" Width="300" Height="80"></TextBox>
<Button x:Name="btnHello" Content="Selam" Width="150"
Height="80" Click="btnHello_Click"></Button>
</StackPanel>
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
<TextBlock x:Name="txtResult" Width="300" Height="80"
TextAlignment="Center" FontSize="50"></TextBlock>
</StackPanel>
</StackPanel>
</Grid>
</Grid>
</phone:PhoneApplicationPage>
Designer Görünümü:
























Code Behind:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;

namespace TestWP7App
{
public partial class MainPage : PhoneApplicationPage
{
// Constructor
public MainPage()
{
InitializeComponent();
}

private void btnHello_Click(object sender, RoutedEventArgs e)
{
string isim = txtName.Text.Trim();
txtResult.Text = "Hello " + isim;
}
}
}

Derledikten sonra yapmamız gereken uygulamamızı test etmek. Ama henüz Türkiye'de satışa çıkmadığı için elimizde WP7 işletim sistemi içeren akıllı telefon yok :( Yılmayınız! Testimizi Developer Tools içerisinde gelen Emülatör üzerinde yaparız, müsterih olun.. Bunun için Standart Bar'dan Windows Phone 7 Emulator seçimini yaptıktan sonra Proje --> Deploy yapmanız yeterli.




Deploy işlemini yaptıktan sonra emülatör otomatik olarak açılacak ve sırayla aşağıdaki ekranlar gelecek:




















Bu ekranda uygulamamızı seçtiğimizde de geliştirdiğimiz uygulamamız açılacak. Testimizi artık gerçekleştirebiliriz:

Emülatör testi sırasında karakter girişi yapılacak textbox gibi alanlara tıklandığında otomatik olarak sanal klavye çıkıyor örnekte de görüldüğü üzere. Karakter seçimi de bu sanal klavye üzerinden fare kullanarak yapılıyor. Sanal klavye çok tatlı görünse de sık yapılan testlerde bir noktadan sonra tek tek karakter seçmek insanı bayıyor. Bunun için de Page Up/ Page Down tuşları ile sanal klavye / normal klavye geçişini sağlayabilirsiniz ;)

Gördüğünüz gibi çok basit bir şekilde ilk Mobil uygulamanızı geliştirdiniz. Tebrikler!

Ben Microsoft'un verdiği kontrollerle yetinemem, daha fazla isterim diyenler için de insanlar boş durmamış:
  1. Silverlight For Windows Phone Toolkit (Ücretsiz, codeplex'te)
  2. Telerik RadControls for Windows Phone 7 (Ücrete tabii)

Olur da bir şekilde WP7 içeren akıllı telefon edinirseniz, telefon üzerinde uygulamanızı çalıştırmak için development makinenize Zune Software yüklemeniz yeterli. Telefonunuz data kablosuyla development makinenize bağladıktan sonra, VS 2010'dan deploy ederken Standart Bar'dan bu sefer Windows Phone 7 Emulator yerine Windows Phone 7 Device seçerek deployment yapacaksınız. Zune Software arka planda çalışarak sizin için gerekli deployment işlemini gerçekleştirecek. Yalnız bu şekilde uygulama atmanın problemi, bir süre sonra uygulamanın telefondan silinmesi (sanırım demo gibi bir kapsamda sayılıyor). Genel bir dağıtım için de WP7'de henüz bir güzelliği yok Microsoft'un. Bunun için Ekim ortasında release olacak olan bir sonraki sürüm 7.1 yani Mango'yu beklemek gerekecekmiş (Daron Yöndem öyle söyledi).

WP7 girişi için şimdilik söyleyeceklerim bu kadar, umarım süper uygulamalar geliştirmenizde bir katkım olmuştur ;)

1 Temmuz 2011 Cuma

IIS 7'de WCF tanımı sonrası oluşan Could not load type 'System.ServiceModel.Activation.HttpModule' problemi

WCF servisini yazdınız. IIS 7 üzerinde New Site ile eski usül fiziksel path'ini gösterdiniz. Buraya kadar sorun yok. Ama ne zaman ki WCF servisinizi IIS üzerinde görüntülemeye çalıştınız, bummm!! O iğrenç sarı/beyaz ekranı gördünüz. Ne diyor hata mesajı?










Could not load type 'System.ServiceModel.Activation.HttpModule' from assembly 'System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'

Nedeni: IIS'in .NET Framework 4'ten sonra kurulmuş olması veya Http Activation Modulün IIS ve .NET Framework 4'ten sonra kurulmuş olması.

Çözüm 1:
Control Panel / Programs and Features / Microsoft .NET Framework 4 -> Repair

Çözüm 2:
32-bit uygulamalar için (İşletim sistemi 64-bit olsa da çalıştırmak gerekiyor) :
C:\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis -iru

64-bit uygulamalar için (Sadece 64-bit işletim sistemlerinde çalıştırmak gerekiyor) :
C:\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis -iru


Kolay gelsin...

2 Mayıs 2011 Pazartesi

Silverlight'ta Double-Click Nasıl Yapılır

Silverlight 5 ile birlikte, projelerimizde bazen ihtiyaç duyduğumuz double click (hatta 3,4 .. n tane click) olayının yakalanması geldi. Aslında eski Silverlight sürümlerinde bu özellik direkt olarak olmasa da biraz akıl yürütmeyle gerçeklenebiliyordu. (Global bir datetime ve point tanımla, mouse click’te belirli bir zaman geçmediyse ve mouse belirli bir mesafe içerisinde tıklanmışsa bunu yakala vs.). Silverlight 5’te ise bu olay ilginç bir şekilde gerçeklenmiş. Örneğimize bakalım;

Açtığımız Silverlight 5 projesinin xaml dosyasında bir Rectangle tanımlıyoruz (Makalenin ilerisinde bunun neden Button değil de Rectangle olduğunu söyleyeceğim ;) )
<UserControl x:Class="SilverlightApplication2.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400">

<Grid x:Name="LayoutRoot" Background="White">
<Rectangle x:Name="rectangle1" Stroke="Black" StrokeThickness="10"
VerticalAlignment="Center" Width="100" Height="100"></Rectangle>
</Grid>
</UserControl>
Silverlight 5’te ilginç bir şekilde gerçeklenmiş dediğim nokta burada ortaya çıkıyor. Double Click desteği için özel bir “DoubleClicked” benzeri bir event tanımlamak yerine “MouseLeftButtonDown” eventi içerisinde, eventArgs parametresini kullanmayı tercih etmişler. Görelim;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

namespace SilverlightApplication2
{
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();

rectangle1.MouseLeftButtonDown += new MouseButtonEventHandler(rectangle1_MouseLeftButtonDown);
}

private void rectangle1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
if (e.ClickCount == 2)
{
MessageBox.Show("Double clicked!");
}
}
}
}
Event Args içerisindeki ClickCount property’si bize kaç sayıda click yapıldığını verdiği için buradan single, double, triple .. n-adet click sayısına göre istediğimiz ayrımı yapabiliyoruz. Silverlight 5 bloglarında bu gerçeklemenin Beta’ya özel olduğu ve Release ile değiştirilebileceği konuşuluyor, bu da aklınızda bulunsun.

Örnek uygulamamızın ekran çıktısı da tahmin edeceğiniz üzere şu şekilde;



















Peki bu örneği neden Rectangle kullanarak yaptım :) Aslında biz uygulamalarımızda rectangle’lar değil Button’lar kullanıyoruz. Silverlight Button’larda çoğunuzun da bildiği üzere MouseDown ve MouseUp eventleri, as designed olarak, Click eventi tarafından engellenir. Bunun çözümü olarak 2 yol var:
Birincisi ve çok tercih edilmeyeni Buton’un ClickMode’unu Hover yapmak ve MouseDown ve MouseUp event’lerinin engellenmesini önlemek. Ancak hangimiz isteriz ki bir Buton’un üzerine gelince Click event’i tetiklensin :)

Daha temiz olan 2. Yol ise, kendi Button sınıfımızı implement etmek ve bu sınıf içerisinde MouseDown ve MouseUp event’lerini isteğimize göre override etmektir. Bu da şu şekilde yapılıyor;
using System.Windows.Controls;
using System.Windows.Input;

namespace SilverlightApplication2
{
public class BenjaminButton: Button
{
protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
{
base.OnMouseLeftButtonDown(e);
e.Handled = false;
}

protected override void OnMouseLeftButtonUp(MouseButtonEventArgs e)
{
base.OnMouseLeftButtonUp(e);
e.Handled = false;
}
}
}
Burada dikkat edilmesi gereken nokta, override edilen metotların sonunda e.Handled = False yapılması gerekliliğidir. Bu sayede, Click eventi, MouseDown ve MouseUp event’lerini engellemeyecektir. Xaml içerisinde kullanımı da tahmin ettiğiniz üzere;
<UserControl x:Class="SilverlightApplication2.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
xmlns:Onur="clr-namespace:SilverlightApplication2"
d:DesignHeight="300" d:DesignWidth="400">

<Grid x:Name="LayoutRoot" Background="White">
<StackPanel Orientation="Vertical">
<Onur:BenjaminButton x:Name="btn1" Content="Yeni Buton" Height="100" Width="100" HorizontalAlignment="Left"></Onur:BenjaminButton>

<StackPanel Orientation="Horizontal">
<TextBlock Text="Click: " Width="150" Height="30"></TextBlock>
<TextBlock x:Name="txt1" Width="250" Height="30"></TextBlock>
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="On Mouse Down: " Width="150" Height="30"></TextBlock>
<TextBlock x:Name="txt2" Width="250" Height="30"></TextBlock>
</StackPanel>
</StackPanel>
</Grid>
</UserControl>
şeklinde olacaktır. Code behind ise;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;

namespace SilverlightApplication2
{
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();

btn1.Click += new RoutedEventHandler(btn1_Click);
btn1.MouseLeftButtonDown += new MouseButtonEventHandler(btn1_MouseLeftButtonDown);
}

private void btn1_Click(object sender, RoutedEventArgs e)
{
txt1.Text = "Click olayı yakalandı";
}

private void btn1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
txt2.Text = "Mouse down olayı yakalandı. " + e.ClickCount.ToString() + " kere tıklandı";
}
}
}
Tıklama sonrasında ekran çıktısından görüldüğü üzere,



Hem Click hem de MouseDown olayı yakalanıyor ve double click desteğimizi de sağlamış oluyoruz.

Silverlight 5'te Double Click desteği bu şekilde verilmiş oluyor. Ancak tekrar hatırlatmakta fayda var, bu implementasyon Beta sürümü için geçerli ve SL 5 release olduğunda değişme ihtimali bulunuyor.

15 Şubat 2010 Pazartesi

Vatikan



















Din kavramına soğuk, illuminati sempatizanı, sanatla tek geçmişi Üniversite'deki Barok Dönemi ödevi olan bir insanın nasıl bugüne kadar gördüğü en görkemli yer olabilir Vatikan? Bu kişiye bile karmaşık duygular hissettirebiliyorsa, koyu Katolikler neler hissediyordur San Pietro'ya girdiğinde tahmin bile edemiyorum..

Dünya'nın hem yüzölçümü (0.44 km2) hem de nüfus (yaklaşık 1000) anlamında en küçük ama etkisi en büyük ülkesi Vatikan'la, 2007 kışındaki İtalya gezimde tanıştım. Manevi tarafı mı, hakkında anlatılan efsaneler mi, meydanı mı müzeleri mi yoksa bazilikası mı bilmiyorum. Ama bir şey var ki o da Vatikan deyince akan suların benim için durduğu.. Bu yazımda sadece 1 gün görme fırsatı bulduğum ama unutamadığım bu esrarengiz ülkeden bahsedeceğim.

Ocak 2007'de ziyaret ettiğim, Roma'nın bir kısmında yer alan bu minik ülkede, girişte sizi karşılayan geniş meydanı, meydan ortasındaki Bernini'nin anıtını, meydanın etrafındaki sütunlar ve sütunlar üzerindeki heykelleri incelemeye sıkılmazsanız (ben artık incelemekten yorulmuştum şahsen) saatleriniz yetmeyebilir. Benim hedefim belliydi. Dünya'nın en büyük kilisesine girmek!!



(Olur da birgün yolunuz düşerse söylemekte fayda var. Bazilika girişinde kıyafet düzgünlüğü kontrol ediliyor. Şortlarla, askılılarla girmek yasak ;) )

İçeri girdikten sonra San Pietro'nun neden Katoliklerin baştacı olduğunu anlıyorsunuz. Abartmadan söylüyorum hayatımda gördüğüm en görkemli yapı. 60.000 kişi alabildiğini söylesem (Şükrü Saraçoğlu 55.000) büyüklüğü konusunda kafanızda bir şeyler oluşmuş olur belki. Çok da anlamadığım için bana inanılmaz gelen bir iç mimari, heykeller, papa mezarları, şapeller vs. Her şey öyle ince ayrıntısına kadar işlenmiş ki, ilk başlayan heykeltraşın neden ömrünün Bazilika'nın bitişine yetmediği belli..

Tabii ki oraya giden her insan gibi, bu muhteşem Bazilika'nın Kubbe'sine çıkmak istiyorsunuz. Çıkış için 2 alternatif var. Merdiven veya asansör. Yanlış hatırlamıyorsam biri 4 diğeri 6 euro'ydu. Benim gibi eğlence olsun diye ya da üç beş kuruşun cimriliğini yapmak için merdivenle çıkmayın!! O daracık, 600'e yakın merdivende (bi yerden sonra saymayı bıraktım :)) iflahınız kesilir mazallah. 500 küsur merdiven tırmandıktan sonra kan ter içinde en tepedeki balkona çıkmıştım! Tüm Vatikan ve Roma panaromik olarak ayaklarımın altındaydı. Muhteşem bir manzaraydı..

Sıra geldi Vatikan Müzesine! Öncelikle sanattan anlamam, heykel, resim sevmem bu yüzden Vatikan'a kadar gidip, müzesine girmedim diyeni ıslak odunla döverler! Yapmayın etmeyin, bir yolunu bulup gidin! Pazartesileri kapalı, diğer günler de 16:45'e kadar açıktı dikkat edin.. (Müze giriş kartını atmamışım, 8 euro öğrenci bileti)

Müzenin ne kadar büyük olduğunu şu şekilde anlatabilirim. Hiç durmadan, resim, heykel incelemeden üstün körü gezdim, 2 saatte çıkabildim :) Birazcık ilginiz varsa günler geçirebilirsiniz o kadar diyim..

Müzede beni en çok etkileyen şeyler, Spiral merdivenler ve Sistine Şapeli'ydi. Spiral merdivenlerin özelliği birbiri içerisine geçmiş 2 farklı merdivenin döne döne aşağı inmesiydi. Sistine Şapeli de, Michelengelo'nun 4 yıl neredeyse hiç çıkmadan tamamladığı mekan ve Vatikan'ın en değerlisi.. O kadar güzel resim arasında en önemlisi de Adem'in yaratılışı (Creation of Adam). (Adem'le Tanrı'nın parmakları birbirine değmiyor. Belki alakalıdır -> Zeigarnik Effect). Şapel'in en önemli özelliği herkesin Melekler ve Şeytanlar'dan artık bildiği üzere, Papa seçimlerine ev sahipliği yapması. Mevcut Papa öldükten sonra yenisi seçilenen kadar tüm Papa adayları ve seçmen papazlar bu Şapel'e kendilerini kitliyorlar ve yeni Papa seçilene kadar Şapel'in bacasından siyah duman çıkıyor. Papa seçildikten sonra da bunu Katoliklere müjdelemek için basıyorlar beyaz dumanı.




























Bu arada Sistine Şapel'i girişinde görevi herkese "şşttt"lamak olan bir adam var sanırım. Buraya her giden bilir kendisini :) Ayrıca Şapel içerisinde fotoğraf çekmek yasak, bilginize..

Vatikan hakkında söylenecek daha çok şey var ama benimkiler bu kadar. Kilisenin din uğruna bugüne kadar yaptıkları, yönettikleri milyonlarca Katolik, siyasetle ve mafyayla harış neşir olmaları, suikaste kurban giden Papalar vs. gibi karanlık yüzü haricinde, candır Vatikan :) Zaten bu yüzü için God Father'daki mafyalar mafyası Michael Corleone (Al Pacino) bile der ki: "Biz değil, asıl mafya bunlar!"..

DipNot: Vatikan aslında Türkiye'den vize istemiyor, tabii İtalya'ya uğramadan gidebilirseniz ;)

SharePoint Projesi Hakkında

Yaklaşık 3 haftadır iyi dostum, iş arkadaşım Kutlu'yla birlikte, bir SharePoint Projesi üzerinde çalışıyoruz. Proje şudur ki; İş Bankası bünyesindeki birimlerin kendi süreçlerini işleteceği bir talep yönetimi mekanizması geliştirmek. İsminin çok cafcaflı olduğuna bakmayın, birçok alandan oluşan basit bir formun Banka içinde dolaşıp, farklı birimlerdeki farklı insanlar tarafından doldurulması işleminden ibaret. Yani bir ASP.NET formu kullanarak gerçeklemenin en fazla birkaç günü alacağı bir uygulama :) Yeni teknoloji takip etmeyi seven bir firma olarak tabii ki zor olanı seçiyoruz ve hiç know-how sahibi olmadığımız bir konu olan SharePoint ile bu sorunu çözmeye çalışıyoruz ;)

3 haftada neler yaptık, kısaca özetlemek gerekirse;
  1. Bu SharePoint nedir, ne değildir öncelikle bir araştırma gerekti tabii. Teknolojinin yetenekleri hakkında bilgi edinmeye başladık. Bir sonraki post'umun konusu bu olacak.

  2. Nerede yapacaktık bu SharePoint geliştirmesini? Daha doğrusu custom bir geliştirme yapacak mıydık? Yoksa uzay çağı gelmişti de her şeyi sürükle-bırak'la basit arayüzlerle mi yapacaktık? (Bunu bir kere bile düşünmedik aslen :)) Kısa bir debelenmeden sonra MS 2003 ve VS 2008 içeren bir WM üzerinde geliştirmenin en hızlı çözüm olacağını düşündük. Ancak WM'in yavaşlığı bizi öldürdüğü için kendi sunucumuzu kurma konusunda şirkette taarruza geçtik. Acılı bir kuşatma döneminden sonra elimizde -kurulumunu da kendimiz yaptığımız- bir Win2003, VS 2008, MOSS 2007 (daha sonra buna da değineceğim) içeren 3 GB Ram'li bir SharePoint Sunucusu ve bu sunucuya atanmış Win2008, SQL Server 2008 kurulu 2 GB Ram'li bir SQL Sunucusu vardı. Artık bizi kimse tutamazdı (ya da biz öyle zannediyorduk).

  3. SharePoint hakkında bilgi sahibi olduk tamam. Sunucular da ok. Eee geliştirmeyi nasıl yapacağız bu merette? Projenin deadline'ı çok sıkı (Mart başı) olduğundan ve ikimizin de SharePoint konusundaki tecrübesi sıfıra yakınsadığından stratejik bir karar vererek, pair programming yaklaşımına geçtik. Kararı verir vermez, yeni yerim olan şirketin köşesindeki Kutlu'nun masasına damladım :) SharePoint'te custom kod geliştirme deyince akla ilk gelen kavram olan WebPart'ları incelemeye koyulduk. User control benzeri bu mekanizmaların detayına inmeye gerek yok, ancak geliştirmek için sunucu tarafına Office Server SDK kurduğumuza değinmeden geçmek istemiyorum.

  4. SharePoint mantığını anladıkça listeler, döküman kütüphaneleri, wikiler bize daha anlamlı gelmeye başladı ve ufak tefek örneklerle bu veri yapılarını kullanmaya başladık. Yaptığımız şirket içi harcama onay uygulaması örneğinden biraz bahsetmek istiyorum. Şirketlerde çalışanların yaptıkları harcamaların (taksi, yemek fişi vs.) tutarlarını şirketten tahsil edebilmek için bazı formları doldurup, bu formları yönetici veya IK birimlerinin onayından geçirmek durumundadırlar. Biz bu akışı örnek alarak, SharePoint'te geliştirmeye başladık. Buna göre, geliştirdiğimiz WebPart'ları kullanan SharePoint sayfaları çalışanlardan harcama tutarı, açıklama, tarih gibi bilgileri alacak, bu giriş yapılan formlar bir döküman kütüphanesinde veya custom bir listede tutulacak ve daha sonra bu form onay verilmesi için çalışanın yöneticisine gönderilecekti. Bu assign işlemi içinse SharePoint'teki task list'leri kullanacaktık. Yöneticiler duruma göre bu task list'lerdeki item'ları onaylayacak, duruma göre tutarını güncelleyip onaylayacak, duruma göre de reddedecekti. Aslında çok basit gibi görünen bu mekanizma bir süredir annemizi ağlatmakla meşgul :) Bu örnekte ilerledikte burayı dolduracağım :)

  5. Hadi diyelim WebPart'lar ile sayfaları geliştirdik, user interaction'ı da sağladık. Peki iş akışımız nasıl işleyecek? İşte asıl üzerinde durmamız gereken yere gelmiştik. SharePoint Designer ve VS2008 Workflow mimari ile bu işe girersek acaba işin içinden çıkabilir miydik? Yoksa iş akışı olayını tamamen custom WebPart'lar üzerinde sağlayarak kolaya mı kaçmalıydık (aslında hamallığa)? Tabii ki yine temiz yönetimi seçerek iş akışlarımız SP Designer ve VS2008 WF üzerinde geliştirmeye karar verdik. Ta ki ekip liderimizden aldığımız o acı habere kadar: "Nintex kullanın!"

  6. Nintex, aslında daha önce biraz inceleme fırsatı bulduğum tatlı mı tatlı bir araç. Detayına girmeden biraz bahsedicek olursam, SharePoint üzerinde iş akışları tasarlamaya yarayan, direkt SharePoint sunucusuna kurulan (web arayüzlü), third-party (lisanslaması ayrı) bir zamazingo. Proje takviminin neredeyse ortasında böyle bir karar değişikliğine gidilince, bugün apar topar Nintex kurulumu (tabii ki Trial versiyonu) yaptık sunucumuz üzerine. Bizi çok üzmedi sağolsun ve hemen denemelere giriştik kendisiyle. İlk gözlemlerimiz olumlu ve umuyoruz ki bu projenin altından kalkacak kendisi..
1 Şubat itibariyle resmi olarak başladığımız projede, 15 günde geldiğimiz durum bundan ibaret. Tabii arada, projenin müşterisi olan Banka birimi ile yaptığımız analiz toplantılarını saymıyorum :s