Bu site emekli olmuştur. Arşiv amaçlı olarak BT AKADEMİ sponsorluğunda yayın hayatına devam etmektedir.




C#nedir?com
 
YAZAR HAKKINDA
Ziver Alen Malhasoğlu
Ziver Alen Malhasoğlu
http://www.csharpnedir.com/
İletişme geçmek için tıklayın.
2 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler: 3.0’in callout calloutlar dosyasi dosyayi enterprise framework gerekmektedir. isleminden kaydin kullanilarak library microsoft olusturma tamamen C# / VC#/.NET Ziver Alen Malhasoğlu
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Orta
Kategori : C# / VC#/.NET
Yayınlanma Tarihi : 22.8.2007
Okunma Sayısı : 29220
Yorum Sayısı : 1     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
Silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 26.12.2024
Turhal Temizer
Mac OS/X Removing CUDA 26.12.2024
Burak Selim Şenyurt
Rust ile ECS Yaklaşımını Anlamak 26.12.2024
Burak Selim Şenyurt
Birlikte Rust Öğrenelim Serisi 26.12.2024
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
Microsoft Dynamics CRM 3.0’da Callout Yazmak, ve Bir Örnek
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
Bu makalemizde MS CRM 3.0 ile özelleştirme yapmak isteyen okuyucularımıza temel callout kavramlarını açıklamaya çalışacağız. Yazının özeti kısaca ağıdaki gibidir: o “Callout” nedir? Nerede kullanılır?

o Hangi olaylar callout’ları tetikler?

o Bir Callout örneği: TCKN (=Türkiye Cumhuriyeti Kimlik Numarası) kontrolü


Gereken Altyapı Bilgisi

Bu yazıdan yararlanmak için iyi seviyede C# bilgisi faydalı olacaktır. Öncelikle callout programlamanın temel kamvramlarından bahsedelim.

“Callout” nedir?

Callout’lar basitçe .NET Framework (=FW) 1.1 ile derlenmiş kütüphanelerdir.

Yukarıdaki cümleyi okuduktan sonra aklımıza hemen bir soru gelecektir: Acaba FW 2.0 veya FW 3.0 kullanarak callout yazılabilir mi? Bu sorunun yanıtı çok basit “Ne yazık ki yazılamaz”. Çünkü bir “application pool”da sadece bir .NET Framework sürümü koşabilir. Bu kısıtlama Microsoft tarafından getirildiği için callout kodlarımızı FW 1.1’de yazmamız gerekecektir. Bunun asıl nedeni CRM 3.0’ın FW 1.1‘da yazılmış olmasıdır, reflection kullanılılarak callout’lar çalıştırılmaktadır.

Nasıl Framework 1.1 kodu üretilir?

Bunu yapmak için iki yol vardır.

İlk yol alışılagelmiş yoldur, Visual Studio .NET (=VSNET) 2003 kullanılarak FW 1.1 kodu üretilebilir.

İkinci yol biraz daha karışık. VSNET 2005 kullanılarak ve sistemimizde de fw1.1 yüklü ise msbee yüklenmesini gerektirir ve uygun bir config dosyası yaratılmalıdır. Yazılacak bir msbuild komutu ile fw1.1 kullanlarak derlenmiş bir dosya elde ederiz.

Bu yol biraz daha karmaşık olduğundan farklı bir makalede anlatılacaktır.

MS CRM 3.0’ın özelliklerini artırmak için calloutlar yazılmaktadır. Özellikle entegrasyon projelerinde verinin bütünlüğünü ve tutarlılığını sağlamak için calloutlar kullanılırlar. Örnein aynı çalışa n numarasına sahip iki kişiyi kaydetmek istemezsiniz, bunu calloutlar sağlar, MS CRM aynı verilerin girilmesine bir kısıt koymaz, aynı kayıttan yüzlerce yaratılabilir. Yazılacak bir callout ile çalışan numaraları kontrol edilir ve girilen numara daha önceden kayıt edilmiş ise yeni kayıt oluşturma işlemi durdurulabilir, eğer böyle bir numara yok ise kayıt oluşturmaya her zamanki gibi devam edilebilir.

