cub-e.net

just coding...

Dynamics CRM 2013 and Microsoft Dynamics CRM Online nedir?

Microsoft Dynamics CRM 2013 ve Microsoft Dynamics CRM Online güçlü ve gelişmiş bir iş platformu deneyimini kullanıcılarına sunmaktadır. Dynamics CRM içerisine entegre edilmiş gelişmiş uygulama altyapısı sayesinde sadece uygulamayı kullanmakla kalmıyor aynı zamanda onun istediğimiz yerlerini işimize uygun halde yeniden programlayarak hem kendi içinde hem de dış uygulamalarla konuşabilen kendi iş çözümümüzü oluşturabiliyoruz. Bu şekilde genişlemeye biz xRM adını vermekteyiz. Yani herşeyin yönetilebildiği bir platform.


Dynamics CRM Microsoft tarafından çeşitli zamanlarda çıkartılan çeşitli service pack ve rollup paketleriyle genişlemekte ve yeni özellikler kazandırılmaktadır.

Dynamics CRM mevcutta üç farklı çeşitte paketlenmektedir;

  • Microsoft Dynamics CRM 2013 on-premises deployment
  • Microsoft Dynamics CRM 2013 Internet-facing deployment (IFD)
  • Microsoft Dynamics CRM Online

Bu üç çeşitte de aşağıdaki şekillerde son kullanıcı arabirimi sunmaktadır;

  • Microsoft Dynamics CRM Web client
  • Microsoft Dynamics CRM for Microsoft Office Outlook
  • Microsoft Dynamics CRM for Microsoft Office Outlook with Offline Access
  • Microsoft Dynamics CRM for phones and tablets

Yani siz Dynamics CRM’i şirketiniz için kullanmaya başladıktan sonra isterseniz Internet Explorer, Chrome, Safari gibi browserlardan sisteme girebilir isterseniz de cep telefonu ya da Outlook üzerinden de kullanabilirsiniz.

Oluşturduğunuz uygulamaları Dynamics CRM ile Web Servisleri aracılığıyla entegre edebilirsiniz. Bu web servisleri arka tarafta Dynamics CRM’in kalbi olan xRM platform katmanı ile iletişim halinde bulunmaktadır.

Bu katmanda güvenlik gibi genel kısımları içermektedir ve bir uygulamanın çalışması için gerekli olan yapı taşlarını içerir fakat kendisi ilgili nesnelerinin bir koleksiyonun başka bir şey değildir. Nesneler arasındaki iletişimi sağlar ve tekliften siparişe, siparişten faturaya gibi fiyatlandırma mantığı gibi daha genişletilebilir bir mantığı uygulamak için kullanılır.

XRM platformu ayrıca, güvenlik yoluyla verilere ve veritabanına erişimi denetler. Ayrıca iş akışı ve özel iş mantığı uygulamaları (plugins) için süreçlerinin tetiklenmesini denetler. Bu katman Microsoft Exchange Server üzerinden gelen ve giden e-posta işleme alır.

Core Entity mi Dynamic Entity mi? ( 2.Bölüm Veri Yazma)

Dynamic Entity'ler ile ilgili birinci makalemiz veri sorgulama idi. İkinci makalede ise veri yazma yöntemlerini göreceğiz. Burada dynamic entity'i anlatmadan önce core entity yöntemiyle veri yazmaya değineceğim. Böylece aradaki farkları görmemiz daha kolay olacaktır.

Konuyu hatırarsak; bir web servisini add web reference diyerek projenize dahil ettiğinizde visual studio arka tarafta bir bir class mimarisi oluşturur ve siz o mimariyi kullanırsınız. Eğer core enitity kullanırsanız, bu class özelleştirme nedeniyle her firmada farklı bir hal alabilir ve kodu yeniden derlemize neden olur. İşte bundan kurtularak çalışma zamanında nesneler yaratıp bunlara değer atamayı göreceğiz.

Hatırlarsanız bir örnek uygulamamız vardı. Senaryo şöyle idi; 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 Microsoft Dynamics 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";
        }
    }
}

