Asp.net projelerinde jQuery ipuçları

jQuery UI yi son zamanlarda çok fazla kullanmaya başladım. Projelerde görünüm olarak ve fonksiyonellik olarak çok güzel bir bütünlük oluyor. Kullanımı da oldukça basit. Geçenlerde başıma enteresan bir durum geldi. Ui dialog içerisinde bir butonla işlem yaptırmak istedim fakat olmadı. Butona tıkladığınızda sayfa PostBack olmuyordu, haliyle yapmak istediğim şeyi yapamıyordum. Bu durumu şu şekilde aştım.

Okumaya devam et Asp.net projelerinde jQuery ipuçları

GridView ile çalışmak ve püf noktaları

Uzun bir aradan sonra kontrollerimizi tanımaya kaldığımız yerden devam ediyoruz. Ana hatlarıyla anlatmaya çalışacağım kontrol namı diğer GridView1 :) Çok fazla detaya girmeden en sık kullanılan özelliklerini ve jQuery ile birlikte neler yapabileceğimize vakit kaybetmeden bir göz atalım.

GridView, bir veri kaynağından gelen veriyi ekrana liste şeklinde basan kontrolümüz. Bir çok yerde kullandığımız bu kontrolde, sayfalama ve sıralama işlemlerini rahatlıkla yapabiliyoruz. Okumaya devam et GridView ile çalışmak ve püf noktaları

Sanal pos kurulumu ve ipuçları

Merhaba arkadaşlar bildiğim kadarıyla sanal pos konusuna değinmeye çalışacağım. Eğer daha önce hiç ilgilenilmemişse çoğu insanı korkutan bir konu, sanal poslar. Hâlbu ki hiçte göründükleri gibi ürkütücü şeyler değiller. Bilmeyenler için sanal pos nedir onu söyleyeyim. Bankalar internet ortamında bildiğimiz fiziksel pos cihazlarının işlevini manüel olarak gören bir hizmet sunuyorlar, manüel diyorum çünkü kartı fiziksel posa soktuğumuzda ilgili bilgiler bankamıza gönderiliyor, sanal posta biz elimizle giriyoruz. Bu hizmete sanal pos diyoruz. Yapı esasında bir cümlede anlatılacak kadar basit değil ama en genel haliyle bu şekilde düşünebilirsiniz.

 

banka sanal posEskiden çoğu banka bu hizmeti vermiyordu ama günümüzde internetten alış veriş (e-ticaret) aldı başını gidiyor, bildiğim kadarıyla bu hizmeti vermeyen banka bulunmuyor. Bankaya işletmenin bizzat başvurması gerekiyor. Bankaların prosedürleri için web sitelerini ziyaret edebilirsiniz. Başvurunuz onaylandıktan sonra banka size pos ile ilgili dökümanları yolluyor. Dökümanlar içerisinde php, asp, html, asp.net, java vb.. dilleriyle yapılmış örnekler ve posların tüm detayları bulunuyor. Örnekler içerisinde sadece bankanın size özel vermiş olduğu işyeri numarası, şifre gibi bilgileri değiştirerek test bilgileriyle kullanıma başlayabiliyorsunuz, yani neredeyse hiç bir şey yapmıyorsunuz. Bankalar ayrıca kendi sistemlerinden sanal pos trafiğini takip etmeniz için birde yönetici paneli veriyor. Buradan çekimleri iptalde edebiliyorsunuz.

Gelelim bankayla ilgili bilgi alış-verişine

Bankaya gönderilmesi gerekli kodlar;

  1. Bankada tanımlı bilgiler. (üye iş numarası, şifre, posid gibi..) *
  2. Kredi kartı üzerindeki ad, soyad *
  3. Kredi kartı numarası *
  4. Son kullanma tarihi *
  5. Güvenlik numarası (cvc) *
  6. İşlem türü *
  7. Çekilecek tutar *
  8. Para birimi *
  9. Taksit bilgisi *
  10. Siparişin numarası
  11. Kullanıcı bilgileri (adres, telefon, eposta vb..)

Bankadan alınması gereken bilgiler;

  1. Bankayla kurulan bağlantının başarısı *
  2. Bankanın geri döndürdüğü cevap *
  3. Bankanın geri döndürdüğü hata ve/veya hatanın kodu (bu bilgiler banka dökümanı içerisinde detaylı bir şekilde veriliyor.) *
  4. İşlemin onaylanmasında geri dönen, referans numarası ve diğer benzeri bilgiler.

Yanında (*) işareti bulunan maddeler neredeyse her banka için geçerlidir. Diğerleri ise bizim insiyatifimizdedir fakat size önerim bankaya bilgi gönderirken de alırken de alabildiğiniz kadar bilgiyi alıp saklamanız yönündedir. Bunun sebebi ileride oluşacak problemli durumlarda elinizde bir bilginin olması. Son kullanma tarihi, para birimi, çekilecek tutar gibi bilgilerin formatları bankadan bankaya değşkenlik gösterebilir. Bunun için yine bankanın gönderdiği dökümanlardan yardım alabilirsiniz.

