Yazılımcının Günlüğü | YazilimGunlugu.Com
Arama
Makale Kategorileri
Üye Girişi
Şuanki online üyeler()
Aktif üye bulunmamaktadır.


Microsoft Dynamics CRM Hatalarını Yakalamak

Yazar: Baris KANLICA

Kategori: Microsoft Dynamics CRM

Eklenme Tarihi: 23.03.2008 14:47:06

Microsoft Dynamics CRM Web Servisi'nde Request parametresi kullanılarak bir çağrı yaptığınızda hata olarak System.Web.Services.Protocols.SoapException sınıfından ortak bir hata mesaj yapısı döner.

CRM web servisi bir web servisinin doğası gereği soap ile iletişim kurmakta ve işlenen hataları da soap içinde xml ile döndürmektedir.

Microsoft Dynamics CRM Web Servisi'nde Request parametresi kullanılarak bir çağrı yaptığınızda hata olarak System.Web.Services.Protocols.SoapException sınıfından ortak bir hata mesaj yapısı döner.

SoapException'ın Message property'si her zaman için "Server was unable to process request." hatasını döndürür.

SoapException içerisinde Detail property'si oluşmuş olan hata hakkında daha fazla bilgi verecektir. Detail property bir XmlNode türündendir ve InnerXml property aşağıdaki formatta hatayı sunmaktadır.

<error> <description>Error description goes here.</description> <code>0xABCD1234</code> <type>Platform</type> </error>

ErrorCode yani xml içerisindeki Number hexadecimal türündedir. Örnek verecek olursak; eğer veritabanında olmayan bir fax'ı çağırmaya kalkalsanır hata aşağıdaki şekilde olacaktır:

<error> <code>0x80041103</code> <description>'Lead' entity doesn't contain attribute with Name = 'name'.</description> <type>Platform</type> </error>

Standart bir kodlama mantığında catch bloğunda bu hatayı aşağıdaki şekilde yakalabiliriz.

catch(System.Web.Services.Protocols.SoapExceptionex)
{
    Message = ex.Message;
    Detail = ex.Detail.InnerText;
}

Bu şekilde hatayı öğrenebiliriz ama detaylı ve güzel bir hata mesajı olmaz son kullanıcı için. Tabii burada bu hataları loglayacak bir yapı oluşturabiliriz bu tercihinize kalmış ama her durumda detaya ihtiyacımız var.

CRM'in detaylı hata kod listesine buraya tıklayarak ulaşabilirsiniz.

Hata yapısı ve içeriği hakkında bu bilgileri verdikten sonra bu hataları yakalayacak kodu vermek güzel olacak sanırım :) Aşağıda kodu ve açıklamasını bulabilirsiniz.

/// <summary>
///
Hatalari yakaliyoruz.
/// </summary>
/// <param name="ex">System Exception</param>
/// <returns>hatanin detayli aciklamasi</returns>
private stringHandleException(Exceptionex)
{
   
stringError = "Uygulama bir hata ile karsilasti."+ System.Environment.NewLine;
    Error +=
"Message : "+ ex.Message + System.Environment.NewLine;
   
if(ex.InnerException != null)
        Error += ex.InnerException.Message + System.
Environment.NewLine;
   

    SoapException
se = ex as SoapException;
   
if(se != null)
    {
        Error +=
"Code : "+ GetError(se.Detail, "//code") + System.Environment.NewLine;
        Error +=
"Desription : "+ GetError(se.Detail, "//description") + System.Environment.NewLine;
        Error +=
"Type : "+ GetError(se.Detail, "//type") + System.Environment.NewLine;
    }
   
returnError;
}

/// <summary>
///SoapException.Detail icerisindeki hatayi dondurur
/// </summary>
/// <param name="errorInfo">hatayi iceren XmlNode'u.</param>
/// <param name="item">geri dondurulecek hata.</param>
/// <returns>hata detayi ya da bos icerik.</returns>
private stringGetError(XmlNodeerrorInfo,stringitem)
{
   
XmlNodecode = errorInfo.SelectSingleNode(item);
   
if(code != null)
   
    returncode.InnerText;
   
else
        return
"";
}
  1. Burada dikkat edilmesi gereken şey hatanın SoapException sınıfı türünden olup olmadığını kontrol ettiğimiz kısım;

        SoapExceptionse = ex as SoapException;

    eğer içerik SoapException türünden ise detayını öğrenmek isityoruz. ( "as" ifadesi hakkında daha fazla bilgi almak için buraya tıklayınız.)
  2. Yukarıda hata durumunda dönecek Xml içeriğini verdim. Bu bir Xml olduğu için XmlNode'larına erişerek istediğimiz bilgiyi alalım. İşte GetError bu işe yarıyor. Soap Exception'ın Detail'ını ve istediğimiz node'u söylüyoruz bize geri dönüyor.

        GetError(se.Detail, "//code")

Bu kod sonucunda elde ettiğimiz hata mesajı;

Uygulama bir hata ile karsilasti.
Message : Server was unable to process request.
Code : 0x80041103
Desription : 'Lead' entity doesn't contain attribute with Name = 'name'.
Type : Platform

Bir makalemizin daha sonuna geldik umarım faydalı olmuştur. Web sitemi ziyaret etmeyi unutmayın :)

Barış KANLICA

Yazılım Uzmanı ? Software Specialist
brsk@e-kolay.net
www.cub-e.net
forum.cub-e.net

Yazar Hakkında Yorum Yok Yorum Yaz Yazara ait diğer Makaleler
Tema
Anket
ASP.NET MVC'yi Projeleriniz de kullandınız mı?


En Çok Okunan Makaleler
En Son Eklenen Makaleler
Soru Merkezinde Bekleyenler
Ana Sayfa | Hakkımızda | Editörler | Yazarlar | RSS RSS | İletişim
Yazılım Günlüğü 2007-2009 © Tüm Hakları Saklıdır.