Merhaba arkadaşlar ;


Adobe Flash nesnelerini kullanarak veritabanlarıyla etkileşim (kayıt ekleme,silme,sıralama...) ancak server side yazılımsal kodlamalarla mümkün.

Bunun için ASP.Net,PHP veya JSP benzeri bir programlama yardımıyla sağlayabiliriz. Baan gelen epostalar bu tür uygulamalarla

ilgili olabiliyor.Bende hem internetten hemde biraz kendim geliştirerek bir SQL Veritabanında bulunan veriyi Flash içerisinde

bir combobox'a yazan ve Flash içerisinde doldurulan bir kitap bilgisini gerekli ASP.Net kodlamaları ve SQL komutlarıyla SQL'e kaydeden bir uygulamayı

derleyip burada paylaşıyorum. Çalışma dosyaları için tıklayınız.




 


Adobe Flash CS4 programında Actionscript 3.0 çalışması açıp aşağıdaki gibi Input Text'lerimizi ve InstanceName'lerini verelim.Ayrıca

en aşağıda da bir adet combobox'ımız var instance name olarak kategori_cmb verdik.


 



 



Yukarıdaki
tasarımı Flash programı ile oluşturalım. Burada görmüş olduğunuz
TextBox, ComboBox ve Buton kontrolleri Fash içerisinde Window-Componenets
menüsü kullanılarak görüntülenebilir. Amacımız kitap kaydı yapan
sembolik bir swf ile buradaki bilgileri ASP.NET sayfasına göndermek ve
bu ASP.Net sayfası aracılığıyla bilgileri veritabanına kaydetmektir.
Burada Flash ile ilgili daha fazla bilgi vermek isterdim ancak bu
makalemin amacı Flash-ASP.NET ilişkisini anlatmak olduğu için amaçtan
çok fazla uzaklaşmak istemiyorum. Bu elemanları (TextBox, ComboBox ve
Buton) ActionScript içerisinde kullanabilmek için onlara özellikler
penceresini kullanarak instance name veriyorum.


 


Kitaba
ait kategoriler bir asp.Net sayfası aracılığıyla veritabanından
yüklenecek. Kaydet butonuna basıldığında bu bilgiler bu sefer de başka
bir asp.net sayfası aracığıyla veritabanına kaydedilecektir. Ben her
iki işlem için ayrı ayrı  ASP.NET sayfaları hazırlayacağım. Uygulamamızda kategorileri veritabanından yüklemek için kategorigetir.aspx, bilgileri kaydetmek için kitapkaydet.aspx sayfasını oluşturuyorum.



 


Veritabanımızı da hazırlayarak uygulamamamıza başlayabiliriz. Öncelikle Kitabevi isimli SQL Server veritabanımızı oluşturalım. Uygun alan adlarını kullanarak aşağıdaki tabloyu oluşturuyoruz.


Bu tabloyu Kitaplar ismi ile kaydediniz ve aşağıdaki verileri tabloya ekleyiniz.


 



 


  


Şimdi de Kategorilerimizi saklayacağımız tablomuzu oluşturalım ve Kategoriler ismi ile kaydedelim.


 



 


Ön
hazırlıklarımızı tamamladığımıza göre artık uygulamamıza geçebiliriz.
Öncelikle Flash programımıza tüm kategori ve kategoriid değerlerini
gönderecek olan kategorigetir.aspx sayfamızı hazırlayalım.





kategorigetir.aspx










protected void Page_Load(object sender, EventArgs e)