CrmCalloutBase Sınıfının Önemi

Bu sınıf microsoft.crm.platform.callout.base.dll dosyasında yer alır. Bu dosyayı MS CRM 3.0’ın sistem dizininde bulabilirsiniz.

Tüm callout’lar CrmCalloutBase sınıfından türetilmek zorundadır, yani her callout projemize referans olara microsoft.crm.platform.callout.base.dll kütüphanesini eklememiz gerektiği sonucuna varabiliriz. Bu dosyayı MS CRM 3.0 kurulum dosyalarının bulunduğu aşağıdaki yoldan bulabilirsiniz: Microsoft CRM 3.0 Professional Edition Disk \Bin\Assembly\Microsoft.Crm.Platform.Callout.Base.dll
Aşağıda calloutların kullanılabildiği olayların listesi mevcuttur. Bu olaylar kullanılarak MS CRM’de özel kontroller ve ek özellikler gerçekleştirilebilir.

PreAssign / PostAssign
Atama işleminden önce/sonra çağırılır.
PreDelete / PostDelete
Silme işleminden önce/sonra çağırılır.
PreUpdate / PostUpdate
Güncelleme işleminden önce/sonra çağırılır.
PreCreate / PostCreate
Yeni kayıt oluşturma işleminden önce/sonra çağırılır.
PreMerge / PostMerge
Birleştirme işleminden önce/sonra çağırılır.
PreSetState / PostSetState
Bir kaydın durumunu değiştirmeden önce/sonra çağırılır.
PreSend
Bir e-posta gönderilmeden önce çağırılır.
PostDeliver
Bir e-posta teslim edildikten sonra çağrılır.
Referans: http://msdn2.microsoft.com/en-us/library/aa613520.aspx
Yukarıdaki tablo calloutlarla yapılabilecek işlemlerin listesini göstermektedir. Oluşturma/Güncelleme/Silme/Atama işlemlerini tamamen özelleştirebiliriz. Diğer işlemleri biraz açıklayalım:

Atama: Bir kaydın CRM’deki sahibinin değişmesi anlamına gelen bu işlem callout’lar tarafından tamamen özelleştirilebilir.

SetState: Bir kaydın aktif veya pasif yapılması anlamına gelen bu işlem tamamen özelleştirilebilir niteliktedir.

Merge: iki kaydın birleştirilmesi işlemi anlamına gelir. Yani bu kayıtlardaki veriler birleştirilir. Öncesine veya sonrasına callout yazılabilir türden yanı tamamen özelleştirilebilir türden bir olaydır.

Yazacağımız bir sınıfı CrmCalloutBase sınıfından türettikten sonra yukarıdaki fonksiyonlardan bir tanesini override ederiz. Ve derleme işlemi gerçekleştirildikten sonra oluşan DLL dosyası yayımlanmaya hazır bir callout kodu oluşturur. MS CRM sunucusuna ilgili dizine kopyalanarak ayar dosyasına kayıt atılır ve bir kez iisreset yapıldıktan sonra callout çalışmaya hazır hale gelir.

Yukarıda anlatıldığı gibi oluşturulan .NET kütüphane dosyası (class library) MS CRM sunucusunun bin\assembly dizinine yerleştirilir. Yani: eğer sunucu
C:\Program Files\Microsoft CRM yoluna kurulduysa callout dll dosyalarımızı C:\Program Files\Microsoft CRM\Server\bin\assembly dizinine yerleştiririz.


MS CRM 3.0 sunucunuzu kurduğunuz dizin şu ise:
C:\Program Files\Microsoft CRM\ callout’larınız aşağıdaki dizinde olmalıdır.
C:\Program Files\Microsoft CRM\Server\bin\assembly\
Yukarıdaki dizine callout dll’i konduktan sonra CRM sunucusuna yeni konan callout ile ilgili bilgi verilmesi gerekmektedir. Sunucunun calloutlar hakkında bilgi almak için okuduğu dosya callout.config.xml dosyasıdır. Bu xml dosyası da callout’ların konduğu dizinde yer alır. Aşağıdaki örnek bir callout.config.xml dosyasıdır.

