|
Ajax ile Ado.Net Data Services Kardeşliği - Bölüm 1 |
|
Gönderiliyor lütfen bekleyin... |
|
|
Bugün sizlerle Ado.Net Data Services
kullanarak veriye
asenkron olarak nasıl ulaşabileceğimize değinmeye çalışacağız. Başlamadan önce
bu teknolojinin ne olduğuna, hangi noktada işimize yarayabileceğine kısaca
değinelim.
Ado.Net Data Services ile Microsoft
bizlere; veri şemalarını(data schema) nesnelere dönüştürüp bunları servisler üzerinden kullanmamızı sağlayan bir yapı sağladı. Biz bu verilerle sunucuya istekte bulunarak
Atom veya Json(JavaScript Object Notation) formatlarında alabiliyoruz. Üstelik bu servisten istediğimiz verileri, belirttiğimiz sorgu cümlelerine göre de getirebilmekteyiz. Peki
tüm bunlar bize neler kazandırıyor? Kazandırdıkları yanında bizden alacağı şeyler nelerdir?
İster istemez kimilerinizin aklında bu sorular belirmeye başlamıştır bile. O zaman öncelikle Ado.Net Data Services'in bize neler kazandırdığından bahsedelim.
Bu arada yazının ilerleyen kısımlarında bu uzun yazımdan kurtularak Ado.Net Data Services'i kısaca ADS şeklinde
adlandıracağım.
Az önce de
belirttiğimiz gibi verileri Atom ve Json olarak alabiliyoruz. Özellikle Json formatında gelen bu verileri jQuery ile rahatlıkla alabilir ve istemci tarafında işleyebiliriz. Birde
Atom formatında gelen çıktı, Json formatında gelen çıktıdan daha büyük boyutta. Böyle bir durumda veriyi sunucudan
Json formatında istemek daha akıllıca bir seçenek olabilir. Diğer güzel bir tarafı ise
ADS, REST(Representational State Transfer) modele göre hizmet veren bir
servistir. Bu model ile sorgu cümlelerinini veri servisinin URL’inde belirtip; sonuç kümesini, yapılan sorgunun sonucuna göre alabiliyoruz. İstersek servis referansını kullanarak diğer bir projeden LINQ ile de veriyi isteyebilmekteyiz.
Bu seçimi yapmak yazılımcının inisiyatifine kalmış.
İsterseniz biraz da bize kaybettirdiği taraflardan bahsedelim. Bu konu, bu camiada pek bahis konusu olmasada; kusursuz hiçbir şey olmadığını hepimiz biliyoruz. Bu felsefeyle hareket ettiğimizde
ADS’ninde bizden aldığı birkaç şey var. Örnek vermek gerekirse çok büyük verilerde trafik üzerinde olumsuzluk yaratacağı kesin
bir sonuçtur. Bu yüzden ADS’yi küçük verileri çekmekte kullanabiliriz Bununla
birlikte kullanılan servis bir WCF servisi olduğu için güvenlik önemlerini almak
akıllıca olacaktır.
|
WCF ile güvenliği sağlamak için Burak Selim Şenyurt'un
ilgili makalerine aşağıdaki linklerden erişebilirsiniz.
|
İsterseniz şimdi
ADS ile veriye Asp.Net Ajax kullanarak nasıl erişebileceğimiz ile ilgili bir örnek yapalım ve konuyu iyice pekiştirelim.
Yüzüğün Gücü : ADS ile Ajax Kardeşliği
Öncelikle
Visual Studio 2008’imizi açalım ve yeni bir web uygulaması yaratalım. Ben
yaratacağımız bu projeye "ADSIlkOrnek" ismini vereceğim. Projemize isim verip
oluşturduktan sonra Solution Explorer'dan proje ismine sağ tıklayıp Add New
Item'a basalım. Buradan projemize yeni bir
"Ado.Net Entity Data Model’ı ekleyeceğiz.
|
Ado.Net Entity Data Model; bağlanacak olduğumuz veritabanı üzerindeki
veri nesnelerine ait modelleri oluşturmamızda bize yardımcı olacak olan arabirim. |
Ekleme işlemini gerçekleştirdikten hemen sonra karşımıza bir sihirbaz gelecek.
İlk adımda kullanacağımız Entity Data Model'i oluşturacağımız seçenekler
sunuluyor. Biz hazır bir veritabanından oluşturacağımız için hiçbir değişiklik
yapmadan ileri butonuna basıyoruz. Sonraki adımda
kullanacağımız bir bağlantı eğer varsa bu bağlantıyı seçip devam ediyoruz. Eğer
yoksa yeni bir bağlantı oluşturup, gerekli ayarlamaları yapıp ileri butona
basıyoruz. Bir sonraki adımda
kullanacağımız veri nesnelerini(AdventureWorks içindeki Product ve ProductSubcategory tablolarını)
işaretleyip Model Namespace'imizide değiştirmeden Finish butonuna basıyoruz.
Entity Modelimizi oluşturduktan sonra projemize Ado.Net Data Service
isimli proje öğemizi ekliyoruz.
Sonrasında servis nesnemiz içerisinde aşağıdaki değişiklikleri yapıyoruz.
Burada öncelikle namespace kısmına AdventureWorksModel veri servisi nesnemizi ekliyoruz. Sonrasında sınıfın türetildiği DataService nesnesinin tipine AdventureWorksEntities isimli varlık nesnemizi yazıyoruz. Son olarakta veri servisine erişim ayarlamalarını yapıyoruz. Biz şimdilik
"AllRead" isimli erişim özelliğini seçili durumuna getirelim. Çünkü şu
an için sadece veriyi okuma işlemi yapacağız.Bir sonraki makalede CRUD(Create
Read Update Delete) işlemlerini ele alacağız ve burada
"All" özelliğini seçili duruma getirip okuma işlemlerinin yanı sıra
yazma işlemlerini de gerçekleştireceğiz. ADS'deki veri servisine erişebilmek için özel bir script dosyamız var. Öncelikle bu script dosyamızı indirelim ve proje içine ekleyelim.
( AJAX Client Library for ADO.NET Data Services )
Sonrasında bu JavaScript dosyasını ister Head tagları içerisinde, ister ScriptManager içerisinde referans
olarak ekleyebiliriz. Yalnız bunlardan bir tanesini seçmek zorundasınız. Resimdeki gibi ikisini birden yazıp hataya neden olmayalım :) Ben seçimimi ScriptManager şeklinde kullanmayı tercih ettim. Öyleyse devam edelim;
Şimdi markup kısımını biraz daha detaylandıralım sonrasında Data Service nesnemize bağlanmak için scriptimizi yazmaya başlayalım.
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Scripts>
<asp:ScriptReference Path="~/Scripts/DataService.js" />
</Scripts>
</asp:ScriptManager>
<div>
<input id="queryButton" type="button" value="Get Data" onclick="return queryButton_onclick()" /><br />
<ul id="resultList"></ul>
</div>
</form>
</body>
|
Veriye erişebilmek için javascript’imizi de yazalım;
<head runat="server">
<title></title>
<script language="javascript" type="text/javascript">
function queryButton_onclick() {
var adventureService = new Sys.Data.DataService("AdventureWorksDataService.svc");
adventureService.query("ProductSubcategory", cbSuccess, cbFailure);
}
function cbSuccess(result, context, operation) {
var resultList = document.getElementById(’resultList’);
for (var i in result) {
var thisCate = result[i];
var li = document.createElement(’li’);
li.appendChild(document.createTextNode(thisCate.Name));
resultList.appendChild(li);
}
}
function cbFailure(error, context, operation) {
alert("Error!");
}
</script>
</head>
|
Artık projemizi test etmeye başlayabiliriz. Ama test etmeden önce dilerseniz neler yaptığımıza bir göz atalım. Öncelikle bir html button koyduk. Bu
düğmeye basınca queryButton_onclick fonksiyonu ateşlenecek. Fonksiyon içerisinde ise DataService.js isimli javascript dosyamız sayesinde
veriye erişmek için bize yardımcı olacak olan metodu kullanıyoruz. Servis nesnemizi yarattıktan sonra bu nesne içerisindeki query isimli metot ile sorgumuzu gerçekleştirip veri talebimizi iletiyoruz. İlk parametre ile REST modele göre sorgumuzu yazıyoruz. Biz burada “ProductSubcategory” tablomuzun tamamını istiyoruz. İkinci paremetrede ise buraya işlemlerin başarılı olması halinde çalışacak olan callBack metodunu yazıyoruz. Başarısız olmasında ise 3. Parametre ateşlenecek ve buradaki callBack metodu çalıştırılmış olacak. Sıra F5’e basmaya geldi. Bakalım nasıl bir sonuç
gösterilecek.
Tam istediğimiz sonuçla karşılaştık ve bunu sayfamız postBack olmadan yaptık. Peki ya ilişkili iki tablomuz olsaydı nasıl
olacaktı. O zaman örneğimizi geliştirmeye devam edelim ve javascriptimizi biraz değişikliğe uğratalım.
<head runat="server">
<title></title>
<script language="javascript" type="text/javascript">
function queryButton_onclick() {
var adventureService = new Sys.Data.DataService("AdventureWorksDataService.svc");
adventureService.query("ProductSubcategory?$expand=Product&$top=5", cbSuccess, cbFailure);
}
function cbSuccess(result, context, operation) {
var resultList = document.getElementById(’resultList’);
for (var i in result) {
var thisCate = result[i];
var li = document.createElement(’li’);
li.appendChild(document.createTextNode(thisCate.Name));
var subResultList = document.createElement(’ul’);
for (var k in thisCate.Product) {
var thisProd = thisCate.Product[k];
var subLi = document.createElement(’li’);
subLi.appendChild(document.createTextNode(thisProd.Name + ’ : ’ + thisProd.Color));
subResultList.appendChild(subLi);
}
li.appendChild(subResultList);
resultList.appendChild(li);
}
}
function cbFailure(error, context, operation) {
alert("Error!");
}
</script>
</head>
|
İlk değişikliği sorgu cümlemizde fark edeceksiniz. Buradaki expand
anahtar sözcüğü ile ProductSubcategory nesnemiz içerindeki Product özelliğini genişletilmiş olarak talep ediyoruz. Sonra ikinci bir for ile Product nesnesi içerinde iterasyonu gerçekleştirip, alt bir sıralama yapıyoruz.
Evet bu makalemizde sizlerle Ado.Net Data Service üzerinden veriye Ajax ile ulaşıp, yazdığımız sorgular ile sonucu sunuma taşıdık.
Farklı bir konuda, farklı bir makalede görüşünceye dek esen kalın...
Örnek proje
Mehmet Gökay Okutucu
Email : [email protected]
Blog : http://gokayokutucu.blogspot.com
Makale:
Ajax ile Ado.Net Data Services Kardeşliği - Bölüm 1 .NET 3.0 ve .NET 3.5 Özel Bölümü Mehmet Gökay Okutucu
|
|
|
-
-
Eklenen Son 10
-
Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor
|
|