Makale Özeti

Bir önceki makalemde Microsoft CRM Web Servislerini kullanarak veri sorgulama yöntemine bir örnek vermiştim. Şimdi ise Microsoft CRM’in veritabanına bağlanarak veri sorgulayacağız.

Makale

Microsoft Dynamics CRM 3.0 ‘dan Veri Sorgulama Yöntemleri -2(Sql Kullanarak Veritabanına Erişim)

Bir önceki makalemde Microsoft CRM Web Servislerini kullanarak veri sorgulama yöntemine bir örnek vermiştim. Şimdi ise Microsoft CRM’in veritabanına bağlanarak veri sorgulayacağız. Tabii bu sorgulama işlemi biraz programlama bilen bir kişinin yapabileceği kadar basit ve standart bir işlem. Burada size bir sql cümlesiyle nasıl sorgulama yapılırın ötesinde CRM’in veritabanı yapısı hakkında bilgi vermenin daha faydalı olacağını düşünüyorum.

Microsoft CRM veritabanında bilmeniz gerekenler;

  1. Bizim üzerinde alan açmamıza izin verdiği bütün entitylerin(CRM tablo nesnesi) çift tablodan oluştuğudur.
  2. CRM standart kurulumunda bizim onun üzerine açtığımız bütün alanların ve tabloların başına “new_” ibaresini koyar.
  3.  Veri sorgulamakta direkt tablolardan veri sorgulamak Microsoft tarafından yasaktır.
  4.  Bu yüzden Microsoft programlarımızda ve raporlarımızda “FilteredView” ismi verilen güvenlik altyapısını içerisinde bulunduran viewları kullanmamızı ister.
  5. Veritabanında relation’lar(ilişkiler) için Guid adı verilen unique(tekil) bir tanımlayıcı kullanılır.
  6. Her ne şartla olursa olsun veritabanına direkt veri yazmak Microsoft tarafından unsupported (sisteminize zarar geldiğinde Microsoft tarafından destek alamayacağınız durum) unsur olarak değerlendirilir. Veri yazmak için web servislerini kullanmak gerekmektedir

Burada sanıyorum açıklanmaya en ihtiyaç duyulan madde 1. Madde. Account(Firma) kartını ele alarak açıklayayım; CRM’in Microsoft tarafından açılmış “name”,”accountnumber” gibi alanları “accountbase” tablosu üzerinde yer alırken, bizim vergi_numarası diye bir alanı açtığımızı varsayalım. Bu alan “new_vergi_numarasi” şeklinde “AccountExtensionBase” tablosu içinde açılacaktır. Bu iki tablo birbirine “AccountId” isimli alandaki Guid ile bağlanacaktır. Bu örnekteki yapı bizim alan açmamıza izin verilen tablolarda buna benzer şekilde olacaktır.
Eğer filteredview kullanacaksanız bu yapının farkında bile olmayacaksınız. Çünkü “filteredview”lar bu ilgili tabloları birbirlerine join yaparak(yani birleştirerek) getirmektedir. “Filteredview”’lar bize, güvenlik,silinmiş ve pasife çekilmiş kayıtları göstermeme gibi bizim uğraşarak yapmamız gereken birçok şeyi içerisinde yapmış bir veri sorgulama ortamı sunmaktadırlar.
Bir filteredview'in yapisini incelerseniz en az 50 tablo ile joinli oldugunu görebilirsiniz; Aşağıdaki resimde FilteredAccount isimli view'in yapisinin bir kısmını bulabilirsiniz (Daha resme sığmayan en az 30 tablo var resmin altında)

FilteredAccount

Ayrica Özelleştirilebilir tabloların Extension isimli ek tablolarını veritabanında görebilirsiniz.

Extension

Benim oluşturduğum test uygulamasının “Veri Çek (Using a Sql Data Access)” düğmesinin altında yer alan kod; (Yine daha kolay olması için kod makale bundan sonra kod üzerindeki açıklamalarla devam edecek)


private
void btnQueryOnSql_Click(object sender, EventArgs e)
{
   
//sql server'a baglanmak icin gerekli olan baglanti cumlesini olusturuyoruz.
   
string ConnectionString = "data source=**sql_server**;database=**veritabani_adi**;user=**kullanici_adi**;password=**sifre**;";
   
//Baglanti cumlesini baglanti nesnemize parametre olarak vererek baglanti nesnemizi olusturuyoruz
   
SqlConnection myConnection = new SqlConnection(ConnectionString);
    try
   
{
       
//sql server baglantisini aciyoruz.
        myConnection.Open();
       
//veri cekmekte kullanacagimiz sql cumlesini olusturuyoruz.
       
string SQLstring = "select fullname, contactid from filteredcontact where address1_city like stanbul";
       
//sql cumlesini ve baglantimizi vererek bir veri cekme arabirimi olusturuyoruz.
       
SqlDataAdapter myDataAdapter = new SqlDataAdapter(SQLstring , myConnection);
       
//Verileri icerisinde barindiracak olan nesnemizi olusturuyoruz.
       
DataSet myDataSet = new DataSet();
       
//Verileri dolduruyoruz
        myDataAdapter.Fill(myDataSet);
       
if (myDataSet != null)
        {
               
if (myDataSet.Tables[0].Rows.Count > 0)
                {
                   
//Verileri gostermesi icin grdi'e veriyoruz.
                    GridView.DataSource = myDataSet.Tables[0];
                }
       
        else
       
        {
                   
throw new Exception("DataSet nesnesi kayt iermiyor.");
                }
        }
       
else
            throw
new Exception("DataSet nesnesi null geldi");
    }
   
catch (Exception ex)
    {
       
MessageBox.Show(ex.Message);
    }
   
finally
    {
       
//Baglanti acik ise kapatiyoruz.
       
if (ConnectionState.Open == myConnection.State)
        myConnection.Close();
    }
}

Bir makalemizin daha sonuna geldik. Unutmayın veri sorgulama yöntemleri ile ilgili 1 makale daha var sırada.

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