{


string constr = "Data Source=.;initial catalog=Kitabevi;Integrated Security=sspi";


        SqlConnection con = new SqlConnection(constr);


        SqlCommand cmd=new SqlCommand("select KatID,KatAdi from Kategoriler",con);


        DataSet ds = new DataSet();


        SqlDataAdapter da = new SqlDataAdapter(cmd);


        da.Fill(ds, "Kategoriler");


        StringBuilder sb = new StringBuilder();


        sb.Append("Kategoriler=");


        foreach (DataRow dr in ds.Tables["Kategoriler"].Rows)


        {


            sb.AppendFormat("{0},{1},", dr["KatID"].ToString(), dr["KatAdi"].ToString());


        }


       


        Response.Write(sb.Remove(sb.Length-1,1));


}



 


Bu sayfamızın amacı Kitabevi veritabanında yer alan Kategoriler tablosuna bağlanmak ve bu tablodan KatID ve KatAdi alanlarının değerlerini getirmektir.


Sonuçta bu sayfa çalıştırıldığı zaman aşağıdaki çıktıyı verecektir.



Kategoriler=1,ROMAN,2,HİKAYE,3,MASAL,4,BİLİŞİM,5,MÜZİK



Flash tarafında bu değer okunurken değişkenadı=değeri
ilişkisi kurulacaktır. Yani Flash bu sayfayı çağırdıktan sonra
Kategoriler isimli bir değişken kendisine gönderilmiş gibi
davranacaktır. Kategorileri Flash tarafında elde ettiğimiz zaman
ComboBox içerisine yüklemeye çalışacağız. Ancak kullanıcın gördüğü
değerler “ROMAN,HİKAYE…” gibi etiketler olurken kategori seçimi
yaptığında biz bu değerlere karşılık gelen ID bilgisini kitaplar
tablosuna yazacağız. O yüzden ben hem kategori adını hem de o
kategoriye karşılık gelen ID bilgisini Flash’a gönderiyorum.
Gönderirken araya “,” koyma amacımda Flash tarafında bu verileri kolay
bir şekilde parçalamak. Çünkü ASP.Net tarafından Flash tarafına dizi
gönderemezsiniz.


Şimdi de sıra geldi bu verileri işleyecek olan Flash çalışmamızı hazırlamaya.


Çalışmamızı açarak 1 nolu karemize aşağıdaki kodları yazalım.


 


 


index.fla


 









function trimStr(str):String


{


            return str.substring(0,str.indexOf(String.fromCharCode(13)));


}


//Yukarıdaki fonksiyon Asp.Net tarafından gelen verileri kırpmak için yazılmıştır.


//Eğer Asp:net tarafından gelen veriyi kırpmazsanız asp.net sayfasının tüm kaynak kodu


//geleceği için hata etmiş olursunuz. Yukarıdaki fonksiyon kendisine gelen stringin


//sonunda yer alan ilk enter karakterinden itibaren temizler.


 


var urlrequest:URLRequest=new URLRequest("http://localhost:49906/AspNET-Flash/kategorigetir.aspx");


//Yukarıdaki sayfa çağrımını siz kendi sayfanızın adresine göre değiştiriniz.


//Ben Asp.net developmentserver kullandığım için kendi sayfamın adresini yazdım.


var loader:URLLoader=new URLLoader(urlrequest);


var vars:URLVariables=new URLVariables();


urlrequest.data=vars;


loader.dataFormat=URLLoaderDataFormat.VARIABLES;


loader.addEventListener(Event.COMPLETE,verileryuklendi);


loader.load(urlrequest);


function verileryuklendi(e:Event):void


{


            var vars:URLVariables=new URLVariables(loader.data);


            var kategoriler:String=trimStr(vars.Kategoriler);


            //Asp.Net tarafından veri gönderirken değişkenadı=değeri şeklinde göndermeliyiz.


            //Birden fazla değer göndereceksek araya & işareti koymalıyız.


            //Fakat Asp.Net buraya sizin değerlerinizi gönderdiği gibi fazladan sayfanın kaynak


            //kodunu da göndermektedir. Biz bu fazlalığı kırpmak için gelen veriyi trimStr         

             //fonksiyonumuza


            //gönderiyoruz.


            var kategoridizi:Array=kategoriler.split(",");


            //Gönderdiğimiz veriyi diziye çeviriyor ve ComboBox içerisine dolduruyoruz.


            for(var i=0;i<kategoridizi.length;i+=2)


            {


                        kategori_cmb.addItem({label:kategoridizi[i+1],data:kategoridizi[i]});


            }


}



 