<?xml version="1.0" encoding="utf-8" ?> <callout.config version="2.0">
     <callout entity="contact" event="PreCreate">
          <subscription assembly="DontPermitDuplicates.dll" class="DontPermitDuplicates.NoDblNames" />
     </callout>
</callout.config>

Callout dosyamızın isim alanı olarak yukarıda DontPermitDuplicates olduğunu görüyoruz. Herhangi bir Lead varlığı oluşturulmadan önce CRM’de burada belirttiğimiz dll’deki PreCreate fonksiyonu çalışacaktır.

CRM DontPermitDuplicates.NoDblNames sınıfından bir nesne türetir ve PreCreate fonksiyonunu çağırır. Bu metod bazı kontroller yapabilir veya iş süreci için ihtiyaç duyulan operasyonları gerçekleştirebilir. Bu işlemler sırasında kod oluşturma işleminin kesilmesi gerekiyorsa abort enum’unu geri döndürerek Lead oluşturma sürecini durdurabilir ve bir hata mesajı ekrana getirebilir. Eğer her şey iş mantığı açısından yolunda gidiyorsa method çalışması sonucunda continue enum’unu döndürerek sorunsuz bir şekilde Lead’in oluşturulmasına izin verebilir.

Adım Adım Basit bir Callout Örneği

1. VSNET 2003 kullanarak bir “Sınıf Kütüphanesi” (=Class Library) oluşturun.

2. microsoft.crm.platform.callout.base.dll dosyasını referans olarak ekleyin.

3. CrmCalloutBase ‘den türeyen bir sınıf yazın.

4. Bu sınıfın içerisinde PreCreate yazdıktan sonra CTRL+BOŞLUK tuşlarına basın ve override edebileceğiniz fonksiyonların listesini görün, bu listeden PreCreate’i seçin ve ENTER tuşuna basın.

Aşağıdaki örnek callout kodunu kullanarak ilk callout’umuzu yazabiliriz.

public override PreCalloutReturnValue PreCreate(
      CalloutUserContext userContext, CalloutEntityContext entityContext,
      ref string entityXml, ref string errorMessage
)
{
      PreCalloutReturnValue calloutRetVal = PreCalloutReturnValue.Continue;
      // error message is not set at the begining
      errorMessage = string.Empty;
      XmlDocument xd = new XmlDocument();
      xd.LoadXml(entityXml);
      /* all the elements in the XML file is iterated, and only desired ones are added
      to the nvPostedInfo collection */

      NameValueCollection nvPostedInfo = new NameValueCollection();
      foreach (XmlElement element in xd.GetElementsByTagName("Property"))
      {
            string strAttributeName = element.Attributes.GetNamedItem("Name").Value;
            switch (strAttributeName) {
                  case "tbs_tckn":
                        nvPostedInfo.Add("tbs_tckn", element.InnerText);
                  break;
            }
      }

      if ( ! IsTcknValid( nvPostedInfo["tbs_tckn"] ) ) {
            errorMessage = "The TCKN value is not valid!";
            calloutRetVal = PreCalloutReturnValue.Abort;// abort operation
      }
      return calloutRetVal;
}

Yukarıdaki kod IsTcknValid adında bir fonksiyon kullanmaktadır, bu fonksiyon bool bir değer döndürmektedir. Eğer parametre olarak verilmiş TCKN geçerli yani gerçek olabilecek bir TCKN ise doğru değil ise yalnış sonucu döndürecektir.

