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. Not: 2 örnektede kullanılacak olan HandleException(Exception) ve service() isimli metodlar benim daha önceden yazdığım metodlardır. Bunlar hakkında daha fazla bilgi almak istiyrsanız; HandleException(Exception) için buraya tıklayınız. Service() için buraya tıklayabilirsiniz 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;
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