İlginizi Çekebilir
  1. Ana Sayfa
  2. Dynamics CRM
  3. Dynamics CRM 2015 Kodlama Mimarisi – Bölüm 5 – Plug-in’ler İçerisindeki Hataları Yakalamak

Dynamics CRM 2015 Kodlama Mimarisi – Bölüm 5 – Plug-in’ler İçerisindeki Hataları Yakalamak

Senkron çalışan plug-in’ler Sandbox’da olsun ya da olmasın herhangi bir hata ile karşılaştıklarında geriye kullanıcıya uyarı gösterecek bir yapıya sahiptirler ve bu durumu Dynamics CRM yönetir. Yani siz sadece hatayı geriye dondurursunuz.

Asenkron çalışan yapılar için CRM içerisinde System Job(AsyncOperation) isimli bir bolum yer almaktadır. İşte asenkron hataları da buradan takip edebilirsiniz.

Senkron çalışan plug-in’lerde ise hata mesajlarını InvalidPluginException türünden bir hata göndererek kontrol edebilirsiniz. Message özelliğine herhangi bir değer gönderirseniz sistem onu gösterir aksi takdirde varsayılan hata mesajı görüntülenir.

Ayrıca sunu da belirteyim Sandbox içinde çalışmayan plug-in’ler için hata mesajları sistemin çalıştığı Server’daki Olay Görüntüleyici içerisinde Uygulama hataları bolumu içerisine de kaydedilir.

Plug-in içerisinde uygun gördüğünüz yerde su şekilde hata fırlatabilirsiniz:

throw new InvalidPluginExecutionException(“The account number can only be set by the system.”);

Bir plug-in hata fırlattığında CRM su şekilde bir uyarı vermektedir.


Resim-1

Log dosyasını incelediğimizde de detayları almaktayız. Bizim gönderdiğimiz mesaja dikkat edin lütfen;

Unhandled Exception: System.ServiceModel.FaultException`1[[Microsoft.Xrm.Sdk.OrganizationServiceFault, Microsoft.Xrm.Sdk, Version=7.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]]: The account number can only be set by the system.

Detail: <OrganizationServiceFault xmlns=”http://schemas.microsoft.com/xrm/2011/Contracts” xmlns:i=”http://www.w3.org/2001/XMLSchema-instance”>

<ErrorCode>-2147220970</ErrorCode>

<ErrorDetails xmlns:a=”http://schemas.datacontract.org/2004/07/System.Collections.Generic”>

<KeyValuePairOfstringanyType>

<a:key>CallStack</a:key>

<a:value i:type=”b:string” xmlns:b=”http://www.w3.org/2001/XMLSchema”>

at Microsoft.Crm.Sdk.Samples.AccountNumberPlugin.Execute(IServiceProvider serviceProvider)

at PluginProfiler.Library.PluginAppDomainProxy.ExecuteCore(Stopwatch watch, ProfilerExecutionReport report, Object instance, Object executionParameter)

at PluginProfiler.Library.AppDomainProxy.Execute(ProfilerExecutionConfiguration configuration, ProfilerExecutionReport report)

</a:value>

</KeyValuePairOfstringanyType>

</ErrorDetails>

<Message>The account number can only be set by the system.</Message>

<Timestamp>2015-04-08T15:29:50.7437667Z</Timestamp>

<InnerFault i:nil=”true” />

<TraceText i:nil=”true” />

</OrganizationServiceFault>

Ama siz temel bir hata yönetim sınıfına sahip olmak ve yazdığınız bütün kodlarda kullanmak isterseniz su şekilde bir Exception mimarisini yazdığınız kodda kullanabilirsiniz. Fakat burada unutmamanız gereken nokta siz hata fırlatmaz hataları kendiniz Handle ederseniz CRM kullanıcıya hata mesajı göndermeyecektir. Bunun için InvalidPluginException’i siz fırlatmalısınız.

Aşağıdaki kodu Plug-in’ler içerisinde kullanmanızı pek tavsiye etmem çünkü sistem gayet detaylı bir geri bildirim yapmakta ama bir hata alıyor ve isin içinden çıkamıyorsanız bu kodu denemenizde fayda olabilir. Hatayı Server’da ya da CRM içinde bir yerlere yazdırıp imceleyebilirsiniz. Yine uygun gördüğünüz bir yerde kullanıcıya hata göstermek istiyorsanız “InvalidPluginExecutionException” fırlatmayı unutmayın.

catch (FaultException<Microsoft.Xrm.Sdk.OrganizationServiceFault> ex)

{

Console.WriteLine(“The application terminated with an error.”);

Console.WriteLine(“Timestamp: {0}”, ex.Detail.Timestamp);

Console.WriteLine(“Code: {0}”, ex.Detail.ErrorCode);

Console.WriteLine(“Message: {0}”, ex.Detail.Message);

Console.WriteLine(“Inner Fault: {0}”,

null == ex.Detail.InnerFault ? “No Inner Fault” : “Has Inner Fault”);

}

catch (System.TimeoutException ex)

{

Console.WriteLine(“The application terminated with an error.”);

Console.WriteLine(“Message: {0}”, ex.Message);

Console.WriteLine(“Stack Trace: {0}”, ex.StackTrace);

Console.WriteLine(“Inner Fault: {0}”,

null == ex.InnerException.Message ? “No Inner Fault” : ex.InnerException.Message);

}

catch (System.Exception ex)

{

Console.WriteLine(“The application terminated with an error.”);

Console.WriteLine(ex.Message);

// Display the details of the inner exception.

if (ex.InnerException != null)

{

Console.WriteLine(ex.InnerException.Message);

FaultException<Microsoft.Xrm.Sdk.OrganizationServiceFault> fe = ex.InnerException

as FaultException<Microsoft.Xrm.Sdk.OrganizationServiceFault>;

if (fe != null)

{

Console.WriteLine(“Timestamp: {0}”, fe.Detail.Timestamp);

Console.WriteLine(“Code: {0}”, fe.Detail.ErrorCode);

Console.WriteLine(“Message: {0}”, fe.Detail.Message);

Console.WriteLine(“Trace: {0}”, fe.Detail.TraceText);

Console.WriteLine(“Inner Fault: {0}”,

null == fe.Detail.InnerFault ? “No Inner Fault” : “Has Inner Fault”);

}

}

}

Bu konuyla ilgili sorularınızı https://forum.mshowto.org linkini kullanarak ulaşacağınız forum sayfamızda sorabilirsiniz.

Referanslar

https://www.mshowto.org

Yorum Yap

Yazar Hakkında

Barış Kanlıca firmalara CRM ve yazılım konusunda danışmanlık yapmaktadır ve yazılım eğitimleri vermektedir. Dynamics CRM alanında yaptığı çalışmalarından dolayı Microsoft kendisine bu alanda sadece 55 kişide olan MVP(Most Valuable Professional) unvanını ve ödülünü vermiştir. Barış Kanlıca birçok üniversite ve seminerde konuşmacı olmaktadır. Kendisi INETA topluluğunun bir konuşmacısıdır. Ayrıca www.yazgelistir.com, www.yazilimgunlugu.com ve www.nedirtv.com sitelerinde bölüm editörüdür.Uzunca bir süredir Londra'da yaşayan Barış Kanlıca ve kurucusu olduğu Mawens Business Solution'da danışmanlık hizmeti vermeye devam etmektedir.

Yorum Yap