Makale Özeti

Bu makalede sizlere Dynamics CRM 2011 servis mimarisinin temellerini anlatacağım.

Makale

 

Dynamics CRM üzerinde uygulama geliştirebileceğiniz çok güçlü bir mimari ile gelmektedir. Bu mimarinin temel yapı taşı ise WCF servisleridir. Bu yazımda sizlere CRM'in temel web servisleri olan Discovery ve Organization Servislerinin yapısını ve ne işe yaradıklarını anlatacağım.

CRM için kod geliştirirken her ne kadar sdk'nın içinden çıkan dll'leri kullansak da bu dll'ler vasıtasıyla ilk önce servis bağlantısı oluşturmamız gerekmektedir.  Yani verilere ulaşmak ve veri yazmak için WCF servislerini kullanmak zorundayız. Bu servislerle daha hızlı ve güvenli bir şekilde CRM platformuna entegre olmamızı sağlamaktadır.

WCF standartlaşmış bir teknoloji olduğu için biz yazılım geliştiricilere yeni özellikler sunmakta ve sürekli kendi içerisinde gelişmektedir. Dynamics CRM yapısında entity ve attribute katmanlı bir mimari bulunmaktadır. Yani biz CRM'in Business Logic katmanına müdahele edip yazılımlarımızı onunla entegre hale getirmekteyiz. Temel olarak nesne katmanı Entity isimli nesneden türemiştir. late-bound türlerde bu nesneyi sıklıkla kullanmaktayız. Early-bound olarak program geliştirme metodolojisini tercih edersek Entity class'ı ile işimiz olmamaktadır ama arka planda bütün nesnelerin bu class'dan türediği unutulmamalıdır. Bu konuya aşağıda bir örnekle tekrar değineceğim. CRM servislerine OrganizationServiceProxy ve DiscoveryServiceProxy sınıflarıyla bağlanmaktayız. Aşağıdaki kod bize bunu göstermektedir;

using (OrganizationServiceProxy _serviceProxy =
    new OrganizationServiceProxy(organizationUri, homeRealmUri, userCredentials, deviceCredentials)) ;

Discovery Servis

Dynamics Dynamics CRM 2011 multi-tenant bir mimaridedir. Yani tek bir uygulama birden fazla organizasyonu içerisinde barındırmaktadır. Yazılımcı olarak birden fazla organizasyon arasında geçiş yapmamız gerekiyorsa sistemde hangi organizyonlar olduğunu sorgulama işini Discovery servis ile yapmamız gerekmektedir. Bu servis yazma okuma işlemlerinin yapılacağı ana servise bağlanmamıza yardımcı olacak ve organizasyonların bilgisini bize döndürecektir. Aşağıdaki kod bize bu servise nasıl bağlanacağımızı ve organizasyonların bilgisine nasıl ulaşacağımızı göstermektedir.

Uri dInfo = new Uri("http://192.168.5.102/XRMServices/2011/Discovery.svc");
ClientCredentials clientcred = new ClientCredentials();
DiscoveryServiceProxy dsp = new DiscoveryServiceProxy(dInfo, null, clientcred, null);
dsp.Authenticate();
RetrieveOrganizationsRequest
rosreq = new RetrieveOrganizationsRequest();
RetrieveOrganizationsResponse
r = (RetrieveOrganizationsResponse)dsp.Execute(rosreq);
foreach
(OrganizationDetail o in r.Details)
{
      Console.WriteLine("Organizasyon Adı : " + o.FriendlyName);
}
Console
.ReadLine();

Bu kodla discovery servise bağlandıktan sonra ClientCredentials'ı kullanarak hali hazırda oturum açmış kullancının bilgisini sisteme göndermekteyiz. Ama her zaman bunu kullanmak istemeyebiliriz yani başka bir kullanıcı adı ve şifre ile sisteme girmek istediğimizde ClientCredentials'a kullanıcı adı, şifre bilgilerini verebiliriz.

clientcred.Windows.ClientCredential = new System.Net.NetworkCredential("kullanici adi", "sifre", "domain");

Yukarıdaki kodun çalışabilmesi için System.ServiceModel.Description,System.Runtime.Seriliazation, Microsoft.Xrm.Sdk.Client ve Microsoft.Xrm.Sdk dll'lerinin referanslara eklenmiş olduğundan emin olun. Ayrıca uygulamayı .Net Framework 4.0'da derlemek gerekiyor.

Organization Servis

Dynamics CRM 2011'in ana web servisi Organization Servis'tir. Bu servis içerisinde entity instance'ları üzerinde işlem yapabileceğimiz 6 metod ve execute metodu bulunmaktadır. CRM Servis sınıfını oluşturabilmek için Organization Service Proxy'nin bir instance'ını oluşturmamız gerekmekte. Daha sonrasında ise Organization Servis sınıfını bunu göre ayarlayacağız.

Uri dInfo = new Uri("http://192.168.5.102/XRMServices/2011/Organization.svc");
ClientCredentials
clientcred = new ClientCredentials();
clientcred.Windows.ClientCredential = new System.Net.NetworkCredential("kullanici adi", "sifre", "domain";
OrganizationServiceProxy
orgService = new OrganizationServiceProxy(dInfo, null, clientcred, null);
orgService.ServiceConfiguration.CurrentServiceEndpoint.Behaviors.Add(new ProxyTypesBehavior());
IOrganizationService
ioService = (IOrganizationService)orgService;

Yukarıdaki kodun çalışabilmesi için System.ServiceModel.Description, Microsoft.Xrm.Sdk ve Microsoft.Xrm.Sdk.Proxy dll'lerinin referanslara eklenmiş olduğundan emin olun. Ayrıca uygulamayı .Net Framework 4.0'da derlemek gerekiyor. Oluşturduğumuz bu servisi daha sonra programımızın ilerleyen bölümlerinde çağırıp işlemler yapacağız.

Tabi burada belirtilmesi gereken bir konu da işlem yapmak istediğiniz nesnenin üzerinde yetkilerinizin olmasıdır. Bir kayıt oluşturabilmek için oluşturma yetkisine sahip olmanız gerekmektedir. Sadece okuma yetkisiyle bir kayıt oluşturamazsınız. Bir sonraki yazımda sizlere entity mimarisi ve yazma okuma işlemlerini anlatacağım.