Öncelikle
bir URLRequest nesnesi oluşturduk ve bu nesneyi kullanarak sayfamızı
yüklemeye çalıştık. Burada ben sayfamın adresi olarak


http://localhost/AspNET-Flash/kategorigetir.aspx adresini
verdim. Çünkü IIS kullanmadan Expression Web ile beraber gelen ASP.Net Development Server kullanıyorum.
Eğer sayfamı sadece adı ile çağırırsam (adresi kategorigetir.aspx
şeklinde belirtirsem) bir metin dosyası gibi davranacak ve Server’da
yorumlanmadan gelecektir.


Uygulamamızı çalıştırdığımızda aşağıdaki ekran görüntüsünü göreceğiz.


 

 


Görüldüğü
üzere kategoriler başarılı bir şekilde yüklendi. Şimdi yapmamız gereken
diğer bilgilerle birlikte seçili kategorinin ID’sini Kitaplar tablosuna
yazmak.


 


index.fla dosyası
içerisinde biraz önce kaldığımız yerden bu seferde aşağıdaki kodları
yazıyoruz. Zaten kodlara açıklama yazdığım için detaylı açıklama yapma
ihitiyacı hissetmiyorum.


Bu kodları daha önce kategorileri yüklemek için yazdığınız kodların altına yazmayı unutmayınız. Önceki kodları silmeyin.



index.fla devamı











kaydet_btn.addEventListener(MouseEvent.CLICK,kaydet);


//kaydet butonuna basılınca kaydet isimli metod çağrılacaktır.


function kaydet(e:MouseEvent):void


{


            var urlrequest_kayit:URLRequest;


            urlrequest_kayit=new URLRequest("http://localhost:49906/AspNET-Flash/kitapkaydet.aspx");


            //Siz yukarıdaki adresi kendi server'ınız için değiştirin. Sizin Asp.net


            //Development Server'ınız muhtemelen aynı portu kullanmıyordur.


            var loader_kayit:URLLoader=new URLLoader(urlrequest_kayit);


            urlrequest_kayit.method=URLRequestMethod.POST;


            //veri gönderimi için POST metodu seçiliyor.


            var vars_kayit:URLVariables=new URLVariables();


            //Gönderilecek değişkenleri yüklemek için URLVariables türünden bir nesne


            //oluşturuluyor.


            vars_kayit.Baslik=baslik_txt.text;


            vars_kayit.SayfaSayisi=sayfa_txt.text;


            vars_kayit.Adet=adet_txt.text;


            vars_kayit.Kategori=kategori_cmb.value;


            //Textboxlardaki ve ComboBox'ımızdaki verileri variables'a ekliyoruz.


            urlrequest_kayit.data=vars_kayit;


            //urlrequest nesnemiz için variables'larımızı yüklüyoruz. istenilen


            //sayfaya (yani kitapkaydet.aspx) bu verilerin gönderileceğini


            //belirtmiş oluyoruz.


            loader_kayit.addEventListener(Event.COMPLETE,kayityapiliyor);


            //Değişkenler kitapkaydet.aspx sayfasına gönderilip


            //oradan cevap alındığında "kayityapiliyor" fonksiyonu çağrılsın


            loader_kayit.load(urlrequest_kayit);


}


function kayityapiliyor(e:Event):void