Aşağıda TCKN kontrol eden kodu bulacaksınız. Bu fonksiyon kullanılarak sisteminize geçersiz TCKN’lerin girilmesini engelleyebilirsiniz. Bu veri doğruluğunu sağlamak için çok faydalı bir araçtır. (Aşağıda sunulan kod şu adreste yer alan SQL fonksiyonunun C#’a çevrilmiş halidir: http://www.verivizyon.com/detail.asp?catid=17&cid=317 )

private bool IsTcknValid(string TcknToValidate)
{
      bool isValid = false;
      TcknToValidate = TcknToValidate.Trim();

      if (TcknToValidate.Length != 11) return isValid;
      short C1, C2, C3, C4, C5, C6, C7, C8, C9;
      int Q1, Q2;
      Int64 TCNO = Convert.ToInt64(TcknToValidate);
      Int64 ATCNO = TCNO / 100;
      Int64 BTCNO = TCNO / 100;
      C1 = Convert.ToInt16( ATCNO % 10 ); ATCNO /= 10;
      C2 = Convert.ToInt16( ATCNO % 10 ); ATCNO /= 10;
      C3 = Convert.ToInt16( ATCNO % 10 ); ATCNO /= 10;
      C4 = Convert.ToInt16( ATCNO % 10 ); ATCNO /= 10;
      C5 = Convert.ToInt16( ATCNO % 10 ); ATCNO /= 10;
      C6 = Convert.ToInt16( ATCNO % 10 ); ATCNO /= 10;
      C7 = Convert.ToInt16( ATCNO % 10 ); ATCNO /= 10;
      C8 = Convert.ToInt16( ATCNO % 10 ); ATCNO /= 10;
      C9 = Convert.ToInt16( ATCNO % 10 ); ATCNO /= 10;
      Q1 = ((10 - ((((C1 + C3 + C5 + C7 + C9) * 3) + (C2 + C4 + C6 + C8)) % 10)) % 10);
      Q2 = ((10 - (((((C2 + C4 + C6 + C8) + Q1) * 3) + (C1 + C3 + C5 + C7 + C9)) % 10)) % 10);
      if ( TCNO == ((BTCNO * 100) + (Q1 * 10) + Q2) ) {
      isValid = true;
      }
      return isValid;
}

Yukarıdaki kodu da yazdıktan sonra Sınıf Kütüphanemizi derlememiz gerekmektedir. Oluşan DLL dosyası aşağıdaki dizine konacaktır: "C:\Program Files\Microsoft CRM 3.0\Server\bin\assembly"
Bu dizinde callout.config dosyası bulunmaktadır, sözkonusu xml dosyasında sistemde çalıştırılacak callout DLL’lerinin bildirimi mevcuttur.

Biz de aşağıdaki bildirimi callout.config.xml dosyasının içerisinde koyacağız.

<?xml version="1.0" encoding="utf-8" ?>
      <callout.config version="2.0">
      <callout entity="contact" event="PreCreate">
            <subscription assembly="DontPermitDuplicates.dll" class="DontPermitDuplicates.NoDblNames" />
      </callout>
</callout.config>
DİKKAT! XML uzantısını callout.canfig dosyasının sonuna koymayı unutmayınız!
örneğin: callout.config.xml

Şimdi geçersiz bir TCKN girerek kodu test edelim J

Kodun Test Edilmesi

Öncelikle TCKN numarasını tutacak bir alan oluşturmamız gerekmektedir. Bu alanımızın adı "new_tckn" ve nvarchar tipinde olsun. Bu alanı oluşturduktan sonra contact varlığının formuna bu alan yerleştirilmelidir.

1) contact varlığı için özellik oluşturulur

2) contact formuma alan yerleştirilir, sonra değişiklikler yayımlanır.

3) Aşağıdaki dosyayı düzenleyin, eğer mevcut değilse notepad.exe ile bu dosyayı oluşturun ve kaydedin. "C:\Program Files\Microsoft CRM\Server\bin\assembly\callout.config.xml"

4) iisreset komutunu başlat -> çalıştır bölümünden çalıştırın

Şimdi yeni bir contact varlığı oluşturmaya başlayın ve TCKN değeri olarak “12345678901” ifadesini girin, daha sonra kaydet tuşuna basın. Bu operasyon yazdığımız callout taradınfan, 12345678901 değerini geçerli bir TCKN olarak değerlendirmediğinden, engellenecektir. Girilen geçersiz bir TCKN değeri olduğu için aşağıdaki hata mesajı da callout tarafından önyüze gönderilecektir.



Sonuç