Birinci makalede e-mail adresinden kontrol etmeyi gördük. Kontrol sonucunda e-mail adresinin sistemde bulunmadığını ve oluşturmamız gerektiğini düşünelim.


1.Core Entity

Burada önemli 3 adım bulunmakta.
1. web servisteki lead sınıfını çağırıyoruz
        lead myLead = new lead();
2. class içerisindeki proprty'e ilgili değeri atıyoruz
        myLead.firstname = txtName.Text.ToString();
3. içersisini veri ile doldurduğumuz class'ı servise oluşturması için veriyoruz.
        MyService.Create(myLead);

/// <summary>
///
coreCreate metdodu Core Entity kavramiyla lead olusturmayi bize gosterecek
/// </summary>
private bool coreCreate()
{
   
try
   
{
       
// CRM Servis'ini cagiriyoruz
       
CrmService MyService = service();
       
//lead sınıfımız aryoruz ve üretiyoruz.
       
lead myLead = new lead();
       
       
//textbox'ın değer içerip içermediğine bakıyoruz.
       
if (txtName.Text != string.Empty)
           
//eğer değer içeriyor ise class içerisindeki ilgili attribute a değerini veriyoruz.
           
myLead.firstname = txtName.Text.ToString();
       
if (txtSurname.Text != string.Empty)
            myLead.lastname = txtSurname.Text.ToString();
       
if (txtMail.Text != string.Empty)
            myLead.emailaddress1 = txtMail.Text.ToString();
       
if (txtState.Text != string.Empty)
            myLead.address1_stateorprovince = txtState.Text.ToString();
       
if (txtCity.Text != string.Empty)
            myLead.address1_city = txtCity.Text.ToString();
       

        //Son olarak da değer atamalarımız bitince servisin Create metodu ile
        //lead imizi oluşturuyoruz.
       
MyService.Create(myLead);
       
return true;
    }
   
catch (Exception ex)
    {
        HandleException(ex);

        return false;
    }
}

2. Dynamic Entity

Eğer bu oluşturma işlemini dynamic entity özelliğini kullanarak yapmış olsaydık kod bu sefer aşağıdaki gibi olacaktı.
Ama önce ne yaptığımızı anlatalım;

1. CRM Servis'ini cagiriyoruz. Burada service(); benim yazdığım bir metod ve crm servisini oluşturuyor.

       
CrmService MyService = service();
2. DynamicEntity nesnesini yaratyoruz

        DynamicEntity leadEntity = new DynamicEntity();
3. Entity ismini veriyoruz.

       
leadEntity.Name = EntityName.lead.ToString();
4. Eger deger iceriyorsa; Property nesnemizi cagiriyoruz ve adın ve degeri veriyoruz. Boylece calisma aninda bir class'in icerisindeki bir nesneye deger vermis oluyoruz.

           
StringProperty firstname = new StringProperty();
            firstname.Name =
"firstname";
            firstname.Value = txtName.Text;

Tabii burada yeri gelmişken söz etmekte fayda var CRM sadece string türünde bir değişken biçimi ile çalışmıyor. Yukarıdaki örnek "StringProperty" classından bir değişken türeterek string oluşturmaya yarıyor. Diğer değişken türleri (sınıflar) ise aşağıdaki listede yer almakta;


Sınıf Adı Microsoft Dynamics CRM Attribute Türü
CrmBooleanProperty CrmBoolean
CrmDateTimeProperty CrmDateTime
CrmDecimalProperty CrmDecimal
CrmFloatProperty CrmFloat
CrmMoneyProperty CrmMoney
CrmNumberProperty CrmNumber
CustomerProperty Customer
DynamicEntity N/A
DynamicEntityArrayProperty N/A
EntityNameReferenceProperty EntityNameReference
KeyProperty Key
LookupProperty Lookup
OwnerProperty Owner
PicklistProperty Picklist
Property N/A
StateProperty State
StatusProperty Status
StringProperty String
UniqueIdentifierProperty UniqueIdentifier
N/A Internal