{


            var vars_gelen:URLVariables=new URLVariables(e.target.data); 


            //kitapkaydet.aspx'den gelen veriler e isimli EventArgs nesnesi ile gelir.


            var sonuc=trimStr(vars_gelen.Sonuc);


            //Gelen veri tüm sayfanın kaynak kodunu da içerdiği için


            //fazlalığı kırpmak istiyorum.trimStr fonksiyonum bu işi yapıyor. Benim için


            //gelen Sonuc değişkeni dışındaki tüm veriyi atıyor.


            kaydet_btn.label=sonuc;


            //kitapkaydet.aspx sayfasından gelen Sonuc isimli değere göre


            //butonun üzerindeki metni değiştiriyorum.


}


 





Nihayet sıra geldi bu kitaba ait verileri index.swf dosyamızdan alarak Veritabanındaki Kitaplar isimli tabloya kaydedecek olan kitapkaydet.aspx isimli sayfamızı geliştirmeye.


Biz verileri index.swf içerisinden gönderirken metod olarak POST seçtiğimiz için bu verileri ASP.NET sayfamızda elde etmek için Request.Params[“değişken_adı”]
şeklinde bir yöntem kullanmalıyız. Ben öncelikle verilerin başarılı bir
şekilde gönderildiğini teyit etmeye çalıştım. Çünkü uyanık kullanıcılar
bu sayfayı adres satırına adresi yazmak suretiyle çağırma girişiminde
bulunabilir. Ben bu sayfaya POST yoluyla istediğim verilerin
gönderilmiş olduğunu garanti ettim. Kayıt işleminin durumuna göre
(başarılı veya başarısız olabilir) tekrar index.swf dosyasına
Response.Write(“Sonuc=….”) ifadesi ile bir değişken gönderiyorum.


 


kitapkaydet.aspx











protected void Page_Load(object sender, EventArgs e)


{


        if (Request.Params["Baslik"] != null)


        {           


            string constr = "Data Source=.;initial catalog=Kitabevi;Integrated Security=sspi";


            SqlConnection con = new SqlConnection(constr);


            con.Open();


            SqlCommand cmd = new SqlCommand("insert into Kitaplar (KitapBaslik,KitapKategori,SayfaSayisi,StokAdedi) values ('" + Request.Params["Baslik"].ToUpper() + "'," + Request.Params["Kategori"] + "," + Request.Params["SayfaSayisi"] + "," + Request.Params["Adet"] + ")", con);


            if (cmd.ExecuteNonQuery() != 0)


            {


                Response.Write("Sonuc=İşlem Başarılı");


            }


            else


            {


                Response.Write("Sonuc=İşlem Başarısız");


            }


            //Response.Write ile Sonuc isimli bir değişkenle sonucu gönderyoruz.


        }


}


 



 


Tebrikler.
Böylece Flash dosyasından ASP.NET sayfasına veya ASP.NET sayfasından
Flash’a nasıl veri gönderebileceğimizi görmüş olduk. Flash programı
animasyon konusunda çok başarılı bir program olsa da henüz veritabanı
üzerinde doğrudan çalışma kabiliyeti bulunmamaktadır. Veri kaynağı
olarak metin dosyaları ya da XML dosyaları kullanılabilmektedir. Flash
programını başarılı bir şekilde kullanabilen arkadaşlar (daha üst
seviye işlemler için örneğimizde olduğu gibi) Flash’ın eksikliğini
araya bir ASP.NET sayfası atmak suretiyle kapatabilirler.


Yukarıda
bahsettiğim yöntemlerin tümü için illa ASP.NET kullanmanız gerekmez.
Asp, Php, Pyton vs. aklınıza gelebilecek tüm Server taraflı script
dilleri için bu yöntem kullanılabilir. Biz ASP.NET ile veri gönderirken
Response.Write(“degisken_adi=degeri”) demiştik. Sözgelimi php için
echo(“degisken_adi=degeri”) şeklinde kullanmanız yeterlidir. Flash
tarafındaki kodlarda da bir değişiklik yapmanız da gerekmemektedir.



Faydalı olması dileğiyle....




Ercan Altuğ YILMAZ