Önemli not: Yazıp yazmamakta kararsız kaldım fakat yazmayı bir görev olarak hissetim. Kesinlikle ve kesinlik kullanıcının kart bilgilerini kendi veritabanınızda saklamayın ! Sadece kredi kartı sahibinin adını ve kart numarasının sadece ve sadece ilk ve son 2 hanesini saklayın. Buda size kullanıcı eski siparişlerini incelerken şu kartınızdan çekim yapılmış bilgisini verebilmek için. Şöyle bir soru gelebilir aklınıza bazı büyük firmalar bilgileri saklıyor, hatta aksine kredi kartı bilgimi kendim tanımlıyorum ! Doğru fakat bu işlem için ciddi anlamda güvenlik önleminin alınması ve sistemin işin uzmanları tarafından kurulmuş olması gerekir. Aklıma gelmişken çok uzun zaman önce bu konuyla ilgili bir yazı yazmıştım. Kendi fikrimi soracak olursanız ne olursa olsun saklanmasa iyi olur :)

Eğer sanal posunuzdan sürekli hatalı çekim yada benzeri bir durum olursa banka posunuzu bloklayabilir ve sizin bilginiz olmadan tekrar aktif edilemez. Bu tip durumları engellemek için elimizden geldiğince posumuza giden bilgileri filtrelemeliyiz. Bu filtrelemenin başında atmasyon girişleri engellemek için bankaların bin listesini kullanmak geliyor. (Yazının sonunda elimde olan bin listelerini vereceğim) Bin kodu ne işe yarar hemen onu söyleyeyim, banka kartlarının ilk 6 hanesi kartın hangi bankaya ve hangi özelliği taşıdığını ifade ediyor. Bu kodların listesinin tamamına sanıyorumki bin listesi deniliyor, sanıyorum diyorum çünkü %100 emin değilim. Emin olduğum nokta ise bu listelerin süper işe yaradığı. Kullanıcı kafadan bir kart numarası atıp posumuzu meşgul etmeye çalıştığında ilgili numaranın ilk 6 hanesini kontrol edip, hooop kardeşim ne yapıyorsun seçtiğin bankanın böyle bir kartı bulunmuyor deyip, önden kestirip atabilirsiniz. Bunu ajax ile birlikte kullanıp, kullanıcı kart numarasını girdiğinde kontrolde edebilir formu hiç post ettirmezsiniz. Bir başka önlem ise formu gönderen butona bir fonksiyon koyup ard arda gönderimleri engellemek. Bu durumda bilgiler doğru olsa bile 1 den fazla çekim yapılabilir. Malum Türk’ üz beklemekten hoşlanmayız ve beklemez tıklarız :)

Girdiğimiz bilgilerin yanlış olması durumunda kullanıcıyı bilgilendirmemiz gerekiyor. Örneğin; Son kullanma tarihi geçersiz, kartınız limit vermiyor gibi.. Bankalar geriye direk hata açıklamalarını gönderdiği gibi hataların kodlarınıda gönderiyor. Burada hata kodlarını kullanmak en işlevseli. Nedeni ise gelen hatanın zaman zaman İngilizce olması, çoğu hatada teknik ifadeler kullanılması bazen de boş gelmesi vb.. Dipnot olarak şunu da belirteyim, bu tarz sonuç vermeyen işlemleri dahi bankanın bize verdiği panelden kontrol edebiliyoruz. Hata kodlarını veritabanında bir tabloya kaydedip kullanıcıya oradan bu açıklamaları sunmak en işlevseli. Bunu bir kez yapıp tüm projelerinizde kullanabilirsiniz.

Elimde olan bankaların pos kodlarını buraya ekleyecektim fakat an itibariyle vazgeçtim, sonuçta bankanın verdikleriyle bire bir aynı. Bu kodlar yerine bankanın işlemi onaylaması prosedürüne bakalım. Yukarıda “Bankadan alınması gereken bilgiler” kısmında “bankayla kurulan bağlantının başarısı” adında bir madde bulunuyor. Bu şu demek; ilgili bilgileri bankaya göndermek için bankanın size vermiş olduğu ilgili adresle iletişim kurmanız gerekiyor ve bankanın sizi kabul etmesi gerekiyor. Banka bu işlem sırasında ek bir güvenlik önlemi olarak sunucunuzun ip adresinide alıp, bankaya başvururken verdiğiniz ip ile aynı olup olmadığını kontrol ediyor. Eğer değilse haliyle bağlantı kurulamıyor. Bir başka hata sebebi de o anlık banka sunucusunda yada internet bağlantısında meydana gelen aksaklık olabilir. Velhasıl kelam 1. aşama bankayla iletişim kurmak, eğer kurulmuşsa ve banka geriye işlemin tamam olduğunu belirten parametreyi döndürmüşse, para çekilmiş demektir. Bize bundan sonra düşen görev diğer prosedürleri uygulamaktır. Örneğin; veritabanına ilgili bilgileri yazmak, kullanıcıya çekildi ibaresini sunmak gibi..