Memo

Virtual



///
<summary>
///
dynamicCreate metdodu Dynamic Entity kavramiyla lead olusturmayi bize gosterecek
/// </summary>
private bool dynamicCreate()
{
    try
   
{
       
// CRM Servis'ini cagiriyoruz
       
CrmService MyService = service();
   
       
// DynamicEntity nesnesini yaratyoruz
       
DynamicEntity leadEntity = new DynamicEntity();
       
// Entity ismini veriyoruz.
       
leadEntity.Name = EntityName.lead.ToString();
       
// Property'ler icin bir Array olusturuyoruz.
       
ArrayList arrProps = new ArrayList();
   
       
// Textbox deger iceriyor mu diye kontrol ediyoruz.
       
if (txtName.Text != string.Empty)
        {
           
// Eger deger iceriyorsa; Property nesnemizi cagiriyoruz ve
            // adn ve degeri veriyoruz. Boylece calisma aninda bir class'in
            // icerisindeki bir nesneye deger vermis oluyoruz.
           
StringProperty firstname = new StringProperty();
            firstname.Name =
"firstname";
            firstname.Value = txtName.Text;
            arrProps.Add(firstname);
        }
       
if (txtSurname.Text != string.Empty)
        {
           
StringProperty lastname = new StringProperty();
            lastname.Name =
"lastname";
            lastname.Value = txtSurname.Text;
            arrProps.Add(lastname);
        }
       
if (txtMail.Text != string.Empty)
        {
           
StringProperty mail = new StringProperty();
            mail.Name =
"emailaddress1";
            mail.Value = txtMail.Text;
            arrProps.Add(mail);

        }
       
if (txtState.Text != string.Empty)
        {
           
StringProperty state = new StringProperty();
            state.Name =
"address1_stateorprovince";
            state.Value = txtState.Text;
            arrProps.Add(state);
        }
       
if (txtCity.Text != string.Empty)
        {
           
StringProperty city = new StringProperty();
            city.Name =
"address1_city";
            city.Value = txtCity.Text;
            arrProps.Add(city);
        }
       
// Property'leri bir DynamicEntity'e teslim ediyoruz.
       
leadEntity.Properties = (Property[])arrProps.ToArray(typeof(Property));
       
       
// Ve final entity'imizi olusturmasi icin servise veriyoruz.
       
MyService.Create(leadEntity);
        return true;
    }
   
catch (Exception ex)
    {
        HandleException(ex);
   
    return false;
    }
}


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



Bir makale daha burada biter. Hepiniz hoşçakalın.

Barış KANLICA
Yazılım Uzmanı – Software Specialist
brsk@e-kolay.net
www.cub-e.net

 

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

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.)

İ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.

       
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 = "";
           
string 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;
    }
}

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 

Microsoft Dynamics CRM 3.0 ‘dan Veri Sorgulama Yöntemleri -1 (Web Servisleri)

Microsoft Dynamics CRM 3.0 ‘dan Veri Sorgulama Yöntemleri -1 (Web Servisleri)

Microsoft CRM verilerini okumak isimli bir yazı dizisi oluşturmaya karar verdim. Bunun nedeni ise CRM ile uğraşan pek çok insanla tanışmam ve hepsinin farklı bir yol izlediğini görmem. Hepsi bir,iki yol biliyor ama çoğu eksik veya yanlış bilgilerle bu işi yapıyorlar. Bütün yöntemleri biraraya getirip anlatmak en iyisi olacak diye düşündüm.

Microsoft CRM üzerinde veri sorgulaması yapmanın üç yolu bulunmakta ve ben bu üç yolu, bu yazı dizisinde örnekleriyle anlatacağım. Bu üç yol sırasıyla, Web Servislerini kullanmak, Sql kullanarak veritabanına erişim ve FetchXML kullanmak. Yazımızın birinci bölümü web servisleri ile başlıyor;

