Ana Sayfa
Forumlar
Hakkımızda
Yükleniyor. Lütfen bekleyin ...
Kategoriler
ASP.NET
C# & VB.Net
Visual Studio ve Araçlar
Sharepoint
.NET Framework
SQL Server
Mobil Teknolojileri
Dynamics
Silverlight
İş Zekası
Windows Embedded Sistemler
Yazılım Mimarisi
Yazgeliştir
Yazar olmak ister misiniz?
Forumlar
Kitap Önerileri
Haberler
Yazarlar
İpuçları
Görüşleriniz
Hakkımızda
İstatistikler
En son kayıt olan üye:
bahattin
Şuanki online üyeler (
0
) :
Dynamics Kategorisi
»
Core Entity mi Dynamic Entity mi? ( 1.Bölüm Veri Sorgulama)
Core Entity mi Dynamic Entity mi? ( 1.Bölüm Veri Sorgulama)
Print Versiyonu
Yazar:
barış kanlıca
Tarih:15.06.2008
Puan:
Henüz Oy Kullanılmamış
Okuma Sayısı:
1599
Makaleyi İşaretle
Makale Özeti
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.
Paylaşım
Makale
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
void
btnSave_Click(
object
sender,
EventArgs
e)
{
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
QueryByAttribute
query =
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
ColumnSet
cs =
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_city
from filteredlead where emailaddress1 = '"+ mail +"' ") dedik.
//
servisimizi çağırıyoruz.
CrmService
MyService = service();
RetrieveMultipleRequest
retrieved =
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;
RetrieveMultipleResponse
responsed = (
RetrieveMultipleResponse
)MyService.Execute(retrieved);
if
(responsed !=
null
&& responsed.BusinessEntityCollection.BusinessEntities.Length > 0)
{
//
gelen sınıfı DynamicEntity türüne çeviriyoruz.
DynamicEntity
entity = (
DynamicEntity
)responsed.BusinessEntityCollection.BusinessEntities[0];
string
firstname =
""
;
s
tring
lastname =
""
;
string
city =
""
;
for
(
int
i = 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.
StringProperty
property = (
StringProperty
)entity.Properties[i];
firstname = property.Value;
}
if
(entity.Properties[i].Name.ToLower() ==
"lastname"
)
{
StringProperty
property = (
StringProperty
)entity.Properties[i];
lastname = property.Value;
}
if
(entity.Properties[i].Name.ToLower() ==
"address1_city"
)
{
StringProperty
property = (
StringProperty
)entity.Properties[i];
city = property.Value;
}
}
string
result =
"<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
(
Exception
ex)
{
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
Makaleyi nasıl buldunuz?
Makaleye puan vermek için üye girişi yapmanız gerekmektedir.
v2.4
Geri Bildirim (Feedback)
Site içerisinde yazılan tüm makalelerin yazım ve yayınlama hakkı aksi belirtilmediği sürece sadece yazarlara aittir.
Yazgelistir.Com Ekibi - 2006 -
Yazgelistir.com