Sanal poslarla çok uğraşan biriyseniz, bu iş için kendi web servisinizi yazabilirsiniz. Düşünün her seferinde uğraşmak yerine sadece 1 merkezden tüm müşteri poslarını yönetebilirsiniz. Müşterinin sayfasına sadece kart bilgilerinin ve bankanın seçilebileceği bir form koyarsınız ve kendi servisiniz üzerinden bankayla iletişim kurup geriye sonuçları döndürebilirsiniz. Kulağa çok hoş geliyor dimi :) Yakın zamanda böyle bir işe girişebilirim o zamanda konuyla ilgili tecrübelerimi sizlerle paylaşırım. Umarım faydalı bir yazı olmuştur. Herkese çalışmalarında kolaylıklar dilerim..

Arşivimdeki banka bin listelerini indirmek için tıklayın !

T-SQL ile newID, Soundex, Case ve Substring kullanımı

Bazı işlemler vardır kod yazmaya kalkınca dünya kadar satır yazmanız gerekir, halbuki zaman zaman Sql in nimetlerinden yararlanmak olayları bir çırpıda performanslı bir şekilde çözmek anlamına geliyor. Bu nimetleri birer örnekle açıklamaya çalışayım. NewID() herzaman heryerdeki fiks sorulardan biridir, veritabanından rastgele nasıl veri çekerim veya veri kümesinin içinden rastgele x kadar kaydı nasıl çekerim gibi.. satır satır kod yazmak yerine newId fonksiyonunu kullanabilirsiniz.

Örnek;

	Select * From TabloAdi order By NewID() -- tablodaki tüm kayıtları rastgele getirir.
	Select Top 5 * From TabloAdi order By NewID() -- tablodaki tüm kayıtlar içerisinden 5 tanesini rastgele listeler.

Soundex() Esasında çok kabarık bir konu, en özet haliyle yanlış yazımların önüne geçmek için oluşturulmuş bir algoritma. Buradan detaylarına bakabilirsiniz. Google’ nin Bunu mu demek istediniz?mekanızması bunun en iyi örneklerinden biridir. Google’ nin ki kadar gelişmiş olmasada, hiç yoktan sitenizde kullanabileceğiniz bu sistemi Soundex ile birlikte yapabilirsiniz. Mesela Abdullah kelimesini aratırken yanlışlıkla  Abdullak yada Abdullaah yazdığımızda klasik arama yöntemi olan Like ile kayıt boş dönecektir, halbuki soundex kullandığımızda Abdullah kelimesini bulmamız mümkün.

SELECT * FROM TabloAdi WHERE SOUNDEX('kelime') = SOUNDEX(AlanAdi)

Case Sql cümlemizin içinde if kullanımının neredeyse birebir aynını bu şekilde kullanabiliriz. Amacımız elimeze geçen kaydın tam istediğimiz şekilde olması, sql cümlemizden gelen veriyi direk grid veya benzeri bir nesnede listelememizde çok daha verimli olacaktır.

-- sadece if else şeklinde kullanım
SELECT
	Case
		When Adsoyad='Abdullah UĞRAŞKAN' Then 'Tamamdır :)'
	else 'Kimsin sen ?'
	end as 'Sonuc'
FROM
	kullanicilar

-- if elseif else şeklinde kullanım
SELECT
	Case
		When Adsoyad='Abdullah UĞRAŞKAN' Then 'Tamamdır :)'
	    When AdSoyad='Deneme' Then 'Sende Tamam ol :)'
	else 'Kimsin sen ?'
	end as 'Sonuc'
FROM
	kullanicilar

-- eğer koşul gerçekleşirse sonucu diğer tablodan almaya ilişkin bir örnek. Yani eğer adısoyadı abdullah ise görevinin ne olduğunu döndürüyoruz.
SELECT
	Case
		When Adsoyad='Abdullah UĞRAŞKAN' Then (Select gorev from gorevler where id=kullanicilar.gorevid)
	else 'Görevsiz.'
	end as 'Sonuc'
FROM
	kullanicilar

-- örnekler biraz bencil olabilir ama aklıma başka bişiy gelmedi :)

SubString Kaydın başlangıç ve bitişini belirleyebildiğimiz klasik substring fonksiyonun aynısı. Kaydın istediğimiz kısmını görüntülememize olanak sağlan fonksiyonumuz.

select Substring(AlanAdi,1,10) from TabloAdi -- 1=başlangıç, 2=bitiş karakteri.