Microsoft CRM, bizlere üzerinde uygulama geliştirmek için çok iyi bir platform mimarisi sunuyor. Bu mimarinin neredeyse temel yapıtaşı konumunda olan WebServis’leri ise bize özellikle veri yazarken büyük kolaylıklar sağlasa da veri okurken bazen karışık olabiliyor. Web Servisleri class(sınıf) mimarisinde olduğundan nesne paylaşımına dayalı bir altyapı sunuyor. Bu doğru kullanıldığında, bize, program yazarken uzun uzun attribute ve property hazırlamak derdinden kurtarıyor.

Microsoft CRM’in 2 adet temel Web Servisi bulunmakta;

  1. CRM Service : istediğiniz entity üzerinde Create(Oluşturma),Update(Güncelleme) , Delete(Silme) gibi işlemleri yapmanızı sağlıyor. Adresi;
    http://<yourservername(:port)>/mscrmservices/2006/crmservice.asmx
  2. Metadata Service : CRM’in entity ve picklist mimarisi gibi metadata veritabanında bulunan veriler üzerinde yine Create(Oluşturma),Update(Güncelleme) ,Delete(Silme) gibi işlemleri yapmanızı sağlıyor. Metadata verisi içerisinde bir picklist(yani combobox-dropdownbox)’in içeriği, bir alanın türü gibi sistem üzerinde kullandığımız nesnelere yönelik bilgileri tutmaktadır. Adresi;
    http://<yourservername(:port)>/mscrmservices/2006/metadataservice.asmx

Web Servisini Projemize Eklemek :



Visual Studio’da açtığımız uygulamamızın adı üzerinde sağ tuşa tıklayarak getirdiğimiz menüde aşağıdaki gibi “Add Web Reference”’a tıklıyoruz.

Açılan pencereye eklemek istediğimiz servisin url’ini yazıyoruz ve “go” düğmesine tıklıyoruz.





Servis credential yani kimlik doğrulamak için bizden kullanıcı adı ve şifre isteyecek. Bunu geçtikten sonra “Web reference name”’e servise verecegimiz ismi yazıyoruz. Burada ben “MyService” ismini veriyorum. “Add Reference” düğmesine tıklıyoruz.Artık servisimizi projemize eklemiş durumdayız.
XML Web Servisleri hakkinda daha fazla bilgi almak ve kendi web servislerinizi yazmak istiyorsaniz aşağıdaki linklerden gerekli bilgiye ulaşabilirsiniz;

http://www.yazgelistir.com/Makaleler/makaleler.aspx?KatId=1000000009&Kat=XML%20Web%20Servisleri

http://www.codeproject.com/cs/webservices/myservice.asp

Kod Yazmaya Başlamak:

Servisimizi ekledikten sonra kod yazma işlemine geçebiliriz. Örnek kod bize CRM Servislerini kullanarak “ select fullname, contactid from filteredcontact where address1_city like ‘İstanbul’ ’” sorgusunu nasıl çekebileceğimizi gösterecek. Uygulamamızın ekran görüntüsü aşağıdaki gibi olacak ve veri çektikten sonra(Veri Çek (Query Expression) düğmesine bastıktan sonra) bize mesaj kutusu içinde istediğimiz veriyi gösterecek

(Aşağıdaki örnek kodu kendi projeniz üzerine yapıştıbileceğinizi düşündüğümden makalemin bundan sonraki kısmına kod üzerindeki not alanlarında devam ediyorum.)
Düğmenin arkasında yazan kodlar ve bunların açıklamalaı ise aşağıdaki gibidir; (CRM nesnelerine kolayca erişmek için en tepeye “ using TestApplication.MyService; ” kodunu eklemeyi unutmuyoruz tabii ki) (TestApplication burada benim uygulamamın adı siz kendi uygulamanızın adını yazmalısınız bunun yerine)