Bu makalede callout programlamanın temelleri gösterilmiştir. Örnek bir callout olarak Türkiye Cumhuriyeti Kimlik Numarası doğrulayıcı kontrolü konmuş ve test edilmiştir. Callout kütüphanelerinin CRM’e reflection kullanılarak yüklendiği düşünülürse, ve CRM 3.0’ın .NET Framework 1.1 kullanılarak yazıldığı gözönüne alınırsa, yazacağımız callout projelerinin .NET 1.1 ile derlenmiş olması gerekmektedir. Çünkü bir “application domain” de birden fazla framework CLR’si çalıştırılamaz.

Örneğimizde veritabanı bağlantısına gerek duyulmadığından, bağlantı cümleciği kullanılmamıştır. Eğer gerekseydi bağlantı cümleciğimizi kodumuzun içerisine gömmemeyi tercih edecektik. Bu durumda bir config dosyasınra bu bilginin tutulması gerekecekti. Burada kullanılacak web.config dosyası MS CRM 3.0’daki web.config dosyası olacaktır.

Yeri gelmişken belirtmekte fayda var, eğer veri manipülasyonu ile ilgili bir kod yazıyorsak veri erişim katmanımızın Enterprise Library Data Application Block kullanılarak yazılabileceğini hatırlamalıyız. Gelecek makalemizde veri erişim katmanın olarak bu kütüphanenin kullanımını inceleyeceğiz. Tekrar görüşünceye dek kod yazmaktan keyif almaya devam edin!

Ekler

A.1. Eğer Callout’larınız çalışmıyorsa şunlara bir göz atın!

Ustalıkla kaleme alınmış iki sorun giderme makalesi için aşağıdaki adresleri ziyaret edin:

"Is your Microsoft CRM callout not working?", http://blog.sonomapartners.com/2007/03/is_your_microso.html

"The functionality that you expect from a callout .dll file does not work as expected in Microsoft Dynamics CRM 3.0"http://support.microsoft.com/kb/933842

A.2 Diğer Callout Kaynakları

Microsoft’un örnek callout kodu CRM SDK’sının 3.0.7 sürümünde mevcuttur.
http://msdn2.microsoft.com/en-us/library/aa680675.aspx

A.3. Enterprise Library for .NET Framework 1.1

Source: http://msdn2.microsoft.com/en-us/library/ms954827.aspx

Enterprise Library Data Access Application Block hakkında bilgi almak isterseniz yukarıdaki adrese bir göz atınız. Tekrar kullanılabilir ve genişletilebilir kaynak kodu verilen bir kütüphane olarak veri erişim katmanlarınızda kolaylık sağlayacak bu kütüphaneyi incelemeyi unutmayın.

Download Latest Release (for .NET Framework 1.1): Enterprise Library, June 2005
See also: Enterprise Library for .NET Framework 2.0, January 2006
Lisans End User Licensing Agreement (EULA)
Pratik Laboratuvar çalışması Enterprise Library - Hands on Labs
Eğitim Videosu Enterprise Library Data Access Application Block (Level 300)
Topluluk Enterprise Library Community

Enterprise Library for .NET Framework 1.1 için sistem gereksinimleri
* Desteklenen işletim sis.: Windows 2000; Windows Server 2003; Windows XP Professional Edition
* Microsoft .NET Framework version 1.1
* Microsoft Visual Studio .NET 2003 (Enterprise Architect, Enterprise Developer, veya Professional)
* Bazı örneklerin kullanımı için Microsoft SQL Server ‘a ihtiyaç vardır.
* Eğer projelerinizde otomatik testler kullanmak istiyorsanız NUnit 2.1.4 kullanmanız tavsiye edilir.

A.4 Örnek bir Callout dizininin içeriği aşağıdaki gibidir



Makale:
Microsoft Dynamics CRM 3.0’da Callout Yazmak, ve Bir Örnek C#, Visual C# ve .NET Ziver Alen Malhasoğlu
  • Yazılan Yorumlar
  • Yorum Yaz
Bu konu hakkında yayınlanan yorum bulunmamaktadır.
"Yorum Yaz" tabını kullanarak sizde yorumlarınızı yazabilirsiniz.
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • Eklenen Son 10
  • Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor