|
Core Entity mi Dynamic Entity mi? ( 1.Bölüm Veri Sorgulama)

Yazar:
Baris KANLICA
Kategori:
Microsoft Dynamics CRM
Eklenme Tarihi:
15.06.2008 11:51:23
Core Entity yani standart nesne yönetimini yerine Dynamic Entity modeli ile nesneleri çalışma zamanında oluşturabilir ve yönetebiliriz. Dynamic Entity yöntemiyle veri sorgulayabilir ve veri yazabiliriz. Sırasıyla bu ikisini göreceğiz.
Microsoft Dynamics CRM üzerinde program geliştiriren herkes veri yazarken ve veri okurken web servisinden faydalanmamız gerektiğini bilir. (Veri okurken ek olarak fetchxml ve filteredview da kullanılabilir) Peki bu işlemler sırasında web servisindeki nesnelere nasıl erişirsirsiniz?
Peki CRM üzerinde çalışacak bir uygulama geliştirdiniz ve bu uygulama web servislerini kullanarak CRM üzerine veri yazan bir uygulama olsun. Amacınız bu uygulamayı CRM kullanan firmalara satarak çok para kazanmak. Ama her müşterideki özelleştirme (customization) birbirinden farklı olacağından web servisleri de birbirinden farklı olacak. Çünkü standart yöntemde web servisindeki bir sınıf türetilerek, türetilen sınıftaki nesnelere erişilir. Her firmada nesneler de birbirinden farklı olabilir. Sonucunda uygulamanızı her müşteri için derleyecek misiniz?
Bu çok saçma ve çok yorucu olurdu. Bu durumda bize kod zamanında değil çalışma zamanında nesneleri yönetmemizi sağlayacak bir yapıya ihtiyacımız var. Yani çalışma zamanında nesneler yaratıp bunlara değer atamalıyız.
İşte CRM içerisinde bu düşünülmüş, Core Entity yani standart nesne yönetimini yerine Dynamic Entity modeli ile nesneleri çalışma zamanında oluşturabilir ve yönetebiliriz. Dynamic Entity yöntemiyle veri sorgulayabilir ve veri yazabiliriz. Sırasıyla bu ikisini göreceğiz.
Konuyu örnek uygulamamızda irdeleyelim. Örnek uygulamamız için şöyle bir senaryo düşünelim. Bir web sitemiz olacak ve bu web sitemize insanlar ad,soyad,e-mail,ilçe ve il bilgilerini yazarak kayıt olacaklar. Fakat biz forma girilen e-mail'i kullanarak veritabanımızda bu kişinin kayıtlı olup olmadığını kontrol edeceğiz eğer yoksa müşteri adayı (lead) olarak bu kişiyi CRM'e kaydedeceğiz.

Kaydet düğmesinin arkasında aşağıdaki kod yer almakta. Mail adresinin yazılıp yazılmadığına bakıyoruz. Eğer yazıldı ise dynamicRetrieve metodu ile bu mailinde birilerinin sistemde olup olmadığına bakıyoruz.
/// <summary> ///Kaydet Dugmesi Click Olayi /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected voidbtnSave_Click(objectsender, EventArgse) { if(txtMail.Text != "") { if(!dynamicRetrieve(txtMail.Text)) { if(coreCreate()) lblMessage.Text = "başarıyla oluşturuldu"; if(dynamicCreate()) lblMessage.Text = "başarıyla oluşturuldu"; } } }
Dynamic Entity yönetemiyle veri sorgulamayı göreceğiz ilk önce. (Core entity ve diğer veri sorgulama yöntemleri ile ilgili olarak 3 makalelik bir yazı dizisi yayınlamıştım hatırlarsanız o yüzden bu makalede bu konulara girmeyeceğim. Eski yazı dizisine arşivden ulaşabilirsiniz)
İlk önce kodu inceleyelim.
1. query nesnemizi oluşturuyoruz QueryByAttribute query = new QueryByAttribute();
2. hangi entity üzerinde sorgulama yapacağımızı söylüyoruz. query.EntityName = EntityName.lead.ToString();
3. sorgulama sonucunda hangi alanları geri istiyoruz bunu söylüyoruz ColumnSet cs = new ColumnSet(); cs.Attributes = new string[] { "firstname","lastname","address1_city" }; query.ColumnSet = cs;
4. koşulumuzu veriyoruz. query.Attributes = new string[] { "emailaddress1" }; query.Values = new object[] { mail };
Aslında buraya kadar ( " select firstname","lastname","address1_city from filteredlead where emailaddress1 = '"+ mail +"' ") dedik. Ama servis kullanarak bunu demek daha zahmetli.
5. servisimizi çağırıyoruz. Burada service(); benim oluşturduğum bir metod. CRM 3.0 ve CRM 4.0 arasında servise bağlanmakta farklılıklar var. Bunu daha önceki bir makalemde anlattığım için burada anlatmıyorum. (yazıya ulaşmak için buraya tıklayabilirsiniz) CrmService MyService = service();
6. işte can alıcı nokta burası geriye core entity değil dynamic entity istediğimizi söylüyoruz. retrieved.ReturnDynamicEntities = true;
7. gelen sınıfı DynamicEntity türüne çeviriyoruz. DynamicEntity entity = (DynamicEntity)responsed.BusinessEntityCollection.BusinessEntities[0];
8. işte ikinci can alıcı nokta burası. gelen DynamicEntity içinden property leri birer birer çıkartıyoruz. Gelen property inin Value attribute 'u içerisinde değer bulunmakta bunu set ediyoruz. StringProperty property = (StringProperty)entity.Properties[i]; firstname = property.Value;
Kodun tamamı aşağıdadır.
/// <summary> ///dynamicRetrieve metdodu Dynamic Entity kavramiyla veri cekmeyi bize gosterecek /// </summary> private bool dynamicRetrieve(string mail) { try { //query nesnemizi oluşturuyoruz QueryByAttributequery = new QueryByAttribute();
//hangi entity üzerinde sorgulama yapacağımızı söylüyoruz. query.EntityName = EntityName.lead.ToString();
//sorgulama sonucunda hangi alanları geri istiyoruz bunu söylüyoruz ColumnSetcs = new ColumnSet(); cs.Attributes = new string[] { "firstname","lastname","address1_city"}; query.ColumnSet = cs;
//koşulumuzu veriyoruz. query.Attributes = new string[] { "emailaddress1"}; query.Values = new object[] { mail };
//aslında buraya kadar ( " select firstname","lastname","address1_cityfrom filteredlead where emailaddress1 = '"+ mail +"' ") dedik.
//servisimizi çağırıyoruz. CrmServiceMyService = service(); RetrieveMultipleRequestretrieved = new RetrieveMultipleRequest();
//işte can alıcı nokta burası geriye core entity değil dynamic entity istediğimizi söylüyoruz. retrieved.ReturnDynamicEntities = true; retrieved.Query = query; RetrieveMultipleResponseresponsed = (RetrieveMultipleResponse)MyService.Execute(retrieved); if(responsed != null&& responsed.BusinessEntityCollection.BusinessEntities.Length > 0) {
//gelen sınıfı DynamicEntity türüne çeviriyoruz. DynamicEntityentity = (DynamicEntity)responsed.BusinessEntityCollection.BusinessEntities[0]; stringfirstname = ""; stringlastname = ""; stringcity = ""; for(inti = 0; i < entity.Properties.Length; i++) { if(entity.Properties[i].Name.ToLower() == "firstname") { //işte ikinci can alıcı nokta burası. gelen DynamicEntity içinden property leri birer birer çıkartıyoruz. //gelen property inin Value attribute 'u içerisinde değer bulunmakta bunu set ediyoruz. StringPropertyproperty = (StringProperty)entity.Properties[i]; firstname = property.Value; } if(entity.Properties[i].Name.ToLower() == "lastname") { StringPropertyproperty = (StringProperty)entity.Properties[i]; lastname = property.Value; } if(entity.Properties[i].Name.ToLower() == "address1_city") { StringPropertyproperty = (StringProperty)entity.Properties[i]; city = property.Value; } } stringresult = "<table border=1><tr>"; result += "<td>Ad</td>"; result += "<td>Soyad</td>"; result += "<td>Şehir</td>"; result += "</tr>"; result += "<tr>"; result += "<td>"+ firstname + "</td>"; result += "<td>"+ lastname + "</td>"; result += "<td>"+ city + "</td>"; result += "</tr></table>"; lblMessage.Text = "eşleşen kayıtlar bulundu"; lblMessage.Text += result; return true; } return false; } catch(Exceptionex) { HandleException(ex); return false; } }
Not: HandleException(ex) benim oluşturduğum bir metod. Hakkında daha fazla bilgiyi almak için tıklayınız. Daha önceden sitemize kayıt olmuş test1 kişisinin sitemize tekrar kayıt olmaya çalıştığını düşünelim uygulama eşleşen bir kayıt bulacağından görüntü şöyle olacak.

Bu makaleye de burada noktayı koyalım. Unutmayın sırada veri yazma ile ilgili bir makale var.
Barış KANLICA Yazılım Uzmanı ? Software Specialist brsk@e-kolay.net www.cub-e.net
Baris KANLICA
1982 yilinda Istanbul'da dogdu. 7-8 yaşında Commodore 64 ile programlar yazmaya başlayarak yazılım dünyasına adım attı. Trakya Üniversitesini bitirdikten sonra, bir telefon santrali firmasında çalışmaya başladı. Ip ve sayisal telefon santralleri ile ilgili yazılımlar geliştirdi. Şimdi ise Omerd Business Solutions'da Yazılım Departman Müdürü olarak calışmakta ve Microsoft Dynamics CRM projeleri geliştirmektedir.
Firmalara CRM konusunda Danışmanlık yapmanın ve uygulama geliştirmenin yanısıra C# ile CRM projeleri kapsamında ASP.Net, Windows Forms, Web ve Windows Servisleri konusunda yazılım eğitimleri vermektedir. Bu yıl CRM alanında yaptığı çalışmalardan ötürü Microsoft tarafından MVP (Most Valuable Professional) ünvanı verilmiştir.
|