private
void btnRetrieveData_Click(object sender, EventArgs e)
{
   
try
    {
       
// CRM Servis'ini cagiriyoruz
       
CrmService service = new CrmService();

       
// servise network'te kim oldugumuzu soyluyoruz. (Eger CRM Server'i ile ayni domainde degilseniz
        // bunu yapmak zorundasiniz yoksa "The request failed with HTTP status 401: Unauthorized." hatasini alirsiniz)
        System.Net.NetworkCredential MyCredential = new System.Net.NetworkCredential();
        MyCredential.UserName =
""; // Domain Kullanici Adi
        MyCredential.Password =
""; //Domain Kullanicisinin Sifresi
        MyCredential.Domain =
""; //Domain Adi
        service.Credentials = MyCredential;
       
// Eger crm server ile ayni domainde iseniz ve sizin crm'de bir rolunuz varsa asagida parantezler icerisinde
        // belirttigim komutu yukaridaki 5 satir yerine kullanabilirsiniz
        // ( service.Credentials = System.Net.CredentialCache.DefaultCredentials; )
        // istedigimiz sutunlari getirmemizi saglayacak olan ColumnSet nesnemizi olusturuyoruz.

        ColumnSet cols = new ColumnSet();
       
// ColumnSet nesnemize geri dondurmek istedigimiz sutunlarin adini veriyoruz.

        cols.Attributes =
new string[] { "fullname", "contactid" };
       
// ConditionExpression nesnemizi olusturuyoruz.

       
ConditionExpression condition = new ConditionExpression();
       
// Bize donecek olan contact'lar icerisinde adresinin sehri stanbul olanlari filtreliyoruz.

        condition.AttributeName =
"address1_city";
        condition.Operator =
ConditionOperator.Like;
        condition.Values =
new string[] { "stanbul" };

       
// FilterExpression nesnemizi olusturuyoruz.
       
FilterExpression filter = new FilterExpression();
       

        // Yukarida olusturdugumuz kosul filtresini FilterExpression'a veriyoruz.
        filter.FilterOperator = LogicalOperator.And;
        filter.Conditions =
new ConditionExpression[] { condition };

       
// QueryExpression nesnemizi olusturuyoruz.
       
QueryExpression query = new QueryExpression();

       
// Yukarida olusturdugumuz filtremizi ve donmesini istedigimiz sutunlari QueryExpression'a veriyoruz.
        query.EntityName = EntityName.contact.ToString();
        query.ColumnSet = cols;
        query.Criteria = filter;

       
// Bu kosula uyan contact'lari sistemde sorgulatiyoruz.
       
BusinessEntityCollection contacts = service.RetrieveMultiple(query);
       
if (contacts != null)
           
if (contacts.BusinessEntities.Length > 0)
            {
           
    //BusinessEntityCollection array'indan sorgulama sonucunda donen ilk degeri aliyoruz.
                //Ve bu ilk degeri contact sinifina ceviriyoruz.
               
contact myContact = (contact)contacts.BusinessEntities[0];
               
if (myContact != null)
                {
                   
//artik elimizde olan contact sinifi ile yukarida bize donmesini istedigimiz sutunlarin
                    //iceriklerini alabiliriz.
                   
MessageBox.Show("ad-soyad:" + myContact.fullname.ToString() + " id:" + myContact.contactid.Value.ToString());
                 }
            }
    }
    // Soap yani Web Servisi hatalarini yakalamak icin ilgili Exception sinifimiz ekliyoruz.
   
catch (System.Web.Services.Protocols.SoapException ex)
    {
       
MessageBox.Show(ex.Message + " " + ex.Detail.InnerText);
    }
   
// Soap disindaki Standart hatalari yakalamak icin Exception'i da kodumuza ekliyoruz.
   
catch (Exception ex)
    {
       
MessageBox.Show(ex.Message);
    }
}


Programımızı çalıştırdığımızda bize istediğimiz bilgiyi sorgulayıp getirecektir. Bir makalemizin daha sonuna geldik. Unutmayın veri sorgulama yöntemleri ile ilgili 2 makale daha var sırada.

Barış KANLICA
Yazılım Uzmanı – Software Specialist
brsk@e-kolay.net
www.